PCI: iproc: Factor out memory-mapped config access address calculation
authorOza Pawandeep <oza.oza@broadcom.com>
Mon, 28 Aug 2017 21:43:24 +0000 (16:43 -0500)
committerBjorn Helgaas <bhelgaas@google.com>
Mon, 28 Aug 2017 21:43:24 +0000 (16:43 -0500)
Factor out the address calculation for memory-mapped config accesses as a
separate function.  No functional change intended.

Signed-off-by: Oza Pawandeep <oza.oza@broadcom.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/host/pcie-iproc.c

index c5748634885636e7daf6b40804a037707d1260f0..61d9be69ca56311b0afe8b9530688c808aa224b4 100644 (file)
@@ -448,6 +448,31 @@ static inline void iproc_pcie_apb_err_disable(struct pci_bus *bus,
        }
 }
 
+static void __iomem *iproc_pcie_map_ep_cfg_reg(struct iproc_pcie *pcie,
+                                              unsigned int busno,
+                                              unsigned int slot,
+                                              unsigned int fn,
+                                              int where)
+{
+       u16 offset;
+       u32 val;
+
+       /* EP device access */
+       val = (busno << CFG_ADDR_BUS_NUM_SHIFT) |
+               (slot << CFG_ADDR_DEV_NUM_SHIFT) |
+               (fn << CFG_ADDR_FUNC_NUM_SHIFT) |
+               (where & CFG_ADDR_REG_NUM_MASK) |
+               (1 & CFG_ADDR_CFG_TYPE_MASK);
+
+       iproc_pcie_write_reg(pcie, IPROC_PCIE_CFG_ADDR, val);
+       offset = iproc_pcie_reg_offset(pcie, IPROC_PCIE_CFG_DATA);
+
+       if (iproc_pcie_reg_is_invalid(offset))
+               return NULL;
+
+       return (pcie->base + offset);
+}
+
 /**
  * Note access to the configuration registers are protected at the higher layer
  * by 'pci_lock' in drivers/pci/access.c
@@ -459,7 +484,6 @@ static void __iomem *iproc_pcie_map_cfg_bus(struct iproc_pcie *pcie,
 {
        unsigned slot = PCI_SLOT(devfn);
        unsigned fn = PCI_FUNC(devfn);
-       u32 val;
        u16 offset;
 
        /* root complex access */
@@ -484,18 +508,7 @@ static void __iomem *iproc_pcie_map_cfg_bus(struct iproc_pcie *pcie,
                if (slot > 0)
                        return NULL;
 
-       /* EP device access */
-       val = (busno << CFG_ADDR_BUS_NUM_SHIFT) |
-               (slot << CFG_ADDR_DEV_NUM_SHIFT) |
-               (fn << CFG_ADDR_FUNC_NUM_SHIFT) |
-               (where & CFG_ADDR_REG_NUM_MASK) |
-               (1 & CFG_ADDR_CFG_TYPE_MASK);
-       iproc_pcie_write_reg(pcie, IPROC_PCIE_CFG_ADDR, val);
-       offset = iproc_pcie_reg_offset(pcie, IPROC_PCIE_CFG_DATA);
-       if (iproc_pcie_reg_is_invalid(offset))
-               return NULL;
-       else
-               return (pcie->base + offset);
+       return iproc_pcie_map_ep_cfg_reg(pcie, busno, slot, fn, where);
 }
 
 static void __iomem *iproc_pcie_bus_map_cfg_bus(struct pci_bus *bus,