diff options
-rw-r--r-- | src/devices/pci_device.c | 6 | ||||
-rw-r--r-- | src/devices/pci_rom.c | 11 | ||||
-rw-r--r-- | src/drivers/pci/onboard/onboard.c | 7 | ||||
-rw-r--r-- | src/include/device/device.h | 1 |
4 files changed, 21 insertions, 4 deletions
diff --git a/src/devices/pci_device.c b/src/devices/pci_device.c index 5b038e4a8d..55049230b2 100644 --- a/src/devices/pci_device.c +++ b/src/devices/pci_device.c @@ -273,8 +273,10 @@ static void pci_read_bases(struct device *dev, unsigned int howmany, unsigned lo resource = pci_get_resource(dev, index); index += (resource->flags & IORESOURCE_PCI64)?8:4; } - if (rom) - pci_get_rom_resource(dev, rom); + if (rom) { + if ((!dev->on_mainboard) || (dev->rom_address == 0)) + pci_get_rom_resource(dev, rom); + } compact_resources(dev); } diff --git a/src/devices/pci_rom.c b/src/devices/pci_rom.c index cbeaf85743..a2e3166802 100644 --- a/src/devices/pci_rom.c +++ b/src/devices/pci_rom.c @@ -4,16 +4,23 @@ #include <device/pci_ids.h> #include <device/pci_ops.h> +#include "../drivers/pci/onboard/chip.h" + struct rom_header * pci_rom_probe(struct device *dev) { unsigned long rom_address; struct rom_header *rom_header; struct pci_data *rom_data; + if (dev->on_mainboard && (dev->rom_address != 0) ) { + rom_address = dev->rom_address; + } + else { + rom_address = pci_read_config32(dev, PCI_ROM_ADDRESS); + } + rom_address = pci_read_config32(dev, PCI_ROM_ADDRESS); if (rom_address == 0x00000000 || rom_address == 0xffffffff) { - /* FixME: search in the LinuxBIOS Image for integrated - * devices? */ return NULL; } diff --git a/src/drivers/pci/onboard/onboard.c b/src/drivers/pci/onboard/onboard.c index c5059323fa..09ee9bdb91 100644 --- a/src/drivers/pci/onboard/onboard.c +++ b/src/drivers/pci/onboard/onboard.c @@ -11,9 +11,16 @@ #include <device/pci_ops.h> #include "chip.h" +static void onboard_enable(device_t dev) +{ + struct drivers_pci_onboard_config *conf; + conf = dev->chip_info; + dev->rom_address = conf->rom_address; +} struct chip_operations drivers_pci_onboard_ops = { #if CONFIG_CHIP_NAME == 1 CHIP_NAME("Onboard PCI") #endif + .enable_dev = onboard_enable, }; diff --git a/src/include/device/device.h b/src/include/device/device.h index 8df71b2beb..75e1189e03 100644 --- a/src/include/device/device.h +++ b/src/include/device/device.h @@ -72,6 +72,7 @@ struct device { unsigned int initialized : 1; /* set if we have initialized the device */ unsigned int have_resources : 1; /* Set if we have read the devices resources */ unsigned int on_mainboard : 1; + unsigned long rom_address; uint8_t command; |