aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRay Jui <ray.jui@broadcom.com>2016-10-31 20:38:32 -0400
committerBjorn Helgaas <bhelgaas@google.com>2016-11-14 16:55:33 -0500
commit404349c5c806d56de2b41f48a99402c3c7573af5 (patch)
treec903bdc7b17fe91280f28a3f9e20fc87d2da785e
parent7cbd50d275fe4f6a31f536e140b6124f68998c61 (diff)
PCI: iproc: Add BCMA type
The iProc PCIe driver is currently using type IPROC_PCIE_PAXB for the following SoCs: NS, NSP, Cygnus, NS2, and Pegasus. In fact, the BCMA-based NS uses a legacy PAXB controller that is slightly different from the PAXB controller used in the rest of SoCs, e.g., some registers are missing and it does not require software configuration of outbound/inbound address mapping. Add a new type, IPROC_PCIE_PAXB_BCMA, to allow us to properly support the BCMA-based NS along with other iProc-based SoCs going forward. Signed-off-by: Ray Jui <ray.jui@broadcom.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Scott Branden <scott.branden@broadcom.com>
-rw-r--r--drivers/pci/host/pcie-iproc-bcma.c1
-rw-r--r--drivers/pci/host/pcie-iproc-msi.c1
-rw-r--r--drivers/pci/host/pcie-iproc.c14
-rw-r--r--drivers/pci/host/pcie-iproc.h3
4 files changed, 18 insertions, 1 deletions
diff --git a/drivers/pci/host/pcie-iproc-bcma.c b/drivers/pci/host/pcie-iproc-bcma.c
index 8ce089043a27..bd4c9ec25edc 100644
--- a/drivers/pci/host/pcie-iproc-bcma.c
+++ b/drivers/pci/host/pcie-iproc-bcma.c
@@ -54,6 +54,7 @@ static int iproc_pcie_bcma_probe(struct bcma_device *bdev)
54 54
55 pcie->dev = dev; 55 pcie->dev = dev;
56 56
57 pcie->type = IPROC_PCIE_PAXB_BCMA;
57 pcie->base = bdev->io_addr; 58 pcie->base = bdev->io_addr;
58 if (!pcie->base) { 59 if (!pcie->base) {
59 dev_err(dev, "no controller registers\n"); 60 dev_err(dev, "no controller registers\n");
diff --git a/drivers/pci/host/pcie-iproc-msi.c b/drivers/pci/host/pcie-iproc-msi.c
index 9a2973bdc78a..9fad7915f82a 100644
--- a/drivers/pci/host/pcie-iproc-msi.c
+++ b/drivers/pci/host/pcie-iproc-msi.c
@@ -563,6 +563,7 @@ int iproc_msi_init(struct iproc_pcie *pcie, struct device_node *node)
563 } 563 }
564 564
565 switch (pcie->type) { 565 switch (pcie->type) {
566 case IPROC_PCIE_PAXB_BCMA:
566 case IPROC_PCIE_PAXB: 567 case IPROC_PCIE_PAXB:
567 msi->reg_offsets = iproc_msi_reg_paxb; 568 msi->reg_offsets = iproc_msi_reg_paxb;
568 msi->nr_eq_region = 1; 569 msi->nr_eq_region = 1;
diff --git a/drivers/pci/host/pcie-iproc.c b/drivers/pci/host/pcie-iproc.c
index 93b4d619c0ed..912a1cbe561e 100644
--- a/drivers/pci/host/pcie-iproc.c
+++ b/drivers/pci/host/pcie-iproc.c
@@ -100,6 +100,17 @@ enum iproc_pcie_reg {
100 IPROC_PCIE_MAX_NUM_REG, 100 IPROC_PCIE_MAX_NUM_REG,
101}; 101};
102 102
103/* iProc PCIe PAXB BCMA registers */
104static const u16 iproc_pcie_reg_paxb_bcma[] = {
105 [IPROC_PCIE_CLK_CTRL] = 0x000,
106 [IPROC_PCIE_CFG_IND_ADDR] = 0x120,
107 [IPROC_PCIE_CFG_IND_DATA] = 0x124,
108 [IPROC_PCIE_CFG_ADDR] = 0x1f8,
109 [IPROC_PCIE_CFG_DATA] = 0x1fc,
110 [IPROC_PCIE_INTX_EN] = 0x330,
111 [IPROC_PCIE_LINK_STATUS] = 0xf0c,
112};
113
103/* iProc PCIe PAXB registers */ 114/* iProc PCIe PAXB registers */
104static const u16 iproc_pcie_reg_paxb[] = { 115static const u16 iproc_pcie_reg_paxb[] = {
105 [IPROC_PCIE_CLK_CTRL] = 0x000, 116 [IPROC_PCIE_CLK_CTRL] = 0x000,
@@ -469,6 +480,9 @@ static int iproc_pcie_rev_init(struct iproc_pcie *pcie)
469 const u16 *regs; 480 const u16 *regs;
470 481
471 switch (pcie->type) { 482 switch (pcie->type) {
483 case IPROC_PCIE_PAXB_BCMA:
484 regs = iproc_pcie_reg_paxb_bcma;
485 break;
472 case IPROC_PCIE_PAXB: 486 case IPROC_PCIE_PAXB:
473 regs = iproc_pcie_reg_paxb; 487 regs = iproc_pcie_reg_paxb;
474 break; 488 break;
diff --git a/drivers/pci/host/pcie-iproc.h b/drivers/pci/host/pcie-iproc.h
index 83643d55383d..768be05cf496 100644
--- a/drivers/pci/host/pcie-iproc.h
+++ b/drivers/pci/host/pcie-iproc.h
@@ -24,7 +24,8 @@
24 * endpoint devices. 24 * endpoint devices.
25 */ 25 */
26enum iproc_pcie_type { 26enum iproc_pcie_type {
27 IPROC_PCIE_PAXB = 0, 27 IPROC_PCIE_PAXB_BCMA = 0,
28 IPROC_PCIE_PAXB,
28 IPROC_PCIE_PAXC, 29 IPROC_PCIE_PAXC,
29}; 30};
30 31