[Bug 237576] UART NS8250 parity and frame errors detection doesn't work

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Fri Apr 26 08:31:01 UTC 2019


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=237576

            Bug ID: 237576
           Summary: UART NS8250 parity and frame errors detection doesn't
                    work
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: kern
          Assignee: bugs at FreeBSD.org
          Reporter: smaryus at gmail.com

On the UART NS8250 errors (parity/frame) are not detected when data is received
because every time there is a read on LSR register the errors bit is removed.
See [1]
Current UART core implementation relies on the LSR register to detect if data
is received. If data is received LSR is read again in pair with DATA register
to determine if the received byte generate any errors. At this time LSR error
bit is clear so no errors are reported.

In code:
1. uart_core.c: `uart_intr()` calls `UART_IPEND` which will go into
`ns8250_bus_ipend()`. Here LSR register is read and returns data received.
2. `uart_intr` calls `uart_intr_rxready` -> `UART_RECEIVE` ->
`ns8250_bus_receive`. Here LSR is read again to check if the received byte
generated error, but error bit from LSR is now 0. It was cleared by step 1.


[1]
https://en.wikibooks.org/wiki/Serial_Programming/8250_UART_Programming#Line_Status_Register

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-bugs mailing list