diff mbox

[2/2,v3] rapidio, powerpc/85xx: Error interrupt handler for sRIO.

Message ID 1290063473-20950-1-git-send-email-b21989@freescale.com (mailing list archive)
State Accepted, archived
Delegated to: Kumar Gala
Headers show

Commit Message

shaohui xie Nov. 18, 2010, 6:57 a.m. UTC
The sRIO controller reports errors to the core with one signal, it uses
register EPWISR to provides the core quick access to where the error occurred.
The EPWISR indicates that there are 4 interrupts sources, port1, port2, message
unit and port write receive, but the sRIO driver does not support port2
for now, still the handler takes care of port2.
Currently the handler only clear error status without any recovery.

Signed-off-by: Shaohui Xie <b21989@freescale.com>
Cc: Li Yang <leoli@freescale.com>
Cc: Kumar Gala <kumar.gala@freescale.com>
Cc: Roy Zang <tie-fei.zang@freescale.com>
Cc: Alexandre Bounine <alexandre.bounine@idt.com>
---
updated to 37-rc2
 arch/powerpc/sysdev/fsl_rio.c |   85 +++++++++++++++++++++++++++++++++++++----
 1 files changed, 77 insertions(+), 8 deletions(-)

Comments

Bounine, Alexandre Nov. 30, 2010, 8:48 p.m. UTC | #1
Applies correctly now. Lab tested on 8548/RIO setup.

Alex. 

> -----Original Message-----
> From: Shaohui Xie [mailto:b21989@freescale.com]
> Sent: Thursday, November 18, 2010 1:58 AM
> To: linuxppc-dev@lists.ozlabs.org
> Cc: akpm@linux-foundation.org; Shaohui Xie; Li Yang; Kumar Gala; Roy
Zang; Bounine, Alexandre
> Subject: [PATCH 2/2][v3] rapidio, powerpc/85xx: Error interrupt
handler for sRIO.
> 
> The sRIO controller reports errors to the core with one signal, it
uses
> register EPWISR to provides the core quick access to where the error
occurred.
> The EPWISR indicates that there are 4 interrupts sources, port1,
port2, message
> unit and port write receive, but the sRIO driver does not support
port2
> for now, still the handler takes care of port2.
> Currently the handler only clear error status without any recovery.
shaohui xie Dec. 3, 2010, 3:29 a.m. UTC | #2
Hi Alex,

 

May I ask when would these patches be applied to mainline?

 

 

Best Regards, 
Shaohui Xie 

 

From: Bounine, Alexandre [mailto:Alexandre.Bounine@idt.com] 
Sent: Wednesday, December 01, 2010 4:49 AM
To: Xie Shaohui-B21989; linuxppc-dev@lists.ozlabs.org
Cc: akpm@linux-foundation.org; Li Yang-R58472; Gala Kumar-B11780; Zang
Roy-R61911
Subject: RE: [PATCH 2/2][v3] rapidio, powerpc/85xx: Error interrupt
handler for sRIO.

 

Applies correctly now. Lab tested on 8548/RIO setup.

Alex.

> -----Original Message-----
> From: Shaohui Xie [mailto:b21989@freescale.com]
> Sent: Thursday, November 18, 2010 1:58 AM
> To: linuxppc-dev@lists.ozlabs.org
> Cc: akpm@linux-foundation.org; Shaohui Xie; Li Yang; Kumar Gala; Roy
Zang; Bounine, Alexandre
> Subject: [PATCH 2/2][v3] rapidio, powerpc/85xx: Error interrupt
handler for sRIO.
>
> The sRIO controller reports errors to the core with one signal, it
uses
> register EPWISR to provides the core quick access to where the error
occurred.
> The EPWISR indicates that there are 4 interrupts sources, port1,
port2, message
> unit and port write receive, but the sRIO driver does not support
port2
> for now, still the handler takes care of port2.
> Currently the handler only clear error status without any recovery.
Bounine, Alexandre Dec. 3, 2010, 6:04 p.m. UTC | #3
I think they should follow the previous two that are in Kumar's tree.

Probably Kumar may give you a better timeline estimate for this.   

 

Alex.

 

From: linuxppc-dev-bounces+alexandre.bounine=idt.com@lists.ozlabs.org
[mailto:linuxppc-dev-bounces+alexandre.bounine=idt.com@lists.ozlabs.org]
On Behalf Of Xie Shaohui-B21989
Sent: Thursday, December 02, 2010 10:29 PM
To: Bounine, Alexandre; linuxppc-dev@lists.ozlabs.org
Cc: akpm@linux-foundation.org; Gala Kumar-B11780; Li Yang-R58472; Zang
Roy-R61911
Subject: RE: [PATCH 2/2][v3] rapidio,powerpc/85xx: Error interrupt
handler for sRIO.

 

