]> git.karo-electronics.de Git - linux-beck.git/commitdiff
serial: xuartps: Add some register initialisation to cdns_early_console_setup()
authorScott Telford <stelford@cadence.com>
Thu, 22 Sep 2016 15:58:16 +0000 (16:58 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 27 Sep 2016 10:54:41 +0000 (12:54 +0200)
Add initialisation of control register and baud rate to
cdns_early_console_setup(), required when running kernel standalone
without a boot loader. Baud rate is only initialised when specified in
earlycon command-line option, otherwise it is assumed this has been
set by a boot loader. Updated Documentation/kernel-parameters.txt
accordingly.

Signed-off-by: Scott Telford <stelford@cadence.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Documentation/kernel-parameters.txt
drivers/tty/serial/xilinx_uartps.c

index a4f4d693e2c1287d533c0bc05d9f292f9b529720..70b51f824a6015723f9f20ca40dd86b5f9df5b53 100644 (file)
@@ -1045,11 +1045,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
                        determined by the stdout-path property in device
                        tree's chosen node.
 
-               cdns,<addr>
-                       Start an early, polled-mode console on a cadence serial
-                       port at the specified address. The cadence serial port
-                       must already be setup and configured. Options are not
-                       yet supported.
+               cdns,<addr>[,options]
+                       Start an early, polled-mode console on a Cadence
+                       (xuartps) serial port at the specified address. Only
+                       supported option is baud rate. If baud rate is not
+                       specified, the serial port must already be setup and
+                       configured.
 
                uart[8250],io,<addr>[,options]
                uart[8250],mmio,<addr>[,options]
index 39f41bfd7c2217b685b47d0e218a07de4058bb74..f37edaa5ac7577ed77c944d68e1fed7f526674e9 100644 (file)
@@ -1165,9 +1165,34 @@ static void __init cdns_early_write(struct console *con, const char *s,
 static int __init cdns_early_console_setup(struct earlycon_device *device,
                                           const char *opt)
 {
-       if (!device->port.membase)
+       struct uart_port *port = &device->port;
+
+       if (!port->membase)
                return -ENODEV;
 
+       /* initialise control register */
+       writel(CDNS_UART_CR_TX_EN|CDNS_UART_CR_TXRST|CDNS_UART_CR_RXRST,
+              port->membase + CDNS_UART_CR);
+
+       /* only set baud if specified on command line - otherwise
+        * assume it has been initialized by a boot loader.
+        */
+       if (device->baud) {
+               u32 cd = 0, bdiv = 0;
+               u32 mr;
+               int div8;
+
+               cdns_uart_calc_baud_divs(port->uartclk, device->baud,
+                                        &bdiv, &cd, &div8);
+               mr = CDNS_UART_MR_PARITY_NONE;
+               if (div8)
+                       mr |= CDNS_UART_MR_CLKSEL;
+
+               writel(mr,   port->membase + CDNS_UART_MR);
+               writel(cd,   port->membase + CDNS_UART_BAUDGEN);
+               writel(bdiv, port->membase + CDNS_UART_BAUDDIV);
+       }
+
        device->con->write = cdns_early_write;
 
        return 0;