From patchwork Fri Aug 17 10:26:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 958764 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 41sKsy5v4hz9s5b for ; Fri, 17 Aug 2018 20:57:42 +1000 (AEST) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=arndb.de Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 41sKsy47nYzDrcW for ; Fri, 17 Aug 2018 20:57:42 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=arndb.de X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=none (mailfrom) smtp.mailfrom=arndb.de (client-ip=212.227.17.24; helo=mout.kundenserver.de; envelope-from=arnd@arndb.de; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=arndb.de Received: from mout.kundenserver.de (mout.kundenserver.de [212.227.17.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 41sKKY2mfpzF0gv for ; Fri, 17 Aug 2018 20:33:05 +1000 (AEST) Received: from wuerfel.lan ([109.193.40.16]) by mrelayeu.kundenserver.de (mreue101 [212.227.15.145]) with ESMTPA (Nemesis) id 0MC1IG-1fhmHo0FzU-008rTJ; Fri, 17 Aug 2018 12:27:20 +0200 From: Arnd Bergmann To: linux-pci@vger.kernel.org, Bjorn Helgaas Subject: [RFC 12/15] PCI: make pcibios_bus_add_device() a callback function Date: Fri, 17 Aug 2018 12:26:42 +0200 Message-Id: <20180817102645.3839621-13-arnd@arndb.de> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180817102645.3839621-1-arnd@arndb.de> References: <20180817102645.3839621-1-arnd@arndb.de> X-Provags-ID: V03:K1:R1utoXtX1xNh6nDBCTDKYtshx4x5Ad5wYNBJAgXrFk787hWLNDF 5obZ97/w/5En0hskq/pxyK7SOPl4UhPJ2PTwKnGPNKAKwSSdQ44BRgnjAIpA6XYIYn0Er06 Pc2dX6A+UrbraMGwdzGaTIO5CmmDZNbHiidjXfSMXOaA8lWZRiNZ9X5Rk7imkL9cOwKt3Sk D03IBJSMeL9atj01F6mqA== X-UI-Out-Filterresults: notjunk:1; V01:K0:JT18v2PmRjM=:BdxvTLBWgjFTWFz/lix40r 9z4L3bxqOuksALVAYcFPcGpBAZuHvxmXREciCWT0V4/KjIXU7sz10GNs3qu0muAS692Y4EBws y+uS8NypHKJkVoSyknYHDj1g11Iu4pvyZqQYI6ncINrrbegVAxG9Z+B3fpehQ7XQOKhdqeYkn jn3FweKwwFL+VeWCuHooBR7iSTg86FYe7UYVuNIw5MzmMWP3fX9BHR2ImBsD+mQfCvMjNg5lF gGbPHgrRtwSX+GTsRnmZVzCHwjuW5FgQtJ8OJ0QOtzQ93iopjmt78mviBj+iy0/Y0c9zY01PE jIkdyyGlOlaAhDElnwPn/yIojydgF/B8h/nAR6j+GbGIzTCmqSoIU64UfKheX8l45C/L0s+kK tCfFlZnlqOEWD/N36yRWCRohnxPcXEz1piMQO5lTC9i0wZbK/w8I/gFKm4egVgjhOzRfGYfPb xya+oG5EXfKiYxkCNUzEV5IsLsyW1Rb9owa3hrXKHagKNI+G0FyPcgX7Up6LGKBPx7T0loImS fGoU7kHZoFm/i7EI1ePh4pUDtxXzxvXaNn7DnHhXsF/qaRs5lobIrV9LxKk7gBUXjKjucaa/m iUnGqaHijQc0KiZ88rSKl8sMm9gwqe/QqHLWHtQpay9Mm8L4VOy1CNddVxFlNINETjzZChzIB 0z50LSuBb/sqfq6Q+iqBd0aXbZIliRA0Y5RL3HF0K3GjQGCz70DsvRVRuiObKuhVfw2g= X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Lorenzo Pieralisi , Arnd Bergmann , linux-kernel@vger.kernel.org, Christoph Hellwig , linux-acpi@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" Weak functions are confusion, and we can now add callback pointers to pci host bridges for any controller, so let's make this one a callback rather than a __weak global function. Signed-off-by: Arnd Bergmann --- arch/powerpc/kernel/pci-common.c | 7 +------ arch/sh/drivers/pci/pci.c | 1 + arch/sh/drivers/pci/pcie-sh7786.c | 3 ++- arch/sh/include/asm/pci.h | 2 ++ drivers/pci/bus.c | 8 +++++++- include/linux/pci.h | 2 +- 6 files changed, 14 insertions(+), 9 deletions(-) diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index 096011ec8670..afc9598e4349 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c @@ -270,12 +270,6 @@ int pcibios_sriov_disable(struct pci_dev *pdev) #endif /* CONFIG_PCI_IOV */ -void pcibios_bus_add_device(struct pci_dev *pdev) -{ - if (ppc_md.pcibios_bus_add_device) - ppc_md.pcibios_bus_add_device(pdev); -} - static resource_size_t pcibios_io_size(const struct pci_controller *hose) { #ifdef CONFIG_PPC64 @@ -1617,6 +1611,7 @@ void pcibios_scan_phb(struct pci_controller *hose) hose->busn.flags = IORESOURCE_BUS; pci_add_resource(&bridge->windows, &hose->busn); + bridge->bus_add_device = ppc_md->pcibios_bus_add_device; bridge->dev.parent = hose->parent; bridge->sysdata = hose; bridge->busnr = hose->first_busno; diff --git a/arch/sh/drivers/pci/pci.c b/arch/sh/drivers/pci/pci.c index 8256626bc53c..d5c01a86cde1 100644 --- a/arch/sh/drivers/pci/pci.c +++ b/arch/sh/drivers/pci/pci.c @@ -65,6 +65,7 @@ static void pcibios_scanbus(struct pci_channel *hose) bridge->ops = hose->pci_ops; bridge->swizzle_irq = pci_common_swizzle; bridge->map_irq = pcibios_map_platform_irq; + bridge->bus_add_device = hose->bus_add_device; ret = pci_scan_root_bus_bridge(bridge); if (ret) { diff --git a/arch/sh/drivers/pci/pcie-sh7786.c b/arch/sh/drivers/pci/pcie-sh7786.c index 3d81a8b80942..ab78356681a0 100644 --- a/arch/sh/drivers/pci/pcie-sh7786.c +++ b/arch/sh/drivers/pci/pcie-sh7786.c @@ -122,6 +122,7 @@ extern struct pci_ops sh7786_pci_ops; .reg_base = start, \ .mem_offset = 0, \ .io_offset = 0, \ + .bus_add_device = sh7786_pci_bus_add_device, \ } static struct pci_channel sh7786_pci_channels[] = { @@ -488,7 +489,7 @@ int pcibios_map_platform_irq(const struct pci_dev *pdev, u8 slot, u8 pin) return evt2irq(0xae0); } -void pcibios_bus_add_device(struct pci_dev *pdev) +static void sh7786_pci_bus_add_device(struct pci_dev *pdev) { pdev->dev.dma_pfn_offset = dma_pfn_offset; } diff --git a/arch/sh/include/asm/pci.h b/arch/sh/include/asm/pci.h index 10a36b1cf2ea..e605141cbcbe 100644 --- a/arch/sh/include/asm/pci.h +++ b/arch/sh/include/asm/pci.h @@ -35,6 +35,8 @@ struct pci_channel { /* Optional error handling */ struct timer_list err_timer, serr_timer; unsigned int err_irq, serr_irq; + + void (*bus_add_device)(struct pci_dev *pdev); }; /* arch/sh/drivers/pci/pci.c */ diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c index 5cb40b2518f9..45873ac1a49c 100644 --- a/drivers/pci/bus.c +++ b/drivers/pci/bus.c @@ -299,7 +299,13 @@ bool pci_bus_clip_resource(struct pci_dev *dev, int idx) void __weak pcibios_resource_survey_bus(struct pci_bus *bus) { } -void __weak pcibios_bus_add_device(struct pci_dev *pdev) { } +static void pcibios_bus_add_device(struct pci_dev *pdev) +{ + struct pci_host_bridge *bridge = pci_find_host_bridge(pdev->bus); + + if (bridge->bus_add_device) + bridge->bus_add_device(pdev); +} /** * pci_bus_add_device - start driver for a single device diff --git a/include/linux/pci.h b/include/linux/pci.h index 1dd8a3ecf753..d1072690cb4f 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -475,6 +475,7 @@ struct pci_host_bridge { u8 (*swizzle_irq)(struct pci_dev *, u8 *); /* Platform IRQ swizzler */ int (*map_irq)(const struct pci_dev *, u8, u8); void (*release_fn)(struct pci_host_bridge *); + void (*bus_add_device)(struct pci_dev *pdev); void *release_data; struct msi_controller *msi; unsigned int ignore_reset_delay:1; /* For entire hierarchy */ @@ -880,7 +881,6 @@ extern struct list_head pci_root_buses; /* List of all known PCI buses */ int no_pci_devices(void); void pcibios_resource_survey_bus(struct pci_bus *bus); -void pcibios_bus_add_device(struct pci_dev *pdev); void pcibios_add_bus(struct pci_bus *bus); void pcibios_remove_bus(struct pci_bus *bus); void pcibios_fixup_bus(struct pci_bus *);