[U-Boot] Hangs at relocation on 460EX Target
Felix Radensky
felix at embedded-sol.com
Thu Oct 23 09:31:32 CEST 2008
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.
More information about the U-Boot
mailing list