Răsfoiți Sursa

serial: pl01x: drain PL01x FIFO before baudrate change

Not draining the FIFO and waiting for the UART to be non-busy
before changing baudrate results in crap characters on the
console, so let's wait for the FIFO to drain and the last
character to be clocked out before we do that.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Linus Walleij 13 ani în urmă
părinte
comite
96baa4c376
1 a modificat fișierele cu 10 adăugiri și 0 ștergeri
  1. 10 0
      drivers/serial/serial_pl01x.c

+ 10 - 0
drivers/serial/serial_pl01x.c

@@ -194,7 +194,17 @@ int serial_tstc (void)
 
 void serial_setbrg (void)
 {
+	struct pl01x_regs *regs = pl01x_get_regs(CONSOLE_PORT);
+
 	baudrate = gd->baudrate;
+	/*
+	 * Flush FIFO and wait for non-busy before changing baudrate to avoid
+	 * crap in console
+	 */
+	while (!(readl(&regs->fr) & UART_PL01x_FR_TXFE))
+		WATCHDOG_RESET();
+	while (readl(&regs->fr) & UART_PL01x_FR_BUSY)
+		WATCHDOG_RESET();
 	serial_init();
 }