| From 8f6a5d734bc0d925b1cfe31da8207a49cfca8298 Mon Sep 17 00:00:00 2001 |
| From: Bjorn Helgaas <bhelgaas@google.com> |
| Date: Wed, 30 Nov 2016 23:57:56 -0600 |
| Subject: [PATCH] PCI: thunder-pem: Factor out resource lookup |
| |
| commit 0d414268fb8d0844030f87027e904f69d96706be upstream. |
| |
| 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: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/pci/host/pci-thunder-pem.c b/drivers/pci/host/pci-thunder-pem.c |
| index 6abaf80ffb39..c3276eede82a 100644 |
| --- 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(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, |
| -- |
| 2.12.0 |
| |