serial: mpc52xx: add delay after resetting transmitter to fix broken chars
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Thu, 24 Sep 2015 19:18:34 +0000 (21:18 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 4 Oct 2015 16:27:56 +0000 (17:27 +0100)
This fixes receiving broken characters on the console from an MPC5125
system when systemd comes up which repeatedly opens and shuts down the
console device.

Trial and error with the needed interval showed that 500 us are good
enough most of the time when using 38400 Bd, so I think 1 ms is a good
compromise between fixing the issue and not penalize faster setups too
much.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/mpc52xx_uart.c

index 41de374d9784384ece372732e972a3de7c52e84f..8c3e5131447027104f4497f177faec3e4df68ade 100644 (file)
@@ -1135,6 +1135,13 @@ mpc52xx_uart_startup(struct uart_port *port)
        psc_ops->command(port, MPC52xx_PSC_RST_RX);
        psc_ops->command(port, MPC52xx_PSC_RST_TX);
 
+       /*
+        * According to Freescale's support the RST_TX command can produce a
+        * spike on the TX pin. So they recommend to delay "for one character".
+        * One millisecond should be enough for everyone.
+        */
+       msleep(1);
+
        psc_ops->set_sicr(port, 0);     /* UART mode DCD ignored */
 
        psc_ops->fifo_init(port);