mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 15:32:33 +00:00
f80272dd9c
Refreshed all patches. Remove upstreamed: - 302-0002-dmaengine-dw-implement-per-channel-protection-contro.patch Fixes: - CVE-2019-19332 Compile-tested on: cns3xxx Runtime-tested on: cns3xxx Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
44 lines
1.6 KiB
Diff
44 lines
1.6 KiB
Diff
From fc4fafeed9a7cc89b4779681f046a8cc0f506dd9 Mon Sep 17 00:00:00 2001
|
|
From: Phil Elwell <phil@raspberrypi.org>
|
|
Date: Wed, 11 Oct 2017 13:48:04 +0100
|
|
Subject: [PATCH 123/454] amba-pl011: Report AUTOCTS capability to framework
|
|
|
|
The PL011 has full hardware RTS/CTS support which is enabled by
|
|
the driver when flow control is requested. However, it doesn't
|
|
notify the UART framework of the fact, causing the software CTS
|
|
support to be enabled at the same time.
|
|
|
|
Software CTS triggers the sending of another batch of characters
|
|
when CTS becomes asserted. The pl011 interrupt handler processes
|
|
the CTIS bit before TXIS, which can cause some characters to be
|
|
sent between the time that the TXIS bit first becomes asserted
|
|
and the time it is handled by a call to px011_tx_chars. This
|
|
would be fine were it not for the optimisation in pl011_tx_char
|
|
that assumes the FIFO is half-empty if called from the interrupt
|
|
handler and skips the checking of the FIFO status register before
|
|
sending each character, leading to data loss if the FIFO is more
|
|
than half-full.
|
|
|
|
Prevent the data loss and improve efficiency by indicating the
|
|
AUTOCTS support.
|
|
|
|
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|
---
|
|
drivers/tty/serial/amba-pl011.c | 2 ++
|
|
1 file changed, 2 insertions(+)
|
|
|
|
--- a/drivers/tty/serial/amba-pl011.c
|
|
+++ b/drivers/tty/serial/amba-pl011.c
|
|
@@ -2061,9 +2061,11 @@ pl011_set_termios(struct uart_port *port
|
|
|
|
old_cr |= UART011_CR_CTSEN;
|
|
uap->autorts = true;
|
|
+ port->status |= UPSTAT_AUTOCTS;
|
|
} else {
|
|
old_cr &= ~(UART011_CR_CTSEN | UART011_CR_RTSEN);
|
|
uap->autorts = false;
|
|
+ port->status &= ~UPSTAT_AUTOCTS;
|
|
}
|
|
|
|
if (uap->vendor->oversampling) {
|