Revert "serial: uart: add hw flow control support configuration"
authorPeter Hurley <peter@hurleysoftware.com>
Tue, 2 Sep 2014 21:39:10 +0000 (17:39 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 8 Sep 2014 23:21:35 +0000 (16:21 -0700)
This reverts commit 06aa82e498c144c7784a6f3d3b55458b272d6146.
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>
Documentation/devicetree/bindings/serial/of-serial.txt
drivers/tty/serial/8250/8250_core.c
drivers/tty/serial/of_serial.c
drivers/tty/serial/serial_core.c

index 77054772a8f4fe46cb57ba461544e8de606d337c..1928a3e83cd0413262de68c036242cb0b92b08fa 100644 (file)
@@ -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:
 
index b28ed1beb50f556f04b4f3f0b42b0301049cfc55..46c1f5fc44d3328759dbaeb63842e0fbe356bf66 100644 (file)
@@ -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;
index 68d4455f3cf9cd3bb82812423d34721c15818168..27981e2b943076d3f35f08fdb13a5a2b309fc633 100644 (file)
@@ -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;
        }
index 079f18d84b03746cf1f28b6e686b6757aa2912f2..2e57d5b6347dfad0e596ea6b73a7682c8939ddaa 100644 (file)
@@ -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;