Hint: Try testing the lower memory:
ram_check(0x10000000, 0x2000000); is going for 256-512 Megs.
Ah, there's the (or a) problem. There's a zero missing. No memory was tested at all.
The LinuxBIOS image is copied to _RAMBASE which normally defaults to 0x4000 (@16k). So you might have 2 dimms a 256M and while the upper one works, the lower one doesnt.
Yeah.
In the end the ram_check() function does not reliably test your memory. It will not detect whether your memory works, but it will detect whether it fails ;-)
And not always, either.
Also note: the order in which your registers are set may play a role. For example there might be a register with a DRAM_ENABLE bit which must be set last, after all other DRAM related bits are set, or the values set later on might be ignored.
Yes. And you often have to wait for certain bits to flip before you write other bits, etc.
Segher