From: Arnd Bergmann <arnd@arndb.de>
To: linux-pci@vger.kernel.org, Bjorn Helgaas <bhelgaas@google.com>
Cc: linux-kernel@vger.kernel.org,
Christoph Hellwig <hch@infradead.org>,
Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
linuxppc-dev@lists.ozlabs.org, linux-acpi@vger.kernel.org,
Arnd Bergmann <arnd@arndb.de>
Subject: [RFC 12/15] PCI: make pcibios_bus_add_device() a callback function
Date: Fri, 17 Aug 2018 12:26:42 +0200 [thread overview]
Message-ID: <20180817102645.3839621-13-arnd@arndb.de> (raw)
In-Reply-To: <20180817102645.3839621-1-arnd@arndb.de>
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 <arnd@arndb.de>
---
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 *);
--
2.18.0
next prev parent reply other threads:[~2018-08-17 10:33 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-17 10:26 [RFC 00/15] PCI: turn some __weak functions into callbacks Arnd Bergmann
2018-08-17 10:26 ` [RFC 01/15] PCI: clean up legacy host bridge scan functions Arnd Bergmann
2018-08-17 10:26 ` [RFC 02/15] PCI: move pci_scan_bus into callers Arnd Bergmann
2018-08-17 10:26 ` [RFC 03/15] PCI: move pci_scan_root_bus " Arnd Bergmann
2018-08-17 10:26 ` [RFC 04/15] PCI: export pci_register_host_bridge Arnd Bergmann
2018-08-17 10:26 ` [RFC 05/15] PCI: move pci_create_root_bus into callers Arnd Bergmann
2018-08-17 10:26 ` [RFC 06/15] powerpc/pci: fold pci_create_root_bus into pcibios_scan_phb Arnd Bergmann
2018-08-17 10:26 ` [RFC 07/15] PCI/ACPI: clean up acpi_pci_root_create() Arnd Bergmann
2018-08-20 8:23 ` Rafael J. Wysocki
2018-08-20 11:19 ` Arnd Bergmann
2018-08-20 11:24 ` Rafael J. Wysocki
2018-08-20 11:36 ` Arnd Bergmann
2018-08-17 10:26 ` [RFC 08/15] x86: PCI: clean up pcibios_scan_root() Arnd Bergmann
2018-08-20 8:31 ` Rafael J. Wysocki
2018-08-20 11:16 ` Arnd Bergmann
2018-08-20 11:26 ` Rafael J. Wysocki
2018-08-17 10:26 ` [RFC 09/15] PCI: xenfront: clean up pcifront_scan_root() Arnd Bergmann
2018-08-17 10:26 ` [RFC 10/15] sparc/PCI: simplify pci_scan_one_pbm Arnd Bergmann
2018-08-17 10:26 ` [RFC 11/15] PCI: hyperv: convert to pci_scan_root_bus_bridge Arnd Bergmann
2018-08-17 10:26 ` Arnd Bergmann [this message]
2018-08-17 10:26 ` [RFC 13/15] PCI: turn pcibios_alloc_irq into a callback Arnd Bergmann
2018-08-17 10:26 ` [RFC 14/15] PCI: make pcibios_root_bridge_prepare " Arnd Bergmann
2018-08-17 10:26 ` [RFC 15/15] PCI: make pcibios_add_bus/remove_bus callbacks Arnd Bergmann
2018-08-21 6:14 ` [RFC 00/15] PCI: turn some __weak functions into callbacks Christoph Hellwig
2018-08-21 10:07 ` Arnd Bergmann
2018-08-21 11:30 ` David Woodhouse
2018-08-21 13:14 ` Christoph Hellwig
2018-10-02 20:59 ` Bjorn Helgaas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180817102645.3839621-13-arnd@arndb.de \
--to=arnd@arndb.de \
--cc=benh@kernel.crashing.org \
--cc=bhelgaas@google.com \
--cc=hch@infradead.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=lorenzo.pieralisi@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).