Hi Alex,

 

May I ask when would these patches be applied to mainline?

 

 

Best Regards, 
Shaohui Xie 

 

From: Bounine, Alexandre [mailto:Alexandre.Bounine@idt.com] 
Sent: Wednesday, December 01, 2010 4:49 AM
To: Xie Shaohui-B21989; linuxppc-dev@lists.ozlabs.org
Cc: akpm@linux-foundation.org; Li Yang-R58472; Gala Kumar-B11780; Zang
Roy-R61911
Subject: RE: [PATCH 2/2][v3] rapidio, powerpc/85xx: Error interrupt
handler for sRIO.

 

Applies correctly now. Lab tested on 8548/RIO setup.

Alex.

> -----Original Message-----
> From: Shaohui Xie [mailto:b21989@freescale.com]
> Sent: Thursday, November 18, 2010 1:58 AM
> To: linuxppc-dev@lists.ozlabs.org
> Cc: akpm@linux-foundation.org; Shaohui Xie; Li Yang; Kumar Gala; Roy
Zang; Bounine, Alexandre
> Subject: [PATCH 2/2][v3] rapidio, powerpc/85xx: Error interrupt
handler for sRIO.
>
> The sRIO controller reports errors to the core with one signal, it
uses
> register EPWISR to provides the core quick access to where the error
occurred.
> The EPWISR indicates that there are 4 interrupts sources, port1,
port2, message
> unit and port write receive, but the sRIO driver does not support
port2
> for now, still the handler takes care of port2.
> Currently the handler only clear error status without any recovery.
Kumar Gala May 20, 2011, 4:28 a.m. UTC | #4
Alex,

What are we doing with this patch?

- k

On Dec 3, 2010, at 12:04 PM, Bounine, Alexandre wrote:

> I think they should follow the previous two that are in Kumar’s tree.
> Probably Kumar may give you a better timeline estimate for this.   
> 
> Alex.
> 
> From: linuxppc-dev-bounces+alexandre.bounine=idt.com@lists.ozlabs.org [mailto:linuxppc-dev-bounces+alexandre.bounine=idt.com@lists.ozlabs.org] On Behalf Of Xie Shaohui-B21989
> Sent: Thursday, December 02, 2010 10:29 PM
> To: Bounine, Alexandre; linuxppc-dev@lists.ozlabs.org
> Cc: akpm@linux-foundation.org; Gala Kumar-B11780; Li Yang-R58472; Zang Roy-R61911
> Subject: RE: [PATCH 2/2][v3] rapidio,powerpc/85xx: Error interrupt handler for sRIO.
> 
> Hi Alex,
> 
> May I ask when would these patches be applied to mainline?
> 
> 
> Best Regards, 
> Shaohui Xie
> 
> From: Bounine, Alexandre [mailto:Alexandre.Bounine@idt.com] 
> Sent: Wednesday, December 01, 2010 4:49 AM
> To: Xie Shaohui-B21989; linuxppc-dev@lists.ozlabs.org
> Cc: akpm@linux-foundation.org; Li Yang-R58472; Gala Kumar-B11780; Zang Roy-R61911
> Subject: RE: [PATCH 2/2][v3] rapidio, powerpc/85xx: Error interrupt handler for sRIO.
> 
> Applies correctly now. Lab tested on 8548/RIO setup.
> 
> Alex.
> 
>> -----Original Message-----
>> From: Shaohui Xie [mailto:b21989@freescale.com]
>> Sent: Thursday, November 18, 2010 1:58 AM
>> To: linuxppc-dev@lists.ozlabs.org
>> Cc: akpm@linux-foundation.org; Shaohui Xie; Li Yang; Kumar Gala; Roy
> Zang; Bounine, Alexandre
>> Subject: [PATCH 2/2][v3] rapidio, powerpc/85xx: Error interrupt
> handler for sRIO.
>> 
>> The sRIO controller reports errors to the core with one signal, it
> uses
>> register EPWISR to provides the core quick access to where the error
> occurred.
>> The EPWISR indicates that there are 4 interrupts sources, port1,
> port2, message
>> unit and port write receive, but the sRIO driver does not support
> port2
>> for now, still the handler takes care of port2.
>> Currently the handler only clear error status without any recovery.
> 
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
Kumar Gala May 20, 2011, 12:42 p.m. UTC | #5
Any reason for me not to apply this and send it upstream for now?

