On Fri, Apr 24, 2020 at 01:43:51PM +0530, Sumit Garg wrote: > Implement the read() function in the early console driver. With > recently added earlycon_kgdboc feature, this allows you to use kgdb > to debug fairly early into the system boot. > > We only bother implementing this if polling is enabled since kgdb can't > be enabled without that. > > Signed-off-by: Sumit Garg <sumit.garg@xxxxxxxxxx> Reviewed-by: Daniel Thompson <daniel.thompson@xxxxxxxxxx> > --- > > Depends on kgdb patch series: https://lkml.org/lkml/2020/4/21/1179 > > drivers/tty/serial/amba-pl011.c | 32 ++++++++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c > index 2296bb0..c010f63 100644 > --- a/drivers/tty/serial/amba-pl011.c > +++ b/drivers/tty/serial/amba-pl011.c > @@ -2435,6 +2435,37 @@ static void pl011_early_write(struct console *con, const char *s, unsigned n) > uart_console_write(&dev->port, s, n, pl011_putc); > } > > +#ifdef CONFIG_CONSOLE_POLL > +static int pl011_getc(struct uart_port *port) > +{ > + if (readl(port->membase + UART01x_FR) & UART01x_FR_RXFE) > + return NO_POLL_CHAR; > + > + if (port->iotype == UPIO_MEM32) > + return readl(port->membase + UART01x_DR); > + else > + return readb(port->membase + UART01x_DR); > +} > + > +static int pl011_early_read(struct console *con, char *s, unsigned int n) > +{ > + struct earlycon_device *dev = con->data; > + int ch, num_read = 0; > + > + while (num_read < n) { > + ch = pl011_getc(&dev->port); > + if (ch == NO_POLL_CHAR) > + break; > + > + s[num_read++] = ch; > + } > + > + return num_read; > +} > +#else > +#define pl011_early_read NULL > +#endif > + > /* > * On non-ACPI systems, earlycon is enabled by specifying > * "earlycon=pl011,<address>" on the kernel command line. > @@ -2454,6 +2485,7 @@ static int __init pl011_early_console_setup(struct earlycon_device *device, > return -ENODEV; > > device->con->write = pl011_early_write; > + device->con->read = pl011_early_read; > > return 0; > } > -- > 2.7.4 >