Message ID | e4471bf81089252470efb3eed735d71a5b32adbd.1608716197.git.christophe.leroy@csgroup.eu (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | tty: serial: cpm_uart: Add udbg support for enabling xmon | expand |
Context | Check | Description |
---|---|---|
snowpatch_ozlabs/apply_patch | warning | Failed to apply on branch powerpc/merge (409655c00c9ca27e768b09af3bae5bd675fbd994) |
snowpatch_ozlabs/apply_patch | warning | Failed to apply on branch linus/master (614cb5894306cfa2c7d9b6168182876ff5948735) |
snowpatch_ozlabs/apply_patch | warning | Failed to apply on branch powerpc/next (8a5be36b9303ae167468d4f5e1b3c090b9981396) |
snowpatch_ozlabs/apply_patch | warning | Failed to apply on branch powerpc/fixes (9c7422b92cb27369653c371ad9c44a502e5eea8f) |
snowpatch_ozlabs/apply_patch | warning | Failed to apply on branch linux-next (d7a03a44a5e93f39ece70ec75d25c6088caa0fdb) |
snowpatch_ozlabs/apply_patch | fail | Failed to apply to any branch |
Le 23/12/2020 à 10:38, Christophe Leroy a écrit : > In order to use xmon with powerpc 8xx, the serial driver > must provide udbg_putc() and udpb_getc(). > > Provide them via cpm_put_poll_char() and cpm_get_poll_char(). > > This requires CONFIG_CONSOLE_POLL. > > Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> This patch has been merged in tty-next, it is visible in linux-next Christophe > --- > drivers/tty/serial/cpm_uart/cpm_uart_core.c | 40 ++++++++++++++++++++- > 1 file changed, 39 insertions(+), 1 deletion(-) > > diff --git a/drivers/tty/serial/cpm_uart/cpm_uart_core.c b/drivers/tty/serial/cpm_uart/cpm_uart_core.c > index ba14ec5b9bc4..2920b9b602b3 100644 > --- a/drivers/tty/serial/cpm_uart/cpm_uart_core.c > +++ b/drivers/tty/serial/cpm_uart/cpm_uart_core.c > @@ -1145,6 +1145,32 @@ static void cpm_put_poll_char(struct uart_port *port, > ch[0] = (char)c; > cpm_uart_early_write(pinfo, ch, 1, false); > } > + > +static struct uart_port *udbg_port; > + > +static void udbg_cpm_putc(char c) > +{ > + if (c == '\n') > + cpm_put_poll_char(udbg_port, '\r'); > + cpm_put_poll_char(udbg_port, c); > +} > + > +static int udbg_cpm_getc_poll(void) > +{ > + int c = cpm_get_poll_char(udbg_port); > + > + return c == NO_POLL_CHAR ? -1 : c; > +} > + > +static int udbg_cpm_getc(void) > +{ > + int c; > + > + while ((c = udbg_cpm_getc_poll()) == -1) > + cpu_relax(); > + return c; > +} > + > #endif /* CONFIG_CONSOLE_POLL */ > > static const struct uart_ops cpm_uart_pops = { > @@ -1251,7 +1277,10 @@ static int cpm_uart_init_port(struct device_node *np, > pinfo->gpios[i] = NULL; > > #ifdef CONFIG_PPC_EARLY_DEBUG_CPM > - udbg_putc = NULL; > +#ifdef CONFIG_CONSOLE_POLL > + if (!udbg_port) > +#endif > + udbg_putc = NULL; > #endif > > return cpm_uart_request_port(&pinfo->port); > @@ -1370,6 +1399,15 @@ static int __init cpm_uart_console_setup(struct console *co, char *options) > uart_set_options(port, co, baud, parity, bits, flow); > cpm_line_cr_cmd(pinfo, CPM_CR_RESTART_TX); > > +#ifdef CONFIG_CONSOLE_POLL > + if (!udbg_port) { > + udbg_port = &pinfo->port; > + udbg_putc = udbg_cpm_putc; > + udbg_getc = udbg_cpm_getc; > + udbg_getc_poll = udbg_cpm_getc_poll; > + } > +#endif > + > return 0; > } > >
diff --git a/drivers/tty/serial/cpm_uart/cpm_uart_core.c b/drivers/tty/serial/cpm_uart/cpm_uart_core.c index ba14ec5b9bc4..2920b9b602b3 100644 --- a/drivers/tty/serial/cpm_uart/cpm_uart_core.c +++ b/drivers/tty/serial/cpm_uart/cpm_uart_core.c @@ -1145,6 +1145,32 @@ static void cpm_put_poll_char(struct uart_port *port, ch[0] = (char)c; cpm_uart_early_write(pinfo, ch, 1, false); } + +static struct uart_port *udbg_port; + +static void udbg_cpm_putc(char c) +{ + if (c == '\n') + cpm_put_poll_char(udbg_port, '\r'); + cpm_put_poll_char(udbg_port, c); +} + +static int udbg_cpm_getc_poll(void) +{ + int c = cpm_get_poll_char(udbg_port); + + return c == NO_POLL_CHAR ? -1 : c; +} + +static int udbg_cpm_getc(void) +{ + int c; + + while ((c = udbg_cpm_getc_poll()) == -1) + cpu_relax(); + return c; +} + #endif /* CONFIG_CONSOLE_POLL */ static const struct uart_ops cpm_uart_pops = { @@ -1251,7 +1277,10 @@ static int cpm_uart_init_port(struct device_node *np, pinfo->gpios[i] = NULL; #ifdef CONFIG_PPC_EARLY_DEBUG_CPM - udbg_putc = NULL; +#ifdef CONFIG_CONSOLE_POLL + if (!udbg_port) +#endif + udbg_putc = NULL; #endif return cpm_uart_request_port(&pinfo->port); @@ -1370,6 +1399,15 @@ static int __init cpm_uart_console_setup(struct console *co, char *options) uart_set_options(port, co, baud, parity, bits, flow); cpm_line_cr_cmd(pinfo, CPM_CR_RESTART_TX); +#ifdef CONFIG_CONSOLE_POLL + if (!udbg_port) { + udbg_port = &pinfo->port; + udbg_putc = udbg_cpm_putc; + udbg_getc = udbg_cpm_getc; + udbg_getc_poll = udbg_cpm_getc_poll; + } +#endif + return 0; }
In order to use xmon with powerpc 8xx, the serial driver must provide udbg_putc() and udpb_getc(). Provide them via cpm_put_poll_char() and cpm_get_poll_char(). This requires CONFIG_CONSOLE_POLL. Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> --- drivers/tty/serial/cpm_uart/cpm_uart_core.c | 40 ++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-)