From 532fd2dc3d3dcf9bf1f2e2c8df539d07d0f214a0 Mon Sep 17 00:00:00 2001 From: Stefan Reinauer Date: Wed, 29 Oct 2008 03:15:42 +0000 Subject: Changes required to the device allocator: - leave a hole for mmapped PCIe config space if CONFIG_PCIE_CONFIGSPACE_HOLE is set. - Mask moving bits to 32bit when resources are not supposed above 4G. Linux does not like this, even though the resource is disabled. Signed-off-by: Stefan Reinauer Acked-by: Myles Watson git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3699 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- src/config/Options.lb | 6 ++++++ src/devices/device.c | 6 ++++++ src/devices/pci_device.c | 4 ++++ 3 files changed, 16 insertions(+) diff --git a/src/config/Options.lb b/src/config/Options.lb index 715a2b8ef9..8e9f89d49c 100644 --- a/src/config/Options.lb +++ b/src/config/Options.lb @@ -1115,6 +1115,12 @@ define CONFIG_GX1_VIDEOMODE # 4 for 1280x1024 end +define CONFIG_PCIE_CONFIGSPACE_HOLE + default 0 + export always + comment "Leave a hole for PCIe config space in the device allocator" +end + ############################################### # Board specific options ############################################### diff --git a/src/devices/device.c b/src/devices/device.c index e6fc99463d..804665968f 100644 --- a/src/devices/device.c +++ b/src/devices/device.c @@ -366,6 +366,12 @@ void compute_allocate_resource( (resource->flags & IORESOURCE_IO)? "io": (resource->flags & IORESOURCE_PREFETCH)? "prefmem": "mem"); } +#if CONFIG_PCIE_CONFIGSPACE_HOLE +#warning Handle PCIe hole differently... + if (base >= 0xf0000000 && base < 0xf4000000) { + base = 0xf4000000; + } +#endif } /* A pci bridge resource does not need to be a power * of two size, but it does have a minimum granularity. diff --git a/src/devices/pci_device.c b/src/devices/pci_device.c index 7fb86933be..fcf9730981 100644 --- a/src/devices/pci_device.c +++ b/src/devices/pci_device.c @@ -377,7 +377,11 @@ static void pci_record_bridge_resource( * clear it and forget it. */ if (resource->size == 0) { +#if CONFIG_PCI_64BIT_PREF_MEM == 1 resource->base = moving; +#else + resource->base = moving & 0xffffffff; +#endif resource->flags |= IORESOURCE_ASSIGNED; resource->flags &= ~IORESOURCE_STORED; pci_set_resource(dev, resource); -- cgit v1.2.3