Actually, lets get some more debugging info, in case that doesn't work. One quick question though:
60: 08 10 12 12 12 12 00 00 00 00 00 00 00 00 00 00
Are 0x64 and 0x65 also DRBs? Or they just happen to also be 0x12? Either way, this should work, but it will only work for up to 2 sticks. I've gotten rid of the dual sided junk, I'm about 98% sure it's not necessary, so it now just reads the start of the dimm (instead of row) and reads from that. Please try a memtest payload, if this boots, just to make sure it's working right.
read32(0 + addr_offset); /* See if there are 2 sticks */ reg8 = pci_read_config8(ctrl->d0, DRB + 1); reg8_2 = pci_read_config8(ctrl->d0, DRB + 2); if(reg8 != reg8_2) { PRINT_DEBUG("Sending command to DIMM1 at 0x"); PRINT_DEBUG_HEX32((reg8 * 32 * 1024 * 1024) + addr_offset); PRINT_DEBUG("/r/n); read32((reg8 * 32 * 1024 * 1024) + addr_offset); }
-Corey
On Tue, May 27, 2008 at 11:40 PM, Corey Osgood corey.osgood@gmail.com wrote:
On Tue, May 27, 2008 at 10:27 PM, Joseph Smith joe@settoplinux.org wrote:
Hello, Now that I got coreboot running on the IP1000, I finally am able to test out the so-dimm socket. I maxed out the slot with a big 512MB so-dimm. I don't think the "for" statement we came up with is working correctly:
/* NOTE: Dual-sided ready. */ read32(0 + addr_offset); for (i = 0; i < 4; i++) { reg8 = pci_read_config8(ctrl->d0, DRB + i); if (reg8 != reg8_2) read32(reg8 * 32 * 1024 * 1024); reg8_2 = reg8; }
The memory is detecting correctly, but I don't think coreboot can find the end of the side of the so-dimm, thus causing a lockup after Jumping to coreboot. I think I need to setup something more like the E7501 do_ram_command() but I want to keep it simple. Here is the bootlog, Help??
You're right, change
read32(reg8 * 32 * 1024 * 1024);
to
read32((reg8 * 32 * 1024 * 1024) + addr_offset);
also, make sure reg8_2 is 0'd before entering the for loop.
-Corey