[PATCH v4 31/52] PCI: Unify skip_ioresource_align()
From: Yinghai Lu <yinghai@kernel.org>
Date: 2015-08-21 06:23:18
Also in:
linux-pci, linuxppc-dev, lkml
Subsystem:
generic include/asm header files, linux for powerpc (32-bit and 64-bit), microblaze architecture, pci subsystem, the rest, x86 architecture (32-bit and 64-bit) · Maintainers:
Arnd Bergmann, Madhavan Srinivasan, Michael Ellerman, Michal Simek, Bjorn Helgaas, Linus Torvalds, Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen
There are powerpc generic version and x86 local version for skip_ioresource_align(). Move the powerpc version to setup-bus.c, and kill x86 local version. Also kill dummy version in microblaze. Cc: Michal Simek <monstr@monstr.eu> Cc: Paul Mackerras <redacted> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Arnd Bergmann <arnd@arndb.de> Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-arch@vger.kernel.org Signed-off-by: Yinghai Lu <yinghai@kernel.org> --- arch/microblaze/pci/pci-common.c | 8 -------- arch/powerpc/kernel/pci-common.c | 11 +---------- arch/x86/include/asm/pci_x86.h | 1 - arch/x86/pci/common.c | 4 ++-- arch/x86/pci/i386.c | 12 ++---------- drivers/pci/setup-bus.c | 9 +++++++++ include/asm-generic/pci-bridge.h | 2 ++ 7 files changed, 16 insertions(+), 31 deletions(-)
diff --git a/arch/microblaze/pci/pci-common.c b/arch/microblaze/pci/pci-common.c
index ae838ed..09b1af6 100644
--- a/arch/microblaze/pci/pci-common.c
+++ b/arch/microblaze/pci/pci-common.c@@ -878,11 +878,6 @@ void pcibios_fixup_bus(struct pci_bus *bus) } EXPORT_SYMBOL(pcibios_fixup_bus); -static int skip_isa_ioresource_align(struct pci_dev *dev) -{ - return 0; -} - /* * We need to avoid collisions with `mirrored' VGA ports * and other strange ISA hardware, so we always want the
@@ -899,12 +894,9 @@ static int skip_isa_ioresource_align(struct pci_dev *dev) resource_size_t pcibios_align_resource(void *data, const struct resource *res, resource_size_t size, resource_size_t align) { - struct pci_dev *dev = data; resource_size_t start = res->start; if (res->flags & IORESOURCE_IO) { - if (skip_isa_ioresource_align(dev)) - return start; if (start & 0x300) start = (start + 0x3ff) & ~0x3ff; }
diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
index b9de34d..2d8d654 100644
--- a/arch/powerpc/kernel/pci-common.c
+++ b/arch/powerpc/kernel/pci-common.c@@ -1064,15 +1064,6 @@ void pci_fixup_cardbus(struct pci_bus *bus) pcibios_setup_bus_devices(bus); } - -static int skip_isa_ioresource_align(struct pci_dev *dev) -{ - if (pci_has_flag(PCI_CAN_SKIP_ISA_ALIGN) && - !(dev->bus->bridge_ctl & PCI_BRIDGE_CTL_ISA)) - return 1; - return 0; -} - /* * We need to avoid collisions with `mirrored' VGA ports * and other strange ISA hardware, so we always want the
@@ -1093,7 +1084,7 @@ resource_size_t pcibios_align_resource(void *data, const struct resource *res, resource_size_t start = res->start; if (res->flags & IORESOURCE_IO) { - if (skip_isa_ioresource_align(dev)) + if (skip_isa_ioresource_align(dev->bus)) return start; if (start & 0x300) start = (start + 0x3ff) & ~0x3ff;
diff --git a/arch/x86/include/asm/pci_x86.h b/arch/x86/include/asm/pci_x86.h
index 164e3f8..ddac225 100644
--- a/arch/x86/include/asm/pci_x86.h
+++ b/arch/x86/include/asm/pci_x86.h@@ -28,7 +28,6 @@ do { \ #define PCI_ASSIGN_ROMS 0x1000 #define PCI_BIOS_IRQ_SCAN 0x2000 #define PCI_ASSIGN_ALL_BUSSES 0x4000 -#define PCI_CAN_SKIP_ISA_ALIGN 0x8000 #define PCI_USE__CRS 0x10000 #define PCI_CHECK_ENABLE_AMD_MMCONF 0x20000 #define PCI_HAS_IO_ECS 0x40000
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
index 8fd6f44..e8df922 100644
--- a/arch/x86/pci/common.c
+++ b/arch/x86/pci/common.c@@ -83,7 +83,7 @@ DEFINE_RAW_SPINLOCK(pci_config_lock); static int __init can_skip_ioresource_align(const struct dmi_system_id *d) { - pci_probe |= PCI_CAN_SKIP_ISA_ALIGN; + pci_add_flags(PCI_CAN_SKIP_ISA_ALIGN); printk(KERN_INFO "PCI: %s detected, can skip ISA alignment\n", d->ident); return 0; }
@@ -619,7 +619,7 @@ char *__init pcibios_setup(char *str) pci_routeirq = 1; return NULL; } else if (!strcmp(str, "skip_isa_align")) { - pci_probe |= PCI_CAN_SKIP_ISA_ALIGN; + pci_add_flags(PCI_CAN_SKIP_ISA_ALIGN); return NULL; } else if (!strcmp(str, "noioapicquirk")) { noioapicquirk = 1;
diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c
index 0a9f2ca..3f17726 100644
--- a/arch/x86/pci/i386.c
+++ b/arch/x86/pci/i386.c@@ -33,6 +33,7 @@ #include <linux/errno.h> #include <linux/bootmem.h> +#include <asm-generic/pci-bridge.h> #include <asm/pat.h> #include <asm/e820.h> #include <asm/pci_x86.h>
@@ -128,15 +129,6 @@ static void __init pcibios_fw_addr_list_del(void) pcibios_fw_addr_done = true; } -static int -skip_isa_ioresource_align(struct pci_dev *dev) { - - if ((pci_probe & PCI_CAN_SKIP_ISA_ALIGN) && - !(dev->bus->bridge_ctl & PCI_BRIDGE_CTL_ISA)) - return 1; - return 0; -} - /* * We need to avoid collisions with `mirrored' VGA ports * and other strange ISA hardware, so we always want the
@@ -158,7 +150,7 @@ pcibios_align_resource(void *data, const struct resource *res, resource_size_t start = res->start; if (res->flags & IORESOURCE_IO) { - if (skip_isa_ioresource_align(dev)) + if (skip_isa_ioresource_align(dev->bus)) return start; if (start & 0x300) start = (start + 0x3ff) & ~0x3ff;
diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
index 7fb08ef..1f08bed 100644
--- a/drivers/pci/setup-bus.c
+++ b/drivers/pci/setup-bus.c@@ -1157,6 +1157,15 @@ static resource_size_t window_alignment(struct pci_bus *bus, return max(align, arch_align); } +int skip_isa_ioresource_align(struct pci_bus *bus) +{ + if (pci_has_flag(PCI_CAN_SKIP_ISA_ALIGN) && + !(bus->bridge_ctl & PCI_BRIDGE_CTL_ISA)) + return 1; + + return 0; +} + static resource_size_t size_aligned_for_isa(resource_size_t size) { /*
diff --git a/include/asm-generic/pci-bridge.h b/include/asm-generic/pci-bridge.h
index 20db2e5..fab4bd0 100644
--- a/include/asm-generic/pci-bridge.h
+++ b/include/asm-generic/pci-bridge.h@@ -60,6 +60,8 @@ static inline int pci_has_flag(int flag) { return pci_flags & flag; } + +int skip_isa_ioresource_align(struct pci_bus *bus); #else static inline void pci_set_flags(int flags) { } static inline void pci_add_flags(int flags) { }
--
1.8.4.5