Messages in this thread | | | Date | Wed, 13 Jul 2022 19:11:29 +0300 | From | Andy Shevchenko <> | Subject | Re: [PATCH v3] serial: 8250_dw: Avoid pslverr on reading empty receiver fifo |
| |
On Wed, Jul 13, 2022 at 06:47:22PM +0530, Vamshi Gajjela wrote: > From: VAMSHI GAJJELA <vamshigajjela@google.com> > > With PSLVERR_RESP_EN parameter set to 1, the device generates an error > response when an attempt to read an empty RBR with FIFO enabled. > > This happens when LCR writes are ignored when UART is busy. > dw8250_check_lcr() in retries to update LCR, invokes dw8250_force_idle() > to clear and reset FIFO and eventually reads UART_RX causing the error. > > Avoid this by not reading RBR/UART_RX when no data is available.
From code perspective looks good, Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
but maybe Ilpo or others have something to add based on the practical use.
> Signed-off-by: VAMSHI GAJJELA <vamshigajjela@google.com> > --- > v3: > - check lsr based on FIFO enablement > v2: > - update as per review comments (re-format comments, xmas tree ordering) > drivers/tty/serial/8250/8250_dw.c | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c > index f57bbd32ef11..7573904579f6 100644 > --- a/drivers/tty/serial/8250/8250_dw.c > +++ b/drivers/tty/serial/8250/8250_dw.c > @@ -82,8 +82,21 @@ static inline int dw8250_modify_msr(struct uart_port *p, int offset, int value) > static void dw8250_force_idle(struct uart_port *p) > { > struct uart_8250_port *up = up_to_u8250p(p); > + unsigned int lsr; > > serial8250_clear_and_reinit_fifos(up); > + > + /* > + * With PSLVERR_RESP_EN parameter set to 1, the device generates an > + * error response when an attempt to read an empty RBR with FIFO > + * enabled. > + */ > + if (up->fcr & UART_FCR_ENABLE_FIFO) { > + lsr = p->serial_in(p, UART_LSR); > + if (!(lsr & UART_LSR_DR)) > + return; > + } > + > (void)p->serial_in(p, UART_RX); > } > > -- > 2.37.0.144.g8ac04bfd2-goog >
-- With Best Regards, Andy Shevchenko
| |