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: Christophe Leroy <christophe.leroy@csgroup.eu> Link: https://lore.kernel.org/r/e4471bf81089252470efb3eed735d71a5b32adbd.1608716197.git.christophe.leroy@csgroup.eu Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
345523fab8
commit
a60526097f
1 changed files with 39 additions and 1 deletions
|
@ -1107,6 +1107,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 = {
|
||||
|
@ -1237,6 +1263,9 @@ static int cpm_uart_init_port(struct device_node *np,
|
|||
}
|
||||
|
||||
#ifdef CONFIG_PPC_EARLY_DEBUG_CPM
|
||||
#ifdef CONFIG_CONSOLE_POLL
|
||||
if (!udbg_port)
|
||||
#endif
|
||||
udbg_putc = NULL;
|
||||
#endif
|
||||
|
||||
|
@ -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);
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue