AMD serenade hangs when initialize ram.
in the function "route_dram_accesses", when write to limit register, system
just hang. If anyone has this problem before? Please help. Thanks!
static void route_dram_accesses(const struct mem_controller *ctrl,
unsigned long base_k, unsigned long limit_k)
{
/* Route the addresses to the controller node */
unsigned node_id;
unsigned limit;
unsigned base;
unsigned index;
unsigned limit_reg, base_reg;
device_t device;
node_id = ctrl->node_id;
index = (node_id << 3);
limit = (limit_k << 2);
limit &= 0xffff0000;
limit -= 0x00010000;
limit |= ( 0 << 8) | (node_id << 0);
base = (base_k << 2);
base &= 0xffff0000;
base |= (0 << 8) | (1<<1) | (1<<0);
limit_reg = 0x44 + index;
base_reg = 0x40 + index;
for(device = PCI_DEV(0, 0x18, 1); device <= PCI_DEV(0, 0x1f, 1);
device += PCI_DEV(0, 1, 0)) {
/* hangs here */
pci_write_config32(device, limit_reg, limit);
pci_write_config32(device, base_reg, base);
}
}
Jianwei