<div dir="ltr"><div>Hello<br><br>I have done further ram testing.<br><br>My first guess was to disable the XMP code - it didn't help, but I may have done things wrong as I was trying with a normal and a fallback mode to try more combinations of options, and apparently the ram settings are cached and shared between normal and fallback, even when max_mem_clock_mhz differ.<br><br>That's not a good thing when working on ram issues, so I wonder, is there any way to manually invalidate that mrc cache during tests?? (I almost want to comment the function in raminit.c) Since  I don't have a USBDEBUG yet,  I go to a linux shell to check the cbmem output between tests. So anything I can type to disable the mrc cache would do.<br><br>Alternatively, a really nice thing to have would be a nvram option to pass max_mem_clock_mhz without having to recompile, and invalidate this cache if the settings do not match, to cover cases like this one.  Also, overclockers would love that. So this option could even be used to pass custom SPD timings, as some bios do. It would require more thinking on what to do and how, but it looks like a nice feature to me. Would it be acceptable to add that to coreboot?<br><br>Anyway, I tried to downclock at various frequencies:<br> - 666 Mhz: CAS 7-7-7-20 : all sticks work, individually and together<br> - 800 Mhz: CAS 9-9-9-24: 1 stick doesn't work, the others do, but I still get errors during the memtest step 8.<br><br>I regret it is not possible to manually enter the right SPD information that I know to work: 11-11-11-29 for DDR3-2000, 11-11-11-31 for DDR3-2133 - and something slightly larger for DDR3-1600. So I have DDR3-2133 sticks that I am forced to run at DDR3-1333 speeds because otherwise the selected SPD settings make everything unstable :-(<br><br></div><div>If only I could slightly increase the latency, I could run at least at DDR3-1600 speeds with 0 error in memtest. I'm thinking of tweaking dram_find_common_params with:<br><br>ctrl->tRAS = MAX(ctrl->tRAS, dimm->tRAS) +X;<br><br></div><div>and manually trying X=1, X=2 etc. until I can finally have memtest running without error.<br><br></div><div>Would there be any issues with that? Any better idea?<br></div><div><br>Here is an extract from the log:<br><br>find_current_mrc_cache_local: No valid MRC cache found.<br>  Revision           : 11<br>  Type               : b<br>  Key                : 3<br>  Banks              : 8<br>  Capacity           : 4 Gb<br>  Supported voltages : 1.35V 1.5V<br>  SDRAM width        : 8<br>  Bus extension      : 0 bits<br>  Bus width          : 64<br>  Optional features  : DLL-Off_mode RZQ/7 RZQ/6<br>  Thermal features   : PASR ext_temp_range<br>  Thermal sensor     : no<br>  Standard SDRAM     : yes<br>  Rank1 Address bits : normal<br>  DIMM Reference card: B<br>  Manufacturer ID    : 9e02<br>  Part number        : CMSX16GX3M2B2133<br>Not a DDR3 SPD!<br>  Row    addr bits  : 16<br>  Column addr bits  : 10<br>  Number of ranks   : 2<br>  DIMM Capacity     : 8192 MB<br>  CAS latencies     : 6 7 8 9 10 11<br>  tCKmin            :   1.000 ns<br>  tAAmin            :  10.250 ns<br>  tWRmin            :  15.000 ns<br>  tRCDmin           :  10.250 ns<br>  tRRDmin           :   6.500 ns<br>  tRPmin            :  10.250 ns<br>  tRASmin           :  29.000 ns<br>  tRCmin            :  39.375 ns<br>  tRFCmin           : 260.750 ns<br>  tWTRmin           :   7.625 ns<br>  tRTPmin           :   8.375 ns<br>  tFAWmin           :  30.875 ns<br>channel[0] rankmap = 0x3<br>Not a DDR3 SPD!<br>Not a DDR3 SPD!<br>Starting RAM training (0).<br> PLL busy... PLL busy... PLL busy...done<br>MCU frequency is set at : 800 MHz<br>Selected DRAM frequency: 800 MHz<br>Minimum  CAS latency   : 9T<br>Selected CAS latency   : 9T<br>Selected CWL latency   : 7T<br>Selected tRCD          : 9T<br>Selected tRP           : 9T<br>Selected tRAS          : 24T<br>Selected tWR           : 12T<br>Selected tFAW          : 25T<br>Selected tRRD          : 6T<br>Selected tRTP          : 7T<br>Selected tWTR          : 7T<br>Selected tRFC          : 209T<br>XOVER CLK [c14] = 3000000<br>XOVER CMD [320c] = 24000<br>XOVER CLK [d14] = 0<br>XOVER CMD [330c] = 4000<br>DBP [4000] = 187999<br>RAP [4004] = cc197476<br>OTHP [400c] = a08b4<br>ODT stretch [400c] = 0<br>ODT stretch [400c] = a08b4<br>REFI [4298] = 6cd11860<br>SRFTP [42a4] = 41f88200<br>DBP [4400] = 187999<br>RAP [4404] = cc197476<br>OTHP [440c] = a08b4<br>ODT stretch [440c] = 0<br>ODT stretch [440c] = a08b4<br>REFI [4698] = 6cd11860<br>SRFTP [46a4] = 41f88200<br>Done dimm mapping<br><br>MCU frequency is set at : 800 MHz<br>XOVER CLK [c14] = 3000000<br>XOVER CMD [320c] = 24000<br>XOVER CLK [d14] = 0<br>XOVER CMD [330c] = 4000<br>DBP [4000] = 187999<br>RAP [4004] = cc197476<br>OTHP [400c] = a08b4<br>ODT stretch [400c] = 0<br>ODT stretch [400c] = a08b4<br>REFI [4298] = 6cd11860<br>SRFTP [42a4] = 41f88200<br>DBP [4400] = 187999<br>RAP [4404] = cc197476<br>OTHP [440c] = a08b4<br>ODT stretch [440c] = 0<br>ODT stretch [440c] = a08b4<br>REFI [4698] = 6cd11860<br>SRFTP [46a4] = 41f88200<br>Done dimm mapping<br><br><br>For 666:<br><br>Trying stored timings.<br>Starting RAM training (1). <br> PLL busy... PLL busy...done<br>MCU frequency is set at : 666 MHz<br>XOVER CLK [c14] = f000000                                                                             <br>XOVER CMD [320c] = 4024000<br>XOVER CLK [d14] = 0<br>XOVER CMD [330c] = 4000 <br>DBP [4000] = 146777<br>RAP [4004] = ca156465<br>OTHP [400c] = a0690<br>ODT stretch [400c] = 0<br>REFI [4298] = 5aae1450<br>SRFTP [42a4] = 41f97200<br>DBP [4400] = 146777<br>RAP [4404] = ca156465<br>OTHP [440c] = a0690<br>ODT stretch [440c] = 0<br>ODT stretch [440c] = a0690<br>REFI [4698] = 5aae1450<br>SRFTP [46a4] = 41f97200<br>Done dimm mapping<br><br><br>The timestamps are:<br>   0:1st timestamp                                     1,789<br>   1:start of rom stage                                59,405 (57,616)<br>   2:before ram initialization                         1,768,793 (1,709,388)<br>   3:after ram initialization                          1,818,226 (49,432)<br>   4:end of romstage                                   1,828,566 (10,340)<br>   8:starting to load ramstage                         1,833,895 (5,329)<br>  15:starting LZMA decompress (ignore for x86)         1,833,926 (30)<br>  16:finished LZMA decompress (ignore for x86)         1,848,244 (14,317)<br>   9:finished loading ramstage                         1,848,254 (9)<br>  10:start of ramstage                                 3,186,861 (1,338,607)<br>  30:device enumeration                                3,186,890 (29)<br>  40:device configuration                              3,195,250 (8,359)<br>  50:device enable                                     3,207,057 (11,806)<br>  60:device initialization                             3,207,563 (506)<br>  70:device setup done                                 3,378,965 (171,402)<br>  75:cbmem post                                        3,378,968 (3)<br>  80:write tables                                      3,378,972 (4)<br>  90:load payload                                      3,399,267 (20,294)<br>  15:starting LZMA decompress (ignore for x86)         3,399,430 (163)<br>  16:finished LZMA decompress (ignore for x86)         3,413,428 (13,998)<br>  99:selfboot jump                                     3,413,449 (21)<br><br><br>Full cbmem attached from various attempts (when I have more than 1 stick in place, the log is truncated)<br></div></div>