[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