- k

On May 20, 2011, at 7:14 AM, Bounine, Alexandre wrote:

> Kumar,
> 
> Are you planning to release support for dual-port SRIO controller?
> If yes, it may be just merged into it (unless dual-port implementation
> already has it).
> 
> Alex.
> 
>> -----Original Message-----
>> From: linuxppc-dev-bounces+alexandre.bounine=idt.com@lists.ozlabs.org
>> [mailto:linuxppc-dev-
>> bounces+alexandre.bounine=idt.com@lists.ozlabs.org] On Behalf Of Kumar
>> Gala
>> Sent: Friday, May 20, 2011 12:29 AM
>> To: Bounine, Alexandre
>> Cc: Li Yang-R58472; Xie Shaohui-B21989; Zang Roy-R61911; akpm@linux-
>> foundation.org; linuxppc-dev@lists.ozlabs.org; Gala Kumar-B11780
>> Subject: Re: [PATCH 2/2][v3] rapidio,powerpc/85xx: Error interrupt
>> handler for sRIO.
>> 
>> Alex,
>> 
>> What are we doing with this patch?
>> 
>> - k
>> 
>> On Dec 3, 2010, at 12:04 PM, Bounine, Alexandre wrote:
>> 
>>> I think they should follow the previous two that are in Kumar's
> tree.
>>> Probably Kumar may give you a better timeline estimate for this.
>>> 
>>> Alex.
>>> 
>>> From:
> linuxppc-dev-bounces+alexandre.bounine=idt.com@lists.ozlabs.org
>> [mailto:linuxppc-dev-
>> bounces+alexandre.bounine=idt.com@lists.ozlabs.org] On Behalf Of Xie
>> Shaohui-B21989
>>> Sent: Thursday, December 02, 2010 10:29 PM
>>> To: Bounine, Alexandre; linuxppc-dev@lists.ozlabs.org
>>> Cc: akpm@linux-foundation.org; Gala Kumar-B11780; Li Yang-R58472;
>> Zang Roy-R61911
>>> Subject: RE: [PATCH 2/2][v3] rapidio,powerpc/85xx: Error interrupt
>> handler for sRIO.
>>> 
>>> Hi Alex,
>>> 
>>> May I ask when would these patches be applied to mainline?
>>> 
>>> 
>>> Best Regards,
>>> Shaohui Xie
>>> 
>>> From: Bounine, Alexandre [mailto:Alexandre.Bounine@idt.com]
>>> Sent: Wednesday, December 01, 2010 4:49 AM
>>> To: Xie Shaohui-B21989; linuxppc-dev@lists.ozlabs.org
>>> Cc: akpm@linux-foundation.org; Li Yang-R58472; Gala Kumar-B11780;
>> Zang Roy-R61911
>>> Subject: RE: [PATCH 2/2][v3] rapidio, powerpc/85xx: Error interrupt
>> handler for sRIO.
>>> 
>>> Applies correctly now. Lab tested on 8548/RIO setup.
>>> 
>>> Alex.
>>> 
>>>> -----Original Message-----
>>>> From: Shaohui Xie [mailto:b21989@freescale.com]
>>>> Sent: Thursday, November 18, 2010 1:58 AM
>>>> To: linuxppc-dev@lists.ozlabs.org
>>>> Cc: akpm@linux-foundation.org; Shaohui Xie; Li Yang; Kumar Gala;
> Roy
>>> Zang; Bounine, Alexandre
>>>> Subject: [PATCH 2/2][v3] rapidio, powerpc/85xx: Error interrupt
>>> handler for sRIO.
>>>> 
>>>> The sRIO controller reports errors to the core with one signal, it
>>> uses
>>>> register EPWISR to provides the core quick access to where the
> error
>>> occurred.
>>>> The EPWISR indicates that there are 4 interrupts sources, port1,
>>> port2, message
>>>> unit and port write receive, but the sRIO driver does not support
>>> port2
>>>> for now, still the handler takes care of port2.
>>>> Currently the handler only clear error status without any recovery.
>>> 
>>> _______________________________________________
>>> Linuxppc-dev mailing list
>>> Linuxppc-dev@lists.ozlabs.org
>>> https://lists.ozlabs.org/listinfo/linuxppc-dev
>> 
>> _______________________________________________
>> Linuxppc-dev mailing list
>> Linuxppc-dev@lists.ozlabs.org
>> https://lists.ozlabs.org/listinfo/linuxppc-dev
Li Yang-R58472 May 20, 2011, 1:42 p.m. UTC | #6
Hi Alex,

