[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