Revert "pci stuff: too much hax now, trying rd890 patch (not merged yet)"
[coreboot.git] / src / devices / pci_device.c
index 01fd815f4d694a3b22ff10f1a9cf82af0a8cd2c1..f54e2620bf78c6e6564cf14523bb4a54d587881b 100644 (file)
 #if CONFIG_CARDBUS_PLUGIN_SUPPORT == 1
 #include <device/cardbus.h>
 #endif
-#define CONFIG_PC80_SYSTEM 1
 #if CONFIG_PC80_SYSTEM == 1
 #include <pc80/i8259.h>
 #endif
+#if CONFIG_HAVE_ACPI_RESUME && !CONFIG_S3_VGA_ROM_RUN
+#include <arch/acpi.h>
+#endif
+#if CONFIG_CHROMEOS
+#include <vendorcode/google/chromeos/chromeos.h>
+#endif
 
 u8 pci_moving_config8(struct device *dev, unsigned int reg)
 {
@@ -595,12 +600,11 @@ void pci_dev_enable_resources(struct device *dev)
        /* Set the subsystem vendor and device ID for mainboard devices. */
        ops = ops_pci(dev);
        if (dev->on_mainboard && ops && ops->set_subsystem) {
-               printk(BIOS_DEBUG, "%s subsystem <- %02x/%02x\n", dev_path(dev),
-                      CONFIG_MAINBOARD_PCI_SUBSYSTEM_VENDOR_ID,
-                      CONFIG_MAINBOARD_PCI_SUBSYSTEM_DEVICE_ID);
-               ops->set_subsystem(dev,
-                                  CONFIG_MAINBOARD_PCI_SUBSYSTEM_VENDOR_ID,
-                                  CONFIG_MAINBOARD_PCI_SUBSYSTEM_DEVICE_ID);
+               printk(BIOS_DEBUG, "%s subsystem <- %04x/%04x\n",
+                       dev_path(dev), dev->subsystem_vendor,
+                       dev->subsystem_device);
+               ops->set_subsystem(dev, dev->subsystem_vendor,
+                       dev->subsystem_device);
        }
        command = pci_read_config16(dev, PCI_COMMAND);
        command |= dev->command;
@@ -666,6 +670,15 @@ void pci_dev_init(struct device *dev)
            ((dev->class >> 8) == PCI_CLASS_DISPLAY_VGA))
                return;
 
+#if CONFIG_CHROMEOS
+       /* In ChromeOS we want to boot blazingly fast. Therefore
+        * we don't run (VGA) option ROMs, unless we have to print
+        * something on the screen before the kernel is loaded.
+        */
+       if (!developer_mode_enabled() && !recovery_mode_enabled())
+               return;
+#endif
+
        rom = pci_rom_probe(dev);
        if (rom == NULL)
                return;
@@ -674,12 +687,15 @@ void pci_dev_init(struct device *dev)
        if (ram == NULL)
                return;
 
+#if CONFIG_HAVE_ACPI_RESUME && !CONFIG_S3_VGA_ROM_RUN
+       /* If S3_VGA_ROM_RUN is disabled, skip running VGA option
+        * ROMs when coming out of an S3 resume.
+        */
+       if ((acpi_slp_type == 3) &&
+               ((dev->class >> 8) == PCI_CLASS_DISPLAY_VGA))
+               return;
+#endif
        run_bios(dev, (unsigned long)ram);
-
-#if CONFIG_CONSOLE_VGA == 1
-       if ((dev->class >> 8) == PCI_CLASS_DISPLAY_VGA)
-               vga_console_init();
-#endif /* CONFIG_CONSOLE_VGA */
 #endif /* CONFIG_PCI_ROM_RUN || CONFIG_VGA_ROM_RUN */
 }
 
@@ -1039,7 +1055,7 @@ unsigned int pci_scan_bus(struct bus *bus, unsigned min_devfn,
                       "devfn %x\n", min_devfn, max_devfn);
                printk(BIOS_ERR, "PCI: pci_scan_bus upper limit too big. "
                       "Using 0xff.\n");
-               max_devfn=0xff;
+               max_devfn=0x08;
        }
 
        old_devices = bus->children;
@@ -1055,10 +1071,14 @@ unsigned int pci_scan_bus(struct bus *bus, unsigned min_devfn,
                struct device *dev;
 
                /* First thing setup the device structure. */
+               printk(BIOS_INFO, "%s: before pci_scan_get_dev! devfn: %d\n", __func__, devfn);
                dev = pci_scan_get_dev(&old_devices, devfn);
+               printk(BIOS_INFO, "%s: after  pci_scan_get_dev!\n", __func__);
 
                /* See if a device is present and setup the device structure. */
+               printk(BIOS_INFO, "%s: before pci_probe_dev!\n", __func__);
                dev = pci_probe_dev(dev, bus, devfn);
+               printk(BIOS_INFO, "%s: after  pci_probe_dev!\n", __func__);
 
                /*
                 * If this is not a multi function device, or the device is
@@ -1267,9 +1287,11 @@ void pci_assign_irqs(unsigned bus, unsigned slot,
                printk(BIOS_DEBUG, "  Readback = %d\n", irq);
 #endif
 
+#if CONFIG_PC80_SYSTEM == 1
                /* Change to level triggered. */
                i8259_configure_irq_trigger(pIntAtoD[line - 1],
                                            IRQ_LEVEL_TRIGGERED);
+#endif
        }
 }
 #endif