On Tue, Jul 12, 2022 at 6:56 PM Andy Shevchenko <andy.shevchenko@xxxxxxxxx> wrote: > > On Tue, Jul 12, 2022 at 3:16 PM Vamshi Gajjela <vamshigajjela@xxxxxxxxxx> wrote: > > > > From: VAMSHI GAJJELA <vamshigajjela@xxxxxxxxxx> > > > > With PSLVERR_RESP_EN parameter set to 1, device generates an error > > the device ack > > > response when an attempt to read empty RBR with FIFO enabled. > > an empty ack > > > This happens when LCR writes are ignored when UART is busy. > > dw8250_check_lcr() in retries to updateLCR, invokes dw8250_force_idle() > > to clear and reset fifo and eventually reads UART_RX causing pslverr. > > fifo --> FIFO > pslverr --> the error ack > > > Avoid this by not reading RBR/UART_RX when no data is available. > > ... > > > + unsigned int lsr; > > struct uart_8250_port *up = up_to_u8250p(p); > > Can we keep it ordered according to the reversed xmas tree? agree. > > ... > > > + /* > > + * With PSLVERR_RESP_EN parameter set to 1, device generates pslverr > > the device > pslverr --> an ack. > > > + * error response when an attempt to read empty RBR with FIFO enabled > > Missed period. ack > > > + */ > > + lsr = p->serial_in(p, UART_LSR); > > The only caller of this function already has the lsr value, why you > can't (re)use it? lsr is not read before, caller function (dw8250_check_lcr) reads lcr. > > > + if ((up->fcr & UART_FCR_ENABLE_FIFO) && !(lsr & UART_LSR_DR)) > > + return; > > -- > With Best Regards, > Andy Shevchenko