[coreboot] Raminit help
Myles Watson
mylesgw at gmail.com
Tue Jun 9 18:48:01 CEST 2009
I've yanked all of the sdram initialization from my s2895 so that I can use
my HT device as RAM. I've set up the BARs in the device and in the Opteron
so that I should have access to 0-2GB. It hangs here:
testx = 5a5a5a5a
Copying data from cache to RAM -- switching to use RAM as stack...
Somehow the memory accesses aren't reaching my device. I added some
debugging, and this line before the debugging:
set_var_mtrr(0, 0x08000000, 0x10000000, MTRR_TYPE_WRBACK);
Here's the output:
xd1000_ram_init: ram_dev=4000000 id=554e1172
xd1000_BARs
xd1000_ram_init: testing "RAM" val = ffffffff
After loop p=10180020 *p=ffffffff val(@0x08180020)=8189920
*p(08180020) = 8189920
*p(08980020) = ffffffff
*p(09180020) = ffffffff
*p(09980020) = ffffffff
*p(0a180020) = ffffffff
*p(0a980020) = ffffffff
*p(0b180020) = ffffffff
*p(0b980020) = ffffffff
*p(0c180020) = ffffffff
*p(0c980020) = ffffffff
*p(0d180020) = ffffffff
*p(0d980020) = ffffffff
*p(0e180020) = ffffffff
*p(0e980020) = ffffffff
*p(0f180020) = ffffffff
*p(0f980020) = ffffffff
v_esp=000cffe8
It looks like one value sticks but not the rest. Here's the debugging code:
printk_debug("%s: testing \"RAM\"", __func__);
// Try to force the values out of the cache.
*((volatile u32 *)0x08180000) = 0x5a5a5a50;
*((volatile u32 *)0x08180008) = 0x5a5a5a51;
*((volatile u32 *)0x08180010) = 0x5a5a5a52;
*((volatile u32 *)0x08180018) = 0x5a5a5a53;
*((volatile u32 *)0x08180020) = 0x5a5a5a54;
*((volatile u32 *)0x08180028) = 0x5a5a5a55;
*((volatile u32 *)0x08180030) = 0x5a5a5a56;
*((volatile u32 *)0x08180038) = 0x5a5a5a57;
*((volatile u32 *)0x08180040) = 0x5a5a5a58;
*((volatile u32 *)0x09180020) = 0x5a5a5a59;
*((volatile u32 *)0x0A180020) = 0x5a5a5a5a;
*((volatile u32 *)0x0B180020) = 0x5a5a5a5b;
*((volatile u32 *)0x0C180020) = 0x5a5a5a5c;
*((volatile u32 *)0x0D180020) = 0x5a5a5a5d;
*((volatile u32 *)0x0E180020) = 0x5a5a5a5e;
*((volatile u32 *)0x0F180020) = 0x5a5a5a5f;
// Check value.
val = *((volatile u32 *) 0x08180020);
printk_debug(" val = %x\n", val);
// Write to various locations.
for (p = (volatile u32 *) 0x08180020;
p < ((volatile u32 *) 0x10000000); p+=0x200000)
*p = (u32) p + 0x00009900;
val = *((volatile u32 *) 0x08180020);
printk_debug("After loop p=%p *p=%x val(@0x08180020)=%x\n", p, *p, val);
//Read them back
for (p = (volatile u32 *) 0x08180020;
p < ((volatile u32 *) 0x10000000); p+=0x200000) {
val = *p;
printk_debug(" *p(%p) = %lx\n", p, val);
}
So I'm going through all the code I disabled trying to figure out what else
the Opteron needs to send memory references onto the bus.
Any suggestions?
Thanks,
Myles
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20090609/5b6cb9f4/attachment.html>
More information about the coreboot
mailing list