From: Guillaume Autran <gautran@mrv.com>
To: linuxppc-embedded@ozlabs.org
Subject: Re: [PATCH] ppc32: fix cpm_uart_int() missing interrupts
Date: Thu, 19 May 2005 13:59:40 -0400 [thread overview]
Message-ID: <428CD40C.201@mrv.com> (raw)
In-Reply-To: <20050518170949.GA6766@gate.ebshome.net>
[-- Attachment #1.1: Type: text/plain, Size: 1189 bytes --]
This is a patch to fix a problem that occurs at high baud rates in the
cpm uart interrupt handling.
In cpm_uart_int(), the existing code reads the event register, processes
the events, and then clears bits in the event register before returning.
The problem here is that sometimes event processing generates new events
quite quickly (i.e. at higher baud rates, the transmit interrupt handler
puts another character into an SCC's transmit buffer and the SCC clears
the READY bit almost immediately). In this case, the second interrupt
can be missed because the scc_scce event register gets cleared after
processing the first. The port can get hung.
The fix adds a while loop. It reads the event register saving its value
in the local variable 'events' (as before) then clears the event
register in the device immediately. It processes the events and tests
the event register again handling new events that might get generated
during handling.
Any comment ?
Guillaume.
--
=======================================
Guillaume Autran
Senior Software Engineer
MRV Communications, Inc.
Tel: (978) 952-4932 office
E-mail: gautran@mrv.com
=======================================
[-- Attachment #1.2: Type: text/html, Size: 1782 bytes --]
[-- Attachment #2: cpm_uart_core.patch --]
[-- Type: text/plain, Size: 1407 bytes --]
diff -Nru linux-2.6.12-rc4.org/drivers/serial/cpm_uart/cpm_uart_core.c linux-2.6.12-rc4.new/drivers/serial/cpm_uart/cpm_uart_core.c
--- linux-2.6.12-rc4.org/drivers/serial/cpm_uart/cpm_uart_core.c 2005-05-07 01:20:31.000000000 -0400
+++ linux-2.6.12-rc4.new/drivers/serial/cpm_uart/cpm_uart_core.c 2005-05-19 13:48:58.000000000 -0400
@@ -335,23 +335,25 @@
pr_debug("CPM uart[%d]:IRQ\n", port->line);
if (IS_SMC(pinfo)) {
- events = smcp->smc_smce;
+ while ((events = smcp->smc_smce) & (SMCM_BRKE | SMCM_RX | SMCM_TX)) {
+ smcp->smc_smce = events;
if (events & SMCM_BRKE)
- uart_handle_break(port);
+ uart_handle_break(port);
if (events & SMCM_RX)
- cpm_uart_int_rx(port, regs);
+ cpm_uart_int_rx(port, regs);
if (events & SMCM_TX)
- cpm_uart_int_tx(port, regs);
- smcp->smc_smce = events;
+ cpm_uart_int_tx(port, regs);
+ }
} else {
- events = sccp->scc_scce;
+ while ((events = sccp->scc_scce) & (UART_SCCM_BRKE | UART_SCCM_RX | UART_SCCM_TX)) {
+ sccp->scc_scce = events;
if (events & UART_SCCM_BRKE)
- uart_handle_break(port);
+ uart_handle_break(port);
if (events & UART_SCCM_RX)
- cpm_uart_int_rx(port, regs);
+ cpm_uart_int_rx(port, regs);
if (events & UART_SCCM_TX)
- cpm_uart_int_tx(port, regs);
- sccp->scc_scce = events;
+ cpm_uart_int_tx(port, regs);
+ }
}
return (events) ? IRQ_HANDLED : IRQ_NONE;
}
next prev parent reply other threads:[~2005-05-19 17:58 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-05-18 17:09 [PATCH] ppc32: fix CONFIG_TASK_SIZE handling on 40x Eugene Surovegin
2005-05-19 17:59 ` Guillaume Autran [this message]
2005-05-19 18:11 ` [PATCH] ppc32: fix cpm_uart_int() missing interrupts Dan Malek
2005-05-19 19:34 ` Guillaume Autran
2005-05-19 19:54 ` Dan Malek
2005-05-19 20:26 ` Guillaume Autran
2005-05-19 20:32 ` Dan Malek
2005-05-19 20:36 ` Guillaume Autran
2005-05-20 14:19 ` Dan Malek
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=428CD40C.201@mrv.com \
--to=gautran@mrv.com \
--cc=linuxppc-embedded@ozlabs.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;
as well as URLs for NNTP newsgroup(s).