serial: xuartps: Add some register initialisation to cdns_early_console_setup()
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>
This commit is contained in:
parent
212d249b6a
commit
c41251b175
|
@ -1045,11 +1045,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
|
||||||
determined by the stdout-path property in device
|
determined by the stdout-path property in device
|
||||||
tree's chosen node.
|
tree's chosen node.
|
||||||
|
|
||||||
cdns,<addr>
|
cdns,<addr>[,options]
|
||||||
Start an early, polled-mode console on a cadence serial
|
Start an early, polled-mode console on a Cadence
|
||||||
port at the specified address. The cadence serial port
|
(xuartps) serial port at the specified address. Only
|
||||||
must already be setup and configured. Options are not
|
supported option is baud rate. If baud rate is not
|
||||||
yet supported.
|
specified, the serial port must already be setup and
|
||||||
|
configured.
|
||||||
|
|
||||||
uart[8250],io,<addr>[,options]
|
uart[8250],io,<addr>[,options]
|
||||||
uart[8250],mmio,<addr>[,options]
|
uart[8250],mmio,<addr>[,options]
|
||||||
|
|
|
@ -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,
|
static int __init cdns_early_console_setup(struct earlycon_device *device,
|
||||||
const char *opt)
|
const char *opt)
|
||||||
{
|
{
|
||||||
if (!device->port.membase)
|
struct uart_port *port = &device->port;
|
||||||
|
|
||||||
|
if (!port->membase)
|
||||||
return -ENODEV;
|
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;
|
device->con->write = cdns_early_write;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue