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: [email protected]
Reporter: [email protected]
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.
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "[email protected]"