PCI: thunder-pem: Factor out resource lookup
authorBjorn Helgaas <bhelgaas@google.com>
Thu, 1 Dec 2016 05:57:56 +0000 (23:57 -0600)
committerBjorn Helgaas <helgaas@kernel.org>
Tue, 6 Dec 2016 19:45:49 +0000 (13:45 -0600)
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 <bhelgaas@google.com>
drivers/pci/host/pci-thunder-pem.c

index 6abaf80..c3276ee 100644 (file)
@@ -284,35 +284,16 @@ static int thunder_pem_config_write(struct pci_bus *bus, unsigned int devfn,
        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_config_window *cfg)
        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,