Can someone with powerpc / mpc5200 knowledge please check this out?
On Tue, Feb 4, 2014 at 9:22 AM, Aleksandr Platonov <p...@wolpike.com> wrote: > Hi. > > - We should check error bits in psc->sr_csr (not in psc->isr_imr) > - SR_ERROR should also contains SR_RB bit > > P.S. Changes were made according with linux code > (http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/tty/serial/mpc52xx_uart.c > function mpc52xx_uart_int_rx_chars()) and MPC5200b user's manual (chapter > 15.2.2.3)) > > > c/src/lib/libbsp/powerpc/gen5200/console/console.c | 12 +++++++----- > c/src/lib/libbsp/powerpc/gen5200/include/mpc5200.h | 11 ++++++----- > 2 files changed, 13 insertions(+), 10 deletions(-) > > diff --git a/c/src/lib/libbsp/powerpc/gen5200/console/console.c > b/c/src/lib/libbsp/powerpc/gen5200/console/console.c > index a70e06d..ed86bdd 100644 > --- a/c/src/lib/libbsp/powerpc/gen5200/console/console.c > +++ b/c/src/lib/libbsp/powerpc/gen5200/console/console.c > @@ -284,6 +284,7 @@ static void > mpc5200_psc_interrupt_handler(rtems_irq_hdl_param handle) > { > unsigned char c; > uint16_t isr; > + uint16_t sr; > int minor = (int)handle; > struct mpc5200_psc *psc = > (struct mpc5200_psc *)(&mpc5200.psc[psc_minor_to_regset[minor]]); > @@ -344,14 +345,15 @@ static void > mpc5200_psc_interrupt_handler(rtems_irq_hdl_param handle) > } > } > > - if(isr & ISR_ERROR) { > - if(isr & ISR_RB) > + sr = psc->sr_csr; > + if(sr & SR_ERROR) { > + if(sr & SR_RB) > channel_info[minor].breaks_detected++; > - if(isr & ISR_FE) > + if(sr & SR_FE) > channel_info[minor].framing_errors++; > - if(isr & ISR_PE) > + if(sr & SR_PE) > channel_info[minor].parity_errors++; > - if(isr & ISR_OE) > + if(sr & SR_OE) > channel_info[minor].overrun_errors++; > > /* > diff --git a/c/src/lib/libbsp/powerpc/gen5200/include/mpc5200.h > b/c/src/lib/libbsp/powerpc/gen5200/include/mpc5200.h > index 89e3968..318c54a 100644 > --- a/c/src/lib/libbsp/powerpc/gen5200/include/mpc5200.h > +++ b/c/src/lib/libbsp/powerpc/gen5200/include/mpc5200.h > @@ -977,6 +977,12 @@ typedef struct mpc5200_ { > volatile uint8_t mr; /* + 0x00 */ > volatile uint8_t res1[3]; > volatile uint16_t sr_csr; /* + 0x04 */ > +#define SR_RB (1 << 15) > +#define SR_FE (1 << 14) > +#define SR_PE (1 << 13) > +#define SR_OE (1 << 12) > +#define SR_ERROR (SR_RB | SR_FE | SR_PE | SR_OE) > + > volatile uint16_t res2[1]; > volatile uint16_t cr; /* + 0x08 */ > volatile uint16_t res3[1]; > @@ -986,11 +992,6 @@ typedef struct mpc5200_ { > volatile uint16_t isr_imr; /* + 0x14 */ > #define ISR_TX_RDY (1 << 8) > #define ISR_RX_RDY_FULL (1 << 9) > -#define ISR_RB (1 << 15) > -#define ISR_FE (1 << 14) > -#define ISR_PE (1 << 13) > -#define ISR_OE (1 << 12) > -#define ISR_ERROR (ISR_FE | ISR_PE | ISR_OE) > > #define IMR_TX_RDY (1 << 8) > #define IMR_RX_RDY_FULL (1 << 9) > _______________________________________________ > rtems-devel mailing list > rtems-devel@rtems.org > http://www.rtems.org/mailman/listinfo/rtems-devel _______________________________________________ rtems-devel mailing list rtems-devel@rtems.org http://www.rtems.org/mailman/listinfo/rtems-devel