public inbox for linux-serial@vger.kernel.org
 help / color / mirror / Atom feed
From: Paul Gortmaker <paul.gortmaker@windriver.com>
To: linux-serial@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Subject: [RFC] suggested fix for 83xx/85xx PowerPC UART break bug
Date: Thu, 31 Jul 2008 11:26:30 -0400	[thread overview]
Message-ID: <20080731152616.GA14248@windriver.com> (raw)


This is something I'd tripped over earlier, and wanted to follow up on
to get an acceptable fix in for everyone's benefit before it falls through
the cracks again.

There seems to be an issue with recent 83xx/85xx SOC UARTs, in which a break
triggers a short lived IRQ storm (hence killing any hope of using SysRQ).
The only fix I found to work was to just ignore the bogus events that
had the associated signature bit set.

This fix is what I was using against earlier kernels, but I hate to add more
board/arch specific ifdefs to files like 8250.c, so I'm wondering if
anyone has any other suggestions before I simply end up cleaning up the
boardlist (now ppc is dead) and respinning the patch much as it is now
and resending.

Thanks,
Paul.

-----------------

Variation/update of version1 of the patch -- orig. discussion at:

http://patchwork.ozlabs.org/linuxppc/patch?id=15986

Update is: Don't use MPC8540 as a selector for the 8548 boards,
since testing on a genuine (older) MPC8540ADS board shows that
it doesn't have the issue.  This will get coverage on the 
sbc8349, fsl_mpc8349_mitx, fsl_mpc832xe (and the similar 8323RDB)
and the sbc8548 and the fsl_8548cds. (i.e all the boards where
the problem has been demonstrated to exist so far.)

    Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>

---
 drivers/serial/8250.c      |   17 +++++++++++++++++
 include/linux/serial_reg.h |    1 +
 2 files changed, 18 insertions(+)

--- a/drivers/serial/8250.c
+++ b/drivers/serial/8250.c
@@ -1347,6 +1347,25 @@ serial8250_handle_port(struct uart_8250_
 
 	status = serial_inp(up, UART_LSR);
 
+#if defined(CONFIG_MPC834x) || defined(CONFIG_MPC85xx_CDS) || \
+	defined(CONFIG_SBC8548) || defined (CONFIG_PPC_MPC832x)
+	/*
+	 * There appears to be a quirk in the implementation on some 8xxx
+	 * where after a break is rec'd (UART_LSR_BI), the UART generates
+	 * a short duration burst of bogus IRQ events with the signature
+	 * of RFE set (along with "normal" bits set) in the LSR.
+	 */
+
+#define RFE_8xxx_ERR_BITS (	UART_LSR_RFE	| UART_LSR_TEMT	| \
+				UART_LSR_THRE	| UART_LSR_BI	| \
+				UART_LSR_DR	)
+
+	if (status == RFE_8xxx_ERR_BITS) {
+		spin_unlock(&up->port.lock);
+		return;
+	}
+#endif
+
 	DEBUG_INTR("status = %x...", status);
 
 	if (status & UART_LSR_DR) {
--- a/include/linux/serial_reg.h
+++ b/include/linux/serial_reg.h
@@ -109,6 +109,7 @@
 #define UART_MCR_DTR		0x01 /* DTR complement */
 
 #define UART_LSR	5	/* In:  Line Status Register */
+#define UART_LSR_RFE		0x80 /* Rx FIFO Error (BE, FE, or PE) */
 #define UART_LSR_TEMT		0x40 /* Transmitter empty */
 #define UART_LSR_THRE		0x20 /* Transmit-hold-register empty */
 #define UART_LSR_BI		0x10 /* Break interrupt indicator */


             reply	other threads:[~2008-07-31 15:32 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-31 15:26 Paul Gortmaker [this message]
2008-07-31 20:31 ` [RFC] suggested fix for 83xx/85xx PowerPC UART break bug Kumar Gala
2008-08-01  1:43   ` Paul Gortmaker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080731152616.GA14248@windriver.com \
    --to=paul.gortmaker@windriver.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox