Revert "serial: uart: add hw flow control support configuration"
This reverts commit 06aa82e498
.
This commit purports to enable auto CTS flow control for the 8250
UART driver. However, the 8250 UART driver already supports auto
CTS flow control via UART_CAP_AFE and UART_CAP_EFR. Indeed, this
patch introduces another DT attribute for which an existing firmware
flag already exists ("auto-flow-control"). Furthermore, the use of
UPF_HARD_FLOW requires the UART driver to define .throttle and
.unthrottle methods, neither of which are defined for the 8250 UART
driver (which will result in a NULL ptr dereference). Finally, this patch
supposes to fix existing bugs in the serial core for auto CTS-enabled
hardware, but does not include the class of hardware for which these
bugs exist.
CC: Murali Karicheri <m-karicheri2@ti.com>
CC: Rob Herring <robh+dt@kernel.org>
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
95562e7fdf
Коммит
a6eec92ec0
|
@ -37,7 +37,6 @@ Optional properties:
|
|||
- auto-flow-control: one way to enable automatic flow control support. The
|
||||
driver is allowed to detect support for the capability even without this
|
||||
property.
|
||||
- has-hw-flow-control: the hardware has flow control capability.
|
||||
|
||||
Example:
|
||||
|
||||
|
|
|
@ -2319,11 +2319,9 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios,
|
|||
* the trigger, or the MCR RTS bit is cleared. In the case where
|
||||
* the remote UART is not using CTS auto flow control, we must
|
||||
* have sufficient FIFO entries for the latency of the remote
|
||||
* UART to respond. IOW, at least 32 bytes of FIFO. Also enable
|
||||
* AFE if hw flow control is supported
|
||||
* UART to respond. IOW, at least 32 bytes of FIFO.
|
||||
*/
|
||||
if ((up->capabilities & UART_CAP_AFE && (port->fifosize >= 32)) ||
|
||||
(port->flags & UPF_HARD_FLOW)) {
|
||||
if (up->capabilities & UART_CAP_AFE && port->fifosize >= 32) {
|
||||
up->mcr &= ~UART_MCR_AFE;
|
||||
if (termios->c_cflag & CRTSCTS)
|
||||
up->mcr |= UART_MCR_AFE;
|
||||
|
|
|
@ -183,10 +183,6 @@ static int of_platform_serial_probe(struct platform_device *ofdev)
|
|||
"auto-flow-control"))
|
||||
port8250.capabilities |= UART_CAP_AFE;
|
||||
|
||||
if (of_property_read_bool(ofdev->dev.of_node,
|
||||
"has-hw-flow-control"))
|
||||
port8250.port.flags |= UPF_HARD_FLOW;
|
||||
|
||||
ret = serial8250_register_8250_port(&port8250);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -175,12 +175,8 @@ static int uart_port_startup(struct tty_struct *tty, struct uart_state *state,
|
|||
if (tty->termios.c_cflag & CBAUD)
|
||||
uart_set_mctrl(uport, TIOCM_RTS | TIOCM_DTR);
|
||||
}
|
||||
/*
|
||||
* if hw support flow control without software intervention,
|
||||
* then skip the below check
|
||||
*/
|
||||
if (tty_port_cts_enabled(port) &&
|
||||
!(uport->flags & UPF_HARD_FLOW)) {
|
||||
|
||||
if (tty_port_cts_enabled(port)) {
|
||||
spin_lock_irq(&uport->lock);
|
||||
if (!(uport->ops->get_mctrl(uport) & TIOCM_CTS))
|
||||
tty->hw_stopped = 1;
|
||||
|
@ -2789,9 +2785,7 @@ void uart_handle_cts_change(struct uart_port *uport, unsigned int status)
|
|||
|
||||
uport->icount.cts++;
|
||||
|
||||
/* skip below code if the hw flow control is supported */
|
||||
if (tty_port_cts_enabled(port) &&
|
||||
!(uport->flags & UPF_HARD_FLOW)) {
|
||||
if (tty_port_cts_enabled(port)) {
|
||||
if (tty->hw_stopped) {
|
||||
if (status) {
|
||||
tty->hw_stopped = 0;
|
||||
|
|
Загрузка…
Ссылка в новой задаче