From 51f5542514ed1e88ebdec7d8c19a2ab9d1a6d2cc Mon Sep 17 00:00:00 2001 From: Khalid Aziz Date: Tue, 3 May 2016 08:03:37 -0600 Subject: [PATCH] Revert "PCI: Restore pref MMIO allocation logic for host bridge without mmio64" This reverts commit 88f97208c7a78187924924f741f864d6a3ccc62e. This commit causes hotplug to break as documented in Orabug 22855133. Orabug: 22855133 Signed-off-by: Khalid Aziz (cherry picked from commit 5b6a6cf1e2785b6bf9153c726e09435c05921040) Signed-off-by: Allen Pais --- drivers/pci/bus.c | 4 +--- drivers/pci/setup-bus.c | 13 ++++--------- drivers/pci/setup-res.c | 9 +++------ 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c index 7f7bf04ef6f7..89b3befc7155 100644 --- a/drivers/pci/bus.c +++ b/drivers/pci/bus.c @@ -204,10 +204,8 @@ int pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, { #ifdef CONFIG_PCI_BUS_ADDR_T_64BIT int rc; - unsigned long mmio64 = pci_find_host_bridge(bus)->has_mem64 ? - IORESOURCE_MEM_64 : 0; - if (res->flags & mmio64) { + if (res->flags & IORESOURCE_MEM_64) { rc = pci_bus_alloc_from_region(bus, res, size, align, min, type_mask, alignf, alignf_data, &pci_high); diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c index 0d64677e8b2f..95d18ef267e1 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c @@ -1311,8 +1311,7 @@ void __pci_bus_size_bridges(struct pci_bus *bus, struct list_head *realloc_head) b_res = &bus->self->resource[PCI_BRIDGE_RESOURCES]; mask = IORESOURCE_MEM; prefmask = IORESOURCE_MEM | IORESOURCE_PREFETCH; - if ((b_res[2].flags & IORESOURCE_MEM_64) && - pci_find_host_bridge(bus)->has_mem64) { + if (b_res[2].flags & IORESOURCE_MEM_64) { prefmask |= IORESOURCE_MEM_64; ret = pbus_size_mem(bus, prefmask, prefmask, prefmask, prefmask, @@ -1471,21 +1470,17 @@ static void pci_bridge_release_resources(struct pci_bus *bus, * io port. * 2. if there is non pref mmio assign fail, release bridge * nonpref mmio. - * 3. if there is pref mmio assign fail, and host bridge does - * have 64bit mmio, release bridge pref mmio. - * 4. if there is 64bit pref mmio assign fail, and bridge pref + * 3. if there is 64bit pref mmio assign fail, and bridge pref * is 64bit, release bridge pref mmio. - * 5. if there is pref mmio assign fail, and bridge pref is + * 4. if there is pref mmio assign fail, and bridge pref is * 32bit mmio, release bridge pref mmio - * 6. if there is pref mmio assign fail, and bridge pref is not + * 5. if there is pref mmio assign fail, and bridge pref is not * assigned, release bridge nonpref mmio. */ if (type & IORESOURCE_IO) idx = 0; else if (!(type & IORESOURCE_PREFETCH)) idx = 1; - else if (!pci_find_host_bridge(bus)->has_mem64) - idx = 2; else if ((type & IORESOURCE_MEM_64) && (b_res[2].flags & IORESOURCE_MEM_64)) idx = 2; diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c index 26aeddea0524..b19aa5bec47e 100644 --- a/drivers/pci/setup-res.c +++ b/drivers/pci/setup-res.c @@ -205,8 +205,6 @@ static int __pci_assign_resource(struct pci_bus *bus, struct pci_dev *dev, struct resource *res = dev->resource + resno; resource_size_t min; int ret; - unsigned long mmio64 = pci_find_host_bridge(bus)->has_mem64 ? - IORESOURCE_MEM_64 : 0; min = (res->flags & IORESOURCE_IO) ? PCIBIOS_MIN_IO : PCIBIOS_MIN_MEM; @@ -218,7 +216,7 @@ static int __pci_assign_resource(struct pci_bus *bus, struct pci_dev *dev, * things differently than they were sized, not everything will fit. */ ret = pci_bus_alloc_resource(bus, res, size, align, min, - IORESOURCE_PREFETCH | mmio64, + IORESOURCE_PREFETCH | IORESOURCE_MEM_64, pcibios_align_resource, dev); if (ret == 0) return 0; @@ -227,8 +225,7 @@ static int __pci_assign_resource(struct pci_bus *bus, struct pci_dev *dev, * If the prefetchable window is only 32 bits wide, we can put * 64-bit prefetchable resources in it. */ - if (mmio64 && - (res->flags & (IORESOURCE_PREFETCH | IORESOURCE_MEM_64)) == + if ((res->flags & (IORESOURCE_PREFETCH | IORESOURCE_MEM_64)) == (IORESOURCE_PREFETCH | IORESOURCE_MEM_64)) { ret = pci_bus_alloc_resource(bus, res, size, align, min, IORESOURCE_PREFETCH, @@ -243,7 +240,7 @@ static int __pci_assign_resource(struct pci_bus *bus, struct pci_dev *dev, * non-prefetchable, the first call already tried the only possibility * so we don't need to try again. */ - if (res->flags & (IORESOURCE_PREFETCH | mmio64)) + if (res->flags & (IORESOURCE_PREFETCH | IORESOURCE_MEM_64)) ret = pci_bus_alloc_resource(bus, res, size, align, min, 0, pcibios_align_resource, dev); -- 2.50.1