Hi, Stefan Stefan Roese wrote: > Felix, > > On Thursday 23 October 2008, Felix Radensky wrote: > >> I had the same problem with u-boot-1.3.4 on custom 460EX board with >> registered SODIMM. The SPD code in 4xx_spd_ddr2.c (program_copt1()) >> checks two SPD fields to decide whether DIMM is registered: DDRII DIMM >> type (offset 20) and SDRAM module attributes (offset 21). >> >> In my case, the values in these fields do not match what code is looking >> for. >> See http://www.micron.com/products/spddetail.aspx?part=MT9HTF6472RHY-667F1 >> I had to modify the following peice in program_copt1() to make it work: >> >> if (dimm_num == 0) { >> if (dimm_populated[dimm_num] == SDRAM_DDR1) /* DDR1 type */ >> mcopt1 |= SDRAM_MCOPT1_DDR1_TYPE; >> if (dimm_populated[dimm_num] == SDRAM_DDR2) /* DDR2 type */ >> mcopt1 |= SDRAM_MCOPT1_DDR2_TYPE; >> if (registered == 1) { /* DDR2 always buffered */ >> /* TODO: what about above comments ? */ >> mcopt1 |= SDRAM_MCOPT1_RDEN; >> buf0 = TRUE; >> } else { >> /* TODO: the mask 0x02 doesn't match Samsung def for >> byte 21. */ >> > > So it seems already to be know that here is a problem. > > >> if ((attribute & 0x02) == 0x00) { >> /* buffered not supported */ >> buf0 = FALSE; >> } else { >> mcopt1 |= SDRAM_MCOPT1_RDEN; >> buf0 = TRUE; >> } >> } >> } >> >> I've changed >> >> if ((attribute & 0x02) == 0x00) >> >> to be >> >> if (((attribute & 0x02) == 0x00) && (attribute != 0x04)) >> > > Why did you change it this way? Which DDR2 module are you using? And what's > the value of SPD register 21? > > My change causes the code to go into else branch and set SDRAM_MCOPT1_RDEN (registered) bit. I'm using Micron 512M registered SODIMM. The value of SPD register 21 is 0x4. The full SPD spec is here: http://www.micron.com/products/spddetail.aspx?part=MT9HTF6472RHY-667F1
Felix. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot