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:<br><br>

     testx = 5a5a5a5a<br>     Copying data from cache to RAM -- switching to use RAM as stack... <br><br>Somehow the memory accesses aren't reaching my device.  I added some debugging, and this line before the debugging:<br>

<br>

set_var_mtrr(0, 0x08000000, 0x10000000, MTRR_TYPE_WRBACK);<br><br>Here's the output:<br><br>xd1000_ram_init: ram_dev=4000000 id=554e1172<br>
xd1000_BARs<br>
xd1000_ram_init: testing "RAM" val = ffffffff<br>
After loop p=10180020 *p=ffffffff val(@0x08180020)=8189920<br>
 *p(08180020) = 8189920<br>
 *p(08980020) = ffffffff<br>
 *p(09180020) = ffffffff<br>
 *p(09980020) = ffffffff<br>
 *p(0a180020) = ffffffff<br>
 *p(0a980020) = ffffffff<br>
 *p(0b180020) = ffffffff<br>
 *p(0b980020) = ffffffff<br>
 *p(0c180020) = ffffffff<br>
 *p(0c980020) = ffffffff<br>
 *p(0d180020) = ffffffff<br>
 *p(0d980020) = ffffffff<br>
 *p(0e180020) = ffffffff<br>
 *p(0e980020) = ffffffff<br>
 *p(0f180020) = ffffffff<br>
 *p(0f980020) = ffffffff<br>
v_esp=000cffe8<br>
<br>It looks like one value sticks but not the rest.  Here's the debugging code:<br><br>    printk_debug("%s: testing \"RAM\"", __func__);<br><br>// Try to force the values out of the cache.<br>    *((volatile u32 *)0x08180000) = 0x5a5a5a50;<br>
    *((volatile u32 *)0x08180008) = 0x5a5a5a51;<br>    *((volatile u32 *)0x08180010) = 0x5a5a5a52;<br>    *((volatile u32 *)0x08180018) = 0x5a5a5a53;<br>    *((volatile u32 *)0x08180020) = 0x5a5a5a54;<br>    *((volatile u32 *)0x08180028) = 0x5a5a5a55;<br>
    *((volatile u32 *)0x08180030) = 0x5a5a5a56;<br>    *((volatile u32 *)0x08180038) = 0x5a5a5a57;<br>    *((volatile u32 *)0x08180040) = 0x5a5a5a58;<br>    *((volatile u32 *)0x09180020) = 0x5a5a5a59;<br>    *((volatile u32 *)0x0A180020) = 0x5a5a5a5a;<br>
    *((volatile u32 *)0x0B180020) = 0x5a5a5a5b;<br>    *((volatile u32 *)0x0C180020) = 0x5a5a5a5c;<br>    *((volatile u32 *)0x0D180020) = 0x5a5a5a5d;<br>    *((volatile u32 *)0x0E180020) = 0x5a5a5a5e;<br>    *((volatile u32 *)0x0F180020) = 0x5a5a5a5f;<br>
// Check value.<br><br>    val = *((volatile u32 *) 0x08180020);<br>    printk_debug(" val = %x\n", val);<br><br>// Write to various locations.<br>    for (p = (volatile u32 *) 0x08180020;<br>         p < ((volatile u32 *) 0x10000000); p+=0x200000)<br>
        *p = (u32) p + 0x00009900;<br>    val = *((volatile u32 *) 0x08180020);<br>    printk_debug("After loop p=%p *p=%x val(@0x08180020)=%x\n", p, *p, val);<br><br>//Read them back<br>    for (p = (volatile u32 *) 0x08180020;<br>
         p < ((volatile u32 *) 0x10000000); p+=0x200000) {<br>        val = *p;<br>        printk_debug(" *p(%p) = %lx\n", p, val);<br>    }<br><br><br>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.<br>

<br>Any suggestions?<br><br>Thanks,<br>Myles<br>