better embedded ROM support, done blindly

git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1863 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Li-Ta Lo 2005-01-13 05:44:16 +00:00
parent 75f5b559e6
commit bc5399aa6e
2 changed files with 12 additions and 10 deletions

View File

@ -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);
}

View File

@ -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;