linux-serial.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] serial: amba-pl011: Support earlycon_kgdboc
@ 2020-04-24  8:13 Sumit Garg
  2020-04-24 18:17 ` Doug Anderson
  2020-04-28 13:54 ` Daniel Thompson
  0 siblings, 2 replies; 3+ messages in thread
From: Sumit Garg @ 2020-04-24  8:13 UTC (permalink / raw)
  To: dianders, linux-serial
  Cc: linux, gregkh, jslaby, daniel.thompson, jason.wessel,
	kgdb-bugreport, linux-kernel, Sumit Garg

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@linaro.org>
---

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


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] serial: amba-pl011: Support earlycon_kgdboc
  2020-04-24  8:13 [PATCH] serial: amba-pl011: Support earlycon_kgdboc Sumit Garg
@ 2020-04-24 18:17 ` Doug Anderson
  2020-04-28 13:54 ` Daniel Thompson
  1 sibling, 0 replies; 3+ messages in thread
From: Doug Anderson @ 2020-04-24 18:17 UTC (permalink / raw)
  To: Sumit Garg
  Cc: linux-serial, Russell King - ARM Linux, Greg Kroah-Hartman,
	Jiri Slaby, Daniel Thompson, Jason Wessel, kgdb-bugreport, LKML

Hi,

On Fri, Apr 24, 2020 at 1:15 AM Sumit Garg <sumit.garg@linaro.org> 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@linaro.org>
> ---
>
> 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(+)

This is the first time I've ever looked at the code for this
particular serial driver, but with that caveat your patch looks right
to me.  Specifically:

* Code, naming, and style of your new read routine match the existing
write routine used for earlycon.

* The read routine looks to read the same registers / works the same
as the main "polling" read routine, pl011_get_poll_char().

Thus:

Reviewed-by: Douglas Anderson <dianders@chromium.org>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] serial: amba-pl011: Support earlycon_kgdboc
  2020-04-24  8:13 [PATCH] serial: amba-pl011: Support earlycon_kgdboc Sumit Garg
  2020-04-24 18:17 ` Doug Anderson
@ 2020-04-28 13:54 ` Daniel Thompson
  1 sibling, 0 replies; 3+ messages in thread
From: Daniel Thompson @ 2020-04-28 13:54 UTC (permalink / raw)
  To: Sumit Garg
  Cc: dianders, linux-serial, linux, gregkh, jslaby, jason.wessel,
	kgdb-bugreport, linux-kernel

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@linaro.org>

Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>


> ---
> 
> 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
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-04-28 13:55 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-24  8:13 [PATCH] serial: amba-pl011: Support earlycon_kgdboc Sumit Garg
2020-04-24 18:17 ` Doug Anderson
2020-04-28 13:54 ` Daniel Thompson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).