diff --git a/src/devices/hypertransport.c b/src/devices/hypertransport.c index 326f343662..ba57bc830e 100644 --- a/src/devices/hypertransport.c +++ b/src/devices/hypertransport.c @@ -14,6 +14,7 @@ static device_t ht_scan_get_devs(device_t *old_devices) first = *old_devices; last = first; while(last && last->sibling && + (last->sibling->path.type == DEVICE_PATH_PCI) && (last->sibling->path.u.pci.devfn > last->path.u.pci.devfn)) { last = last->sibling; } diff --git a/src/devices/pci_device.c b/src/devices/pci_device.c index 031d855fbf..ffa420739a 100644 --- a/src/devices/pci_device.c +++ b/src/devices/pci_device.c @@ -475,6 +475,10 @@ static struct device *pci_scan_get_dev(struct device **list, unsigned int devfn) { struct device *dev = 0; for(; *list; list = &(*list)->sibling) { + if ((*list)->path.type != DEVICE_PATH_PCI) { + printk_err("child %s not a pci device\n", dev_path(*list)); + continue; + } if ((*list)->path.u.pci.devfn == devfn) { /* Unlink from the list */ dev = *list; diff --git a/src/mainboard/amd/solo/Config.lb b/src/mainboard/amd/solo/Config.lb index 8a43951eb6..70082ed124 100644 --- a/src/mainboard/amd/solo/Config.lb +++ b/src/mainboard/amd/solo/Config.lb @@ -228,6 +228,10 @@ northbridge amd/amdk8 "mc0" pci 0:18.1 pci 0:18.2 pci 0:18.3 + southbridge amd/amd8151 "amd8151" link 0 + pci 0:0.0 + pci 0:1.0 + end southbridge amd/amd8111 "amd8111" link 0 pci 0:0.0 pci 0:1.0 on @@ -256,10 +260,6 @@ northbridge amd/amdk8 "mc0" register "lpt" = "{1}" end end - southbridge amd/amd8151 "amd8151" link 1 - pci 0:0.0 - pci 0:1.0 - end end cpu k8 "cpu0" diff --git a/src/northbridge/amd/amdk8/northbridge.c b/src/northbridge/amd/amdk8/northbridge.c index 13845c5a70..aed38557d4 100644 --- a/src/northbridge/amd/amdk8/northbridge.c +++ b/src/northbridge/amd/amdk8/northbridge.c @@ -166,7 +166,7 @@ static unsigned int amdk8_scan_chains(device_t dev, unsigned int max) for(link = 0; link < dev->links; link++) { uint32_t link_type; uint32_t busses, config_busses; - unsigned free_reg, config_reg; + unsigned free_reg, config_reg, other_reg; dev->link[link].cap = 0x80 + (link *0x20); do { link_type = pci_read_config32(dev, dev->link[link].cap + 0x18); @@ -455,7 +455,13 @@ static void amdk8_set_resources(device_t dev) unsigned int amdk8_scan_root_bus(device_t root, unsigned int max) { - return pci_scan_bus(&root->link[0], PCI_DEVFN(0x18, 0), 0xff, max); + unsigned reg; + max = pci_scan_bus(&root->link[0], PCI_DEVFN(0x18, 0), 0xff, max); + /* Unmap all of the other pci busses */ + for(reg = 0xe0; reg <= 0xec; reg += 4) { + f1_write_config32(reg, 0); + } + return max; } static struct device_operations northbridge_operations = { diff --git a/targets/arima/hdama/Config.kernelimage.lb b/targets/arima/hdama/Config.kernelimage.lb index 8022ba6233..a9347233db 100644 --- a/targets/arima/hdama/Config.kernelimage.lb +++ b/targets/arima/hdama/Config.kernelimage.lb @@ -100,4 +100,4 @@ romimage "fallback" # payload /usr/share/etherboot/5.1.9pre2-lnxi-lb/tg3--ide_disk.zelf end -buildrom ROM_SIZE "fallback" +buildrom ./luxbios.rom ROM_SIZE "fallback"