mpc52xx_uart.c - Port Overruns

Detlev Zundel dzu at denx.de
Fri Jul 3 21:42:46 EST 2009


Hi Damien,

> I am writing to ask about some particular behaviour we saw with the MPC5121 PSC
> UART, using the 2.6.24 Freescle BSP kernel, although examining the code of the
> linux-2.6-denx tree (git commit 7cb16ec2590815a67e5fb5c8994ead536613d922), the
> behavior is almost identical except for incrementing an overrrun counter.
>
> In particular, yesterday we observed a port overrun (from the overrun flags
> being set when looking with the BDI) on one of our PSC Ports.   When it was
> observed, we saw that every second byte coming from the serial port was 0x00.
>
> Examining the interrupt routine of the mpc52xx_uart.c:
>
> static inline int
> mpc52xx_uart_int_rx_chars(struct uart_port *port)
> {
> <snip>
>         tty_insert_flip_char(tty, ch, flag);
>         if (status & MPC52xx_PSC_SR_OE) {
>             /*
>              * Overrun is special, since it's
>              * reported immediately, and doesn't
>              * affect the current character
>              */
>             tty_insert_flip_char(tty, 0, TTY_OVERRUN);
>             port->icount.overrun++;
>         }
> <snip>
> }
>
> So, from my deduction, it is inserting a 0x00 for every overrun error that
> occurs, however, the overrun flag is never cleared.  Therefore fro every byte
> that is received, the overrup flag is still set and therefore we're observing
> the 0x00 being inserted for every "real" byte coming into the port
>
> Is there a particular reason why the overrun flag is not cleared? That is,
> parity, framing and breaks are acknowledged with:
>
>             /* Clear error condition */
>             out_8(&PSC(port)->command, MPC52xx_PSC_RST_ERR_STAT);
>
> But the overrun isn't cleared.   Is there are particular reason why?  Is
> userspace meant to detect this condition and reset the port?  Was it
> automatically cleared on the 5200 when reading the status, but the 5121 is
> exhibiting strange behavior? 

This is likely only forgotten in the driver.  I remember fixing this in
our 2.4 kernel tree a long time ago[1].

Cheers
  Detlev

[1] http://git.denx.de/?p=linuxppc_2_4_devel.git;a=commitdiff;h=00097a16641865b88568b807c9680b50c74bda84

--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-40 Fax: (+49)-8142-66989-80 Email: dzu at denx.de



More information about the Linuxppc-dev mailing list