Just for your information as you mentioned about it.  The dual port support is being worked on, but not likely to be ready in this merge window.

- Leo
Kumar Gala May 20, 2011, 1:53 p.m. UTC | #7
On Nov 18, 2010, at 12:57 AM, Shaohui Xie wrote:

> The sRIO controller reports errors to the core with one signal, it uses
> register EPWISR to provides the core quick access to where the error occurred.
> The EPWISR indicates that there are 4 interrupts sources, port1, port2, message
> unit and port write receive, but the sRIO driver does not support port2
> for now, still the handler takes care of port2.
> Currently the handler only clear error status without any recovery.
> 
> Signed-off-by: Shaohui Xie <b21989@freescale.com>
> Cc: Li Yang <leoli@freescale.com>
> Cc: Kumar Gala <kumar.gala@freescale.com>
> Cc: Roy Zang <tie-fei.zang@freescale.com>
> Cc: Alexandre Bounine <alexandre.bounine@idt.com>
> ---
> updated to 37-rc2
> arch/powerpc/sysdev/fsl_rio.c |   85 +++++++++++++++++++++++++++++++++++++----
> 1 files changed, 77 insertions(+), 8 deletions(-)

applied to merge

- k
diff mbox

Patch

diff --git a/arch/powerpc/sysdev/fsl_rio.c b/arch/powerpc/sysdev/fsl_rio.c
index ddbcd16..d036df9 100644
--- a/arch/powerpc/sysdev/fsl_rio.c
+++ b/arch/powerpc/sysdev/fsl_rio.c
@@ -10,7 +10,7 @@ 
  * - Added Port-Write message handling
  * - Added Machine Check exception handling
  *
- * Copyright (C) 2007, 2008 Freescale Semiconductor, Inc.
+ * Copyright (C) 2007, 2008, 2010 Freescale Semiconductor, Inc.
  * Zhang Wei <wei.zhang@freescale.com>
  *
  * Copyright 2005 MontaVista Software, Inc.
@@ -47,15 +47,33 @@ 
 #define IRQ_RIO_RX(m)		(((struct rio_priv *)(m->priv))->rxirq)
 #define IRQ_RIO_PW(m)		(((struct rio_priv *)(m->priv))->pwirq)
 
+#define IPWSR_CLEAR		0x98
+#define OMSR_CLEAR		0x1cb3
+#define IMSR_CLEAR		0x491
+#define IDSR_CLEAR		0x91
+#define ODSR_CLEAR		0x1c00
+#define LTLEECSR_ENABLE_ALL	0xFFC000FC
+#define ESCSR_CLEAR		0x07120204
+
+#define RIO_PORT1_EDCSR		0x0640
+#define RIO_PORT2_EDCSR		0x0680
+#define RIO_PORT1_IECSR		0x10130
+#define RIO_PORT2_IECSR		0x101B0
+#define RIO_IM0SR		0x13064
+#define RIO_IM1SR		0x13164
+#define RIO_OM0SR		0x13004
+#define RIO_OM1SR		0x13104
+
 #define RIO_ATMU_REGS_OFFSET	0x10c00
 #define RIO_P_MSG_REGS_OFFSET	0x11000
 #define RIO_S_MSG_REGS_OFFSET	0x13000
 #define RIO_GCCSR		0x13c
 #define RIO_ESCSR		0x158
+#define RIO_PORT2_ESCSR		0x178
 #define RIO_CCSR		0x15c
 #define RIO_LTLEDCSR		0x0608
-#define  RIO_LTLEDCSR_IER	0x80000000
-#define  RIO_LTLEDCSR_PRT	0x01000000
+#define RIO_LTLEDCSR_IER	0x80000000
+#define RIO_LTLEDCSR_PRT	0x01000000
 #define RIO_LTLEECSR		0x060c
 #define RIO_EPWISR		0x10010
 #define RIO_ISR_AACR		0x10120
@@ -88,7 +106,10 @@ 
 #define RIO_IPWSR_PWD		0x00000008
 #define RIO_IPWSR_PWB		0x00000004
 
