PCI: plda: Pass pci_host_bridge to plda_pcie_setup_iomems()
authorMinda Chen <minda.chen@starfivetech.com>
Thu, 28 Mar 2024 09:18:21 +0000 (17:18 +0800)
committerBjorn Helgaas <bhelgaas@google.com>
Tue, 28 May 2024 16:15:29 +0000 (11:15 -0500)
plda_pcie_setup_iomems() needs the bridge->windows list from struct
pci_host_bridge and is currently used only by pcie-microchip-host.c.  This
driver uses pci_host_common_probe(), which sets a pci_host_bridge as the
drvdata, so plda_pcie_setup_iomems() used platform_get_drvdata() to find
the pci_host_bridge.

But we also want to use plda_pcie_setup_iomems() in the new pcie-starfive.c
driver, which does not use pci_host_common_probe() and will have struct
starfive_jh7110_pcie as its drvdata, so pass the pci_host_bridge directly
to plda_pcie_setup_iomems() so it doesn't need platform_get_drvdata() to
find it.

Link: https://lore.kernel.org/linux-pci/20240328091835.14797-9-minda.chen@starfivetech.com
Signed-off-by: Minda Chen <minda.chen@starfivetech.com>
Signed-off-by: Krzysztof WilczyƄski <kwilczynski@kernel.org>
[bhelgaas: commit log, reorder to where this is needed]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
drivers/pci/controller/plda/pcie-microchip-host.c
drivers/pci/controller/plda/pcie-plda-host.c
drivers/pci/controller/plda/pcie-plda.h

index 36e4aef3e5268d577fd5049d0ddd4c539f563bc1..48f60a04b740ba51e0fdd314e8c176ca8dde0068 100644 (file)
@@ -616,6 +616,7 @@ static int mc_platform_init(struct pci_config_window *cfg)
 {
        struct device *dev = cfg->parent;
        struct platform_device *pdev = to_platform_device(dev);
+       struct pci_host_bridge *bridge = platform_get_drvdata(pdev);
        void __iomem *bridge_base_addr =
                port->axi_base_addr + MC_PCIE_BRIDGE_ADDR;
        int ret;
@@ -629,7 +630,7 @@ static int mc_platform_init(struct pci_config_window *cfg)
        mc_pcie_enable_msi(port, cfg->win);
 
        /* Configure non-config space outbound ranges */
-       ret = plda_pcie_setup_iomems(pdev, &port->plda);
+       ret = plda_pcie_setup_iomems(bridge, &port->plda);
        if (ret)
                return ret;
 
index 01495e96c2f6a54275fb9a089a659f4395b84317..a18923d7cea6e73c26644f61b43076e8e847eeab 100644 (file)
@@ -533,11 +533,10 @@ void plda_pcie_setup_window(void __iomem *bridge_base_addr, u32 index,
 }
 EXPORT_SYMBOL_GPL(plda_pcie_setup_window);
 
-int plda_pcie_setup_iomems(struct platform_device *pdev,
+int plda_pcie_setup_iomems(struct pci_host_bridge *bridge,
                           struct plda_pcie_rp *port)
 {
        void __iomem *bridge_base_addr = port->bridge_addr;
-       struct pci_host_bridge *bridge = platform_get_drvdata(pdev);
        struct resource_entry *entry;
        u64 pci_addr;
        u32 index = 1;
index 21cc3f723fb6ca5bf1225da98830da6408598dc4..52f4cacf791757296b1f8f512036bf3c6d5ba63b 100644 (file)
@@ -190,7 +190,7 @@ int plda_init_interrupts(struct platform_device *pdev,
 void plda_pcie_setup_window(void __iomem *bridge_base_addr, u32 index,
                            phys_addr_t axi_addr, phys_addr_t pci_addr,
                            size_t size);
-int plda_pcie_setup_iomems(struct platform_device *pdev,
+int plda_pcie_setup_iomems(struct pci_host_bridge *bridge,
                           struct plda_pcie_rp *port);
 int plda_pcie_host_init(struct plda_pcie_rp *port, struct pci_ops *ops,
                        const struct plda_event *plda_event);