[linux-yocto] [PATCH 30/42] arch/arm/mach-axxia: Updated PCIe driver doorbell support

Cristian Bercaru cristian.bercaru at windriver.com
Thu Jun 11 01:32:15 PDT 2015


From: SangeethaRao <sangeetha.rao at intel.com>

The support was updated to use DTS entries.
PCIe legacy ISR is updated to not mask link
alarms since this doesn't apply to AXM55xx

Signed-off-by: SangeethaRao <sangeetha.rao at intel.com>
---
 arch/arm/boot/dts/axm55xx.dtsi |    4 +++-
 arch/arm/mach-axxia/pci.c      |   17 +++++------------
 2 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/arch/arm/boot/dts/axm55xx.dtsi b/arch/arm/boot/dts/axm55xx.dtsi
index 2d1771b..72ed71f 100644
--- a/arch/arm/boot/dts/axm55xx.dtsi
+++ b/arch/arm/boot/dts/axm55xx.dtsi
@@ -196,6 +196,7 @@
 	                              0x00 0x00000000
 	                              0x00 0x40000000>;
 	                interrupts = <0 68 4>,
+	                             <0 71 4>,
 	                             <0 73 4>,
 	                             <0 74 4>,
 	                             <0 75 4>,
@@ -235,7 +236,8 @@
 	                dma-ranges = <0x03000000 0x00000000 0x00000000
 	                              0x00 0x00000000
 	                              0x00 0x40000000>;
-	                interrupts = <0 70 4>;
+	                interrupts = <0 70 4>,
+	                             <0 72 4>;
 	                port = <1>;
 			status = "disabled";
 	        };
diff --git a/arch/arm/mach-axxia/pci.c b/arch/arm/mach-axxia/pci.c
index 9a402e6..d48d93f 100644
--- a/arch/arm/mach-axxia/pci.c
+++ b/arch/arm/mach-axxia/pci.c
@@ -119,7 +119,7 @@ struct axxia_pciex_port {
 	unsigned int	    index;
 	u8                  root_bus_nr;
 	bool                link_up;
-	int                 irq[17]; /* 1 legacy, 16 MSI */
+	int                 irq[18]; /* 1 legacy, 1 Doorbell (EP), 16 MSI */
 	void __iomem	    *regs;
 	void __iomem	    *cfg_data;
 	u32                 last_mpage;
@@ -465,17 +465,11 @@ pcie_legacy_isr(int irq, void *arg)
 			if (intr_status & 0x00020000) {
 				pr_info("PCIE%d: t2a_fn_indp_err_stat = %#x\n",
 					port->index, readl(mbase+0x1170));
-				int_enb = readl(mbase + PCIE_INT0_ENABLE);
-				int_enb &= 0xfffdffff;
-				writel(int_enb, mbase + PCIE_INT0_ENABLE);
 			}
 
 			if (intr_status & 0x00040000) {
 				pr_info("PCIE%d: t2a_fn_indp_other_err_stat = %#x\n",
 					port->index, readl(mbase+0x1174));
-				int_enb = readl(mbase + PCIE_INT0_ENABLE);
-				int_enb &= 0xfffbffff;
-				writel(int_enb, mbase + PCIE_INT0_ENABLE);
 			}
 
 			if (intr_status & 0x00000800) {
@@ -483,9 +477,6 @@ pcie_legacy_isr(int irq, void *arg)
 					port->index,
 					readl(mbase + PCIE_CONFIG),
 					readl(mbase + PCIE_STATUS));
-				int_enb = readl(mbase + PCIE_INT0_ENABLE);
-				int_enb &= 0xfffff7ff;
-				writel(int_enb, mbase + PCIE_INT0_ENABLE);
 			}
 
 			/*
@@ -689,7 +680,8 @@ static int axxia_pcie_setup(int portno, struct pci_sys_data *sys)
 		pr_err("PCIE%d: Device is not Root Complex\n", port->index);
 		if (sys->domain == 0) {
 			/* PEI0 */
-			err = request_irq(port->irq[0]+3, pcie_doorbell_isr,
+			port->irq[1] = irq_of_parse_and_map(port->node, 1);
+			err = request_irq(port->irq[1], pcie_doorbell_isr,
 			IRQF_SHARED, "pcie_db", port);
 			if (err) {
 				pr_err("PCIE%d: Failed to request IRQ#%d (%d)\n",
@@ -699,7 +691,8 @@ static int axxia_pcie_setup(int portno, struct pci_sys_data *sys)
 			}
 		} else if (sys->domain == 1) {
 			/* PEI1 */
-			err = request_irq(port->irq[0]+2, pcie_doorbell_isr,
+			port->irq[1] = irq_of_parse_and_map(port->node, 1);
+			err = request_irq(port->irq[1], pcie_doorbell_isr,
 			IRQF_SHARED, "pcie_db", port);
 			if (err) {
 				pr_err("PCIE%d: Failed to request IRQ#%d (%d)\n",
-- 
1.7.9.5



More information about the linux-yocto mailing list