diff options
author | Li-Ta Lo <ollie@lanl.gov> | 2005-01-13 05:44:16 +0000 |
---|---|---|
committer | Li-Ta Lo <ollie@lanl.gov> | 2005-01-13 05:44:16 +0000 |
commit | bc5399aa6eeef558edaab07d94340b3780661c61 (patch) | |
tree | 4c556a639d0c20500f2398c24e1a8e457db5b6f6 | |
parent | 75f5b559e69efa17de6bda7913321656e83e0314 (diff) | |
download | coreboot-bc5399aa6eeef558edaab07d94340b3780661c61.tar.xz |
better embedded ROM support, done blindly
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1863 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r-- | src/devices/pci_device.c | 16 | ||||
-rw-r--r-- | src/devices/pci_rom.c | 6 |
2 files changed, 12 insertions, 10 deletions
diff --git a/src/devices/pci_device.c b/src/devices/pci_device.c index 55049230b2..44c223a89e 100644 --- a/src/devices/pci_device.c +++ b/src/devices/pci_device.c @@ -221,6 +221,16 @@ static void pci_get_rom_resource(struct device *dev, unsigned long index) /* Initialize the resources to nothing */ resource = new_resource(dev, index); + /* for on board device with embedded ROM image, the ROM image is at + * fixed address specified in the Config.lb, the dev->rom_address is + * inited by driver_pci_onboard_ops::enable_dev() */ + if ((dev->on_mainboard) && (dev->rom_address == 0)) { + resource->base = dev->rom_address; + resource->flags |= IORESOURCE_MEM | IORESOURCE_READONLY | + IORESOURCE_ASSIGNED | IORESOURCE_FIXED; + return; + } + /* Get the initial value */ value = pci_read_config32(dev, index); @@ -273,10 +283,8 @@ 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) { - if ((!dev->on_mainboard) || (dev->rom_address == 0)) - pci_get_rom_resource(dev, rom); - } + if (rom) + pci_get_rom_resource(dev, rom); compact_resources(dev); } diff --git a/src/devices/pci_rom.c b/src/devices/pci_rom.c index 0ce9b9ec4d..614fbd55b9 100644 --- a/src/devices/pci_rom.c +++ b/src/devices/pci_rom.c @@ -10,12 +10,6 @@ struct rom_header * pci_rom_probe(struct device *dev) 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) { return NULL; |