Hello Wolfgang, Thanks for the review. I'm busys cleaning up the code, but at one point I need some help:
> > > +/******************************************************************** > > +***** > > + * initdram -- doesn't use serial presence detect. > > + * > > + * Assumes: 256 MB, ECC, non-registered > > Do not hard-code sizes. Use aut-sizing, please. > > > +void sdram_tr1_set(int ram_address, int* tr1_value) { > > + int i; > > + int j, k; > > + volatile unsigned int* ram_pointer = (unsigned > int*)ram_address; > > + int first_good = -1, last_bad = 0x1ff; > > + > > + unsigned long test[NUM_TRIES] = { > > + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, > > + 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, > > + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, > > + 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, > > + 0xAAAAAAAA, 0xAAAAAAAA, 0x55555555, 0x55555555, > > + 0xAAAAAAAA, 0xAAAAAAAA, 0x55555555, 0x55555555, > > + 0x55555555, 0x55555555, 0xAAAAAAAA, 0xAAAAAAAA, > > + 0x55555555, 0x55555555, 0xAAAAAAAA, 0xAAAAAAAA, > > + 0xA5A5A5A5, 0xA5A5A5A5, 0x5A5A5A5A, 0x5A5A5A5A, > > + 0xA5A5A5A5, 0xA5A5A5A5, 0x5A5A5A5A, 0x5A5A5A5A, > > + 0x5A5A5A5A, 0x5A5A5A5A, 0xA5A5A5A5, 0xA5A5A5A5, > > + 0x5A5A5A5A, 0x5A5A5A5A, 0xA5A5A5A5, 0xA5A5A5A5, > > + 0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA, > > + 0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA, > > + 0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55, > > + 0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55 }; > > + > > + /* go through all possible SDRAM0_TR1[RDCT] values */ > > + for (i=0; i<=0x1ff; i++) { > > + /* set the current value for TR1 */ > > + mtsdram(mem_tr1, (0x80800800 | i)); > > + > > + /* write values */ > > + for (j=0; j<NUM_TRIES; j++) { > > + ram_pointer[j] = test[j]; > > + > > + /* clear any cache at ram location */ > > + __asm__("dcbf 0,%0": :"r" (&ram_pointer[j])); > > + } > > + > > + /* read values back */ > > + for (j=0; j<NUM_TRIES; j++) { > > + for (k=0; k<NUM_READS; k++) { > > + /* clear any cache at ram location */ > > + __asm__("dcbf 0,%0": :"r" > (&ram_pointer[j])); > > + > > + if (ram_pointer[j] != test[j]) > > + break; > > + } > > + > > + /* read error */ > > + if (k != NUM_READS) { > > + break; > > + } > > + } > > Please do not implement yet another RAM test in U-Boot. We > already have enough of them. If you really want to test your > RAM, that is. For auto-sizing, you should use memsize() instead. You are right, there is no RAM test necessary here. I want to use auto-sizing with memsize(), but I did not find any refererences to that in u-boot sources. Probaly I am missing something obvious. Can you show me an example, where auto-sizing is used? Cheers Dirk _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot