[linux-yocto] [PATCH 01/35] LSI AXM55xx RapidIO: Fixed a rare case of missing a RIO interrupt

Daniel Dragomir daniel.dragomir at windriver.com
Thu Nov 13 09:19:28 PST 2014


From: Palani <palaniappan.ramanathan at lsi.com>

This happens during multiple mailbox messaging.

Removed the redundant serdes register (ncr) read for
link status check, as the driver checks the status
using the sRIO registers.

Signed-off-by: Palani <palaniappan.ramanathan at lsi.com>
---
 arch/arm/mach-axxia/rapidio.c               | 8 --------
 drivers/rapidio/devices/lsi/axxia-rio-irq.c | 4 ++--
 2 files changed, 2 insertions(+), 10 deletions(-)

diff --git a/arch/arm/mach-axxia/rapidio.c b/arch/arm/mach-axxia/rapidio.c
index 3721fb6..8e8961f 100644
--- a/arch/arm/mach-axxia/rapidio.c
+++ b/arch/arm/mach-axxia/rapidio.c
@@ -32,7 +32,6 @@
 #include <linux/io.h>
 #include <linux/signal.h>
 
-#include <mach/ncr.h>
 #include <mach/rio.h>
 
 /**
@@ -68,13 +67,6 @@ int axxia_rapidio_board_init(
 
 	iounmap(gpreg_base);
 
-	/* Verify that this device is actually enabled */
-	ncr_read(NCP_REGION_ID(0x115, 0), 0x23c, 4, &reg);
-	if ((reg & (1 << (21+(dev_num*4)))) == 0) {
-		dev_dbg(&dev->dev, "%s: SRIO%d link not ready\n",
-			dev->dev.of_node->full_name, dev_num);
-		return -ENXIO;
-	}
 	return 0;
 }
 
diff --git a/drivers/rapidio/devices/lsi/axxia-rio-irq.c b/drivers/rapidio/devices/lsi/axxia-rio-irq.c
index 495735c..7f3f56c 100644
--- a/drivers/rapidio/devices/lsi/axxia-rio-irq.c
+++ b/drivers/rapidio/devices/lsi/axxia-rio-irq.c
@@ -1051,6 +1051,7 @@ static void ob_dme_irq_handler(struct rio_irq_handler *h)
 
 	axxia_local_config_read(priv, RAB_INTR_STAT_ODME, &int_stat);
 	mask = int_stat;
+	axxia_local_config_write(priv, RAB_INTR_STAT_ODME, mask);
 	while (int_stat) {
 		dme_no = __fls(int_stat);
 		int_stat ^= (1 << dme_no);
@@ -1082,7 +1083,6 @@ static void ob_dme_irq_handler(struct rio_irq_handler *h)
 		axxia_local_config_write(priv, RAB_OB_DME_STAT(dme_no),
 								dme_stat);
 	}
-	axxia_local_config_write(priv, RAB_INTR_STAT_ODME, mask);
 }
 
 static int alloc_ob_dme_shared(struct rio_priv *priv,
@@ -1367,6 +1367,7 @@ static void  ib_dme_irq_handler(struct rio_irq_handler *h/*, u32 state*/)
 
 	axxia_local_config_read(priv, RAB_INTR_STAT_IDME, &dme_mask);
 	mask = dme_mask;
+	axxia_local_config_write(priv, RAB_INTR_STAT_IDME, mask);
 	/**
 	 * Inbound mbox has 4 engines, 1 per letter.
 	 * For each message engine that contributes to IRQ state,
@@ -1424,7 +1425,6 @@ static void  ib_dme_irq_handler(struct rio_irq_handler *h/*, u32 state*/)
 		}
 
 	}
-	axxia_local_config_write(priv, RAB_INTR_STAT_IDME, mask);
 }
 /**
  * open_inb_mbox - Initialize AXXIA inbound mailbox
-- 
1.8.1.4



More information about the linux-yocto mailing list