4.9-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Bjorn Helgaas <[email protected]>

[ Upstream commit 0d414268fb8d0844030f87027e904f69d96706be ]

Pull the register resource lookup out of thunder_pem_init() so we can
easily add a corresponding lookup using ACPI.  No functional change
intended.

Signed-off-by: Bjorn Helgaas <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
 drivers/pci/host/pci-thunder-pem.c |   50 +++++++++++++++++++------------------
 1 file changed, 27 insertions(+), 23 deletions(-)

--- a/drivers/pci/host/pci-thunder-pem.c
+++ b/drivers/pci/host/pci-thunder-pem.c
@@ -284,35 +284,16 @@ static int thunder_pem_config_write(stru
        return pci_generic_config_write(bus, devfn, where, size, val);
 }
 
-static int thunder_pem_init(struct pci_config_window *cfg)
+static int thunder_pem_init(struct device *dev, struct pci_config_window *cfg,
+                           struct resource *res_pem)
 {
-       struct device *dev = cfg->parent;
-       resource_size_t bar4_start;
-       struct resource *res_pem;
        struct thunder_pem_pci *pem_pci;
-       struct platform_device *pdev;
-
-       /* Only OF support for now */
-       if (!dev->of_node)
-               return -EINVAL;
+       resource_size_t bar4_start;
 
        pem_pci = devm_kzalloc(dev, sizeof(*pem_pci), GFP_KERNEL);
        if (!pem_pci)
                return -ENOMEM;
 
-       pdev = to_platform_device(dev);
-
-       /*
-        * The second register range is the PEM bridge to the PCIe
-        * bus.  It has a different config access method than those
-        * devices behind the bridge.
-        */
-       res_pem = platform_get_resource(pdev, IORESOURCE_MEM, 1);
-       if (!res_pem) {
-               dev_err(dev, "missing \"reg[1]\"property\n");
-               return -EINVAL;
-       }
-
        pem_pci->pem_reg_base = devm_ioremap(dev, res_pem->start, 0x10000);
        if (!pem_pci->pem_reg_base)
                return -ENOMEM;
@@ -332,9 +313,32 @@ static int thunder_pem_init(struct pci_c
        return 0;
 }
 
+static int thunder_pem_platform_init(struct pci_config_window *cfg)
+{
+       struct device *dev = cfg->parent;
+       struct platform_device *pdev = to_platform_device(dev);
+       struct resource *res_pem;
+
+       if (!dev->of_node)
+               return -EINVAL;
+
+       /*
+        * The second register range is the PEM bridge to the PCIe
+        * bus.  It has a different config access method than those
+        * devices behind the bridge.
+        */
+       res_pem = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+       if (!res_pem) {
+               dev_err(dev, "missing \"reg[1]\"property\n");
+               return -EINVAL;
+       }
+
+       return thunder_pem_init(dev, cfg, res_pem);
+}
+
 static struct pci_ecam_ops pci_thunder_pem_ops = {
        .bus_shift      = 24,
-       .init           = thunder_pem_init,
+       .init           = thunder_pem_platform_init,
        .pci_ops        = {
                .map_bus        = pci_ecam_map_bus,
                .read           = thunder_pem_config_read,


Reply via email to