summaryrefslogtreecommitdiff
path: root/src/devices/pci_rom.c
diff options
context:
space:
mode:
authorRonald G. Minnich <rminnich@gmail.com>2009-04-06 20:38:34 +0000
committerRonald G. Minnich <rminnich@gmail.com>2009-04-06 20:38:34 +0000
commit308312ce6c1508eb1d79cd1287fedc26bd34f2b5 (patch)
tree3441772ef62094eb14b2d1faaa1ec8a1ebd8ee0a /src/devices/pci_rom.c
parent662d52d24426b8fb8d11d455f8b30ae67a669ade (diff)
downloadcoreboot-308312ce6c1508eb1d79cd1287fedc26bd34f2b5.tar.xz
Some changes for option roms:
- don't make users pick the name. Names for option roms are in the v3-defined format of pci%04x,%04x.rom with the vendor and device id filling in the %04x. - users pass in vendor and device id. - users pass in a dest. If the dest is 0, the address of the ROM image in FLASH is returned. If the address is non-zero, then the decmpressor is called, and it will make sure the ROM image is copied to the destination (even in the uncompressed case). move qemu over to always using ROMFS Signed-off-by: Ronald G. Minnich <rminnich@gmail.com> Acked-by: Patrick Georgi <patrick.georgi@coresystems.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4078 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'src/devices/pci_rom.c')
-rw-r--r--src/devices/pci_rom.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/devices/pci_rom.c b/src/devices/pci_rom.c
index 702f010eb5..9eaea84115 100644
--- a/src/devices/pci_rom.c
+++ b/src/devices/pci_rom.c
@@ -31,32 +31,40 @@
struct rom_header * pci_rom_probe(struct device *dev)
{
- unsigned long rom_address;
+ unsigned long rom_address = 0;
struct rom_header *rom_header;
struct pci_data *rom_data;
if (CONFIG_ROMFS) {
- rom_address = (unsigned long) romfs_load_optionrom(dev->vendor, dev->device, NULL);
+ void *v;
/* if it's in FLASH, then it's as if dev->on_mainboard was true */
- dev->on_mainboard = 1;
- /* and we might as well set the address correctly */
- dev->rom_address = rom_address;
- } else if (dev->on_mainboard) {
+ v = romfs_load_optionrom(dev->vendor, dev->device, NULL);
+ printk_debug("In cbfs, rom address for %s = %lx\n",
+ dev_path(dev), rom_address);
+ if (v) {
+ dev->rom_address = v;
+ dev->on_mainboard = 1;
+ }
+ }
+
+ if (dev->on_mainboard) {
/* this is here as a legacy path. We hope it goes away soon. Users should not have to
* compute the ROM address at build time!
*/
// in case some device PCI_ROM_ADDRESS can not be set or readonly
rom_address = dev->rom_address;
+ printk_debug("On mainboard, rom address for %s = %lx\n",
+ dev_path(dev), rom_address);
} else {
rom_address = pci_read_config32(dev, PCI_ROM_ADDRESS);
+ printk_debug("On card, rom address for %s = %lx\n",
+ dev_path(dev), rom_address);
}
if (rom_address == 0x00000000 || rom_address == 0xffffffff) {
return NULL;
}
- printk_debug("rom address for %s = %lx\n", dev_path(dev), rom_address);
-
if(!dev->on_mainboard) {
/* enable expansion ROM address decoding */
pci_write_config32(dev, PCI_ROM_ADDRESS,