|
@@ -303,7 +303,7 @@ static void pl011_dma_probe_initcall(struct device *dev, struct uart_amba_port *
|
|
|
|
|
|
/* Optionally make use of an RX channel as well */
|
|
|
chan = dma_request_slave_channel(dev, "rx");
|
|
|
-
|
|
|
+
|
|
|
if (!chan && plat->dma_rx_param) {
|
|
|
chan = dma_request_channel(mask, plat->dma_filter, plat->dma_rx_param);
|
|
|
|
|
@@ -2045,6 +2045,34 @@ static struct console amba_console = {
|
|
|
};
|
|
|
|
|
|
#define AMBA_CONSOLE (&amba_console)
|
|
|
+
|
|
|
+static void pl011_putc(struct uart_port *port, int c)
|
|
|
+{
|
|
|
+ while (readl(port->membase + UART01x_FR) & UART01x_FR_TXFF)
|
|
|
+ ;
|
|
|
+ writeb(c, port->membase + UART01x_DR);
|
|
|
+ while (readl(port->membase + UART01x_FR) & UART01x_FR_BUSY)
|
|
|
+ ;
|
|
|
+}
|
|
|
+
|
|
|
+static void pl011_early_write(struct console *con, const char *s, unsigned n)
|
|
|
+{
|
|
|
+ struct earlycon_device *dev = con->data;
|
|
|
+
|
|
|
+ uart_console_write(&dev->port, s, n, pl011_putc);
|
|
|
+}
|
|
|
+
|
|
|
+static int __init pl011_early_console_setup(struct earlycon_device *device,
|
|
|
+ const char *opt)
|
|
|
+{
|
|
|
+ if (!device->port.membase)
|
|
|
+ return -ENODEV;
|
|
|
+
|
|
|
+ device->con->write = pl011_early_write;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+EARLYCON_DECLARE(pl011, pl011_early_console_setup);
|
|
|
+
|
|
|
#else
|
|
|
#define AMBA_CONSOLE NULL
|
|
|
#endif
|