On Thu, 25 Sep 2003, Ian Smith wrote:
Blows a hole in my theory about the 128MB being detected....
sorry, but those registers you are mentioning have *zero* impact on size detection. That's not what's going on here. Size detect is via SPD.
We wrote a lot of that code here 3 years ago, and it was a hack then in an attempt to get the 8601 to work at all.
If you look at how it works now:
// Initial setting, 256MB in each bank, will be rewritten later. CS_WRITE($0x5A, $0x20) CS_WRITE($0x5B, $0x40) CS_WRITE($0x5C, $0x60) CS_WRITE($0x5D, $0x80) CS_WRITE($0x5E, $0xA0) CS_WRITE($0x5F, $0xC0)
So the ram size is set to 256MB per bank. Then we proceed to initialize all the DRAM as though it were there. It is sufficient for SDRAM to do this. It is probably not sufficient for DDR to do this.
Then, later, in C, we size it up via SPD (I think SONE did this work?) and set the right values in.
Anyone who is setting values in just by jamming things in registers is going at it the wrong way and is doomed to fail. There are complex problems with the 8601, such as buffer strength issues, that require more sophistication.
The right thing to do here is cut to freebios2 ASAP and write all this in C. It's just too hard in assembly.
ron