Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a6eec92e authored by Peter Hurley's avatar Peter Hurley Committed by Greg Kroah-Hartman
Browse files

Revert "serial: uart: add hw flow control support configuration"



This reverts commit 06aa82e4.
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: default avatarPeter Hurley <peter@hurleysoftware.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 95562e7f
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -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:

+2 −4
Original line number Diff line number Diff line
@@ -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;
+0 −4
Original line number Diff line number Diff line
@@ -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;
	}
+3 −9
Original line number Diff line number Diff line
@@ -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;