]> git.ipfire.org Git - people/arne_f/kernel.git/commitdiff
PCI: thunder-pem: Factor out resource lookup
authorBjorn Helgaas <bhelgaas@google.com>
Tue, 4 Apr 2017 19:32:11 +0000 (19:32 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 12 Apr 2017 10:41:17 +0000 (12:41 +0200)
[ 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 <bhelgaas@google.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/pci/host/pci-thunder-pem.c

index 6abaf80ffb395d48668dc995782cdb4b53ff4067..c3276eede82a3ec2751b92bb1c01af0ab0df94b3 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,