Hello.

> Понедельник,  2 ноября 2015, 10:24 -05:00 от Alexander Shi 
> <alexander...@nanometrics.ca>:
> 
> Hello all,
>  
> The datasheet for MAX3107 UART ( 
> http://datasheets.maximintegrated.com/en/ds/MAX3107.pdf ) was updated in 
> February 2015 with a notice that the RxFIFOLvl register may be inaccurate if 
> read while being updated. The respective max310x.c driver in the kernel 
> actively makes use of the RxFIFOLvl register, but has not been updated since 
> the notice was posted. Does anyone have a workaround to this bug?
>  
> The notice was phrased as follows:
> “The RxFIFOLvl register represents the current number of words in the receive 
> FIFO whenever the receive UART is idle. When the receive UART actively 
> receives characters, the value in this register can sometimes be inaccurate 
> if this register is read at the same time that the receive UART updates the 
> receive FIFO. To manage the receive FIFO even when the receive UART is 
> active, do not use this register to determine receive FIFO state. Use the 
> RFIFOEmptyInt bit, the RxTrgInt bit, and the RTimeOut bit instead.”
>  
> Thanks,
> Alex

On my opinion this should not be a problem.
The RX interrupt will be triggered once again if we lost RX level value.
Anyway, you can add one check after reading rxfifolvl register:
  if (!(ists & MAX310X_IRQ_RXEMPTY_BIT))
    rxlen = 1;

Thanks.
---

Reply via email to