Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757758AbcDHATp (ORCPT ); Thu, 7 Apr 2016 20:19:45 -0400 Received: from aserp1040.oracle.com ([141.146.126.69]:42883 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757690AbcDHATm (ORCPT ); Thu, 7 Apr 2016 20:19:42 -0400 From: Yinghai Lu To: Bjorn Helgaas , David Miller , Benjamin Herrenschmidt , Linus Torvalds Cc: Wei Yang , TJ , Yijing Wang , Khalid Aziz , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Yinghai Lu , Michal Simek , Paul Mackerras , Michael Ellerman , Arnd Bergmann , linuxppc-dev@lists.ozlabs.org, linux-arch@vger.kernel.org Subject: [PATCH v11 52/60] PCI: Unify skip_ioresource_align() Date: Thu, 7 Apr 2016 17:16:05 -0700 Message-Id: <1460074573-7481-53-git-send-email-yinghai@kernel.org> X-Mailer: git-send-email 1.8.4.5 In-Reply-To: <1460074573-7481-1-git-send-email-yinghai@kernel.org> References: <1460074573-7481-1-git-send-email-yinghai@kernel.org> X-Source-IP: aserv0021.oracle.com [141.146.126.233] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4993 Lines: 152 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 Cc: Paul Mackerras Cc: Michael Ellerman Cc: Arnd Bergmann Cc: linuxppc-dev@lists.ozlabs.org Cc: linux-arch@vger.kernel.org Signed-off-by: Yinghai Lu Reviewed-by: Thomas Gleixner Acked-by: Michael Ellerman --- 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 | 11 +---------- drivers/pci/setup-bus.c | 9 +++++++++ include/linux/pci.h | 2 ++ 6 files changed, 15 insertions(+), 23 deletions(-) diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index 0f7a60f..2a7f4fd 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c @@ -1053,15 +1053,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 @@ -1082,7 +1073,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 d08eacd2..d1f919e 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 381a43c..09a16b7 100644 --- a/arch/x86/pci/common.c +++ b/arch/x86/pci/common.c @@ -82,7 +82,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; } @@ -618,7 +618,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..cf296f5 100644 --- a/arch/x86/pci/i386.c +++ b/arch/x86/pci/i386.c @@ -128,15 +128,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 +149,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 28dfd8e..5ba4bf5 100644 --- a/drivers/pci/setup-bus.c +++ b/drivers/pci/setup-bus.c @@ -1150,6 +1150,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/linux/pci.h b/include/linux/pci.h index 979be25..d7b1ceb 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -765,6 +765,8 @@ static inline void pci_add_flags(int flags) { pci_flags |= flags; } static inline void pci_clear_flags(int flags) { pci_flags &= ~flags; } static inline int pci_has_flag(int flag) { return pci_flags & flag; } +int skip_isa_ioresource_align(struct pci_bus *bus); + void pcie_bus_configure_settings(struct pci_bus *bus); enum pcie_bus_config_types { -- 1.8.4.5