summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYinghai Lu <yinghailu@gmail.com>2005-01-13 03:36:38 +0000
committerYinghai Lu <yinghailu@gmail.com>2005-01-13 03:36:38 +0000
commit77cbb99a578bcd5e929e13cc07871d8a5dc15e4b (patch)
tree3b5b62ea820fb2862258d0f491a0a2c1b5b6263c /src
parent6c615429d39d7e14f7ea97a63cabcb616d5c2438 (diff)
downloadcoreboot-77cbb99a578bcd5e929e13cc07871d8a5dc15e4b.tar.xz
onboard pci_rom
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1860 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'src')
-rw-r--r--src/devices/pci_device.c6
-rw-r--r--src/devices/pci_rom.c11
-rw-r--r--src/drivers/pci/onboard/onboard.c7
-rw-r--r--src/include/device/device.h1
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;