-#define RIO_EPWISR_PINT		0x80000000
+/* EPWISR Error match value */
+#define RIO_EPWISR_PINT1	0x80000000
+#define RIO_EPWISR_PINT2	0x40000000
+#define RIO_EPWISR_MU		0x00000002
 #define RIO_EPWISR_PW		0x00000001
 
 #define RIO_MSG_DESC_SIZE	32
@@ -1066,6 +1087,40 @@  static int fsl_rio_doorbell_init(struct rio_mport *mport)
 	return rc;
 }
 
+static void port_error_handler(struct rio_mport *port, int offset)
+{
+	/*XXX: Error recovery is not implemented, we just clear errors */
+	out_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR), 0);
+
+	if (offset == 0) {
+		out_be32((u32 *)(rio_regs_win + RIO_PORT1_EDCSR), 0);
+		out_be32((u32 *)(rio_regs_win + RIO_PORT1_IECSR), 0);
+		out_be32((u32 *)(rio_regs_win + RIO_ESCSR), ESCSR_CLEAR);
+	} else {
+		out_be32((u32 *)(rio_regs_win + RIO_PORT2_EDCSR), 0);
+		out_be32((u32 *)(rio_regs_win + RIO_PORT2_IECSR), 0);
+		out_be32((u32 *)(rio_regs_win + RIO_PORT2_ESCSR), ESCSR_CLEAR);
+	}
+}
+
+static void msg_unit_error_handler(struct rio_mport *port)
+{
+	struct rio_priv *priv = port->priv;
+
+	/*XXX: Error recovery is not implemented, we just clear errors */
+	out_be32((u32 *)(rio_regs_win + RIO_LTLEDCSR), 0);
+
+	out_be32((u32 *)(rio_regs_win + RIO_IM0SR), IMSR_CLEAR);
+	out_be32((u32 *)(rio_regs_win + RIO_IM1SR), IMSR_CLEAR);
+	out_be32((u32 *)(rio_regs_win + RIO_OM0SR), OMSR_CLEAR);
+	out_be32((u32 *)(rio_regs_win + RIO_OM1SR), OMSR_CLEAR);
+
+	out_be32(&priv->msg_regs->odsr, ODSR_CLEAR);
+	out_be32(&priv->msg_regs->dsr, IDSR_CLEAR);
+
+	out_be32(&priv->msg_regs->pwsr, IPWSR_CLEAR);
+}
+
 /**
  * fsl_rio_port_write_handler - MPC85xx port write interrupt handler
  * @irq: Linux interrupt number
@@ -1146,10 +1201,22 @@  fsl_rio_port_write_handler(int irq, void *dev_instance)
 	}
 
 pw_done:
-	if (epwisr & RIO_EPWISR_PINT) {
+	if (epwisr & RIO_EPWISR_PINT1) {
+		tmp = in_be32(priv->regs_win + RIO_LTLEDCSR);
+		pr_debug("RIO_LTLEDCSR = 0x%x\n", tmp);
+		port_error_handler(port, 0);
+	}
+
+	if (epwisr & RIO_EPWISR_PINT2) {
+		tmp = in_be32(priv->regs_win + RIO_LTLEDCSR);
+		pr_debug("RIO_LTLEDCSR = 0x%x\n", tmp);
+		port_error_handler(port, 1);
+	}
+
+	if (epwisr & RIO_EPWISR_MU) {
 		tmp = in_be32(priv->regs_win + RIO_LTLEDCSR);
 		pr_debug("RIO_LTLEDCSR = 0x%x\n", tmp);
-		out_be32(priv->regs_win + RIO_LTLEDCSR, 0);
+		msg_unit_error_handler(port);
 	}
 
 	return IRQ_HANDLED;
@@ -1260,12 +1327,14 @@  static int fsl_rio_port_write_init(struct rio_mport *mport)
 
 
 	/* Hook up port-write handler */
-	rc = request_irq(IRQ_RIO_PW(mport), fsl_rio_port_write_handler, 0,
-			 "port-write", (void *)mport);
+	rc = request_irq(IRQ_RIO_PW(mport), fsl_rio_port_write_handler,
+			IRQF_SHARED, "port-write", (void *)mport);
 	if (rc < 0) {
 		pr_err("MPC85xx RIO: unable to request inbound doorbell irq");
 		goto err_out;
 	}
+	/* Enable Error Interrupt */
+	out_be32((u32 *)(rio_regs_win + RIO_LTLEECSR), LTLEECSR_ENABLE_ALL);
 
 	INIT_WORK(&priv->pw_work, fsl_pw_dpc);
 	spin_lock_init(&priv->pw_fifo_lock);