Commit a6052609 authored by Christophe Leroy's avatar Christophe Leroy Committed by Greg Kroah-Hartman

tty: serial: cpm_uart: Add udbg support for enabling xmon

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: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Link: https://lore.kernel.org/r/e4471bf81089252470efb3eed735d71a5b32adbd.1608716197.git.christophe.leroy@csgroup.euSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 345523fa
...@@ -1107,6 +1107,32 @@ static void cpm_put_poll_char(struct uart_port *port, ...@@ -1107,6 +1107,32 @@ static void cpm_put_poll_char(struct uart_port *port,
ch[0] = (char)c; ch[0] = (char)c;
cpm_uart_early_write(pinfo, ch, 1, false); 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 */ #endif /* CONFIG_CONSOLE_POLL */
static const struct uart_ops cpm_uart_pops = { static const struct uart_ops cpm_uart_pops = {
...@@ -1237,7 +1263,10 @@ static int cpm_uart_init_port(struct device_node *np, ...@@ -1237,7 +1263,10 @@ static int cpm_uart_init_port(struct device_node *np,
} }
#ifdef CONFIG_PPC_EARLY_DEBUG_CPM #ifdef CONFIG_PPC_EARLY_DEBUG_CPM
udbg_putc = NULL; #ifdef CONFIG_CONSOLE_POLL
if (!udbg_port)
#endif
udbg_putc = NULL;
#endif #endif
return cpm_uart_request_port(&pinfo->port); return cpm_uart_request_port(&pinfo->port);
...@@ -1358,6 +1387,15 @@ static int __init cpm_uart_console_setup(struct console *co, char *options) ...@@ -1358,6 +1387,15 @@ static int __init cpm_uart_console_setup(struct console *co, char *options)
uart_set_options(port, co, baud, parity, bits, flow); uart_set_options(port, co, baud, parity, bits, flow);
cpm_line_cr_cmd(pinfo, CPM_CR_RESTART_TX); 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; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment