tty: serial: meson_uart: Add support for kernel debugger
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 1/2 tty: serial: meson_uart: Add support for kernel debugger
The kgdb invokes the poll_put_char and poll_get_char when communicating with the host. This patch implement the serial polling hooks for the meson_uart to be used for KGDB debugging over serial line.
Signed-off-by Julien Masson <[email protected]>
--- drivers/tty/serial/meson_uart.c | 46 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+)
drivers/tty/serial/meson_uart.c +46 -0
@@ -426,6 +426,48 @@ static void meson_uart_config_port(struct uart_port *port, int flags) } } +#ifdef CONFIG_CONSOLE_POLL +/* +* Console polling routines for writing and reading from the uart while +* in an interrupt or debug context (i.e. kgdb). +*/ + +static int meson_uart_poll_get_char (struct uart_port *port) +{ +u32 c; +unsigned long flags; + +spin_lock_irqsave (&port->lock, flags); + +if (readl (port->membase +AML_UART_STATUS ) &AML_UART_RX_EMPTY ) + c =NO_POLL_CHAR ; +else + c =readl (port->membase +AML_UART_RFIFO ); + +spin_unlock_irqrestore (&port->lock, flags); + +return c; +} + +static void meson_uart_poll_put_char (struct uart_port *port,unsigned char c) +{ +unsigned long flags; + +spin_lock_irqsave (&port->lock, flags); + +while (!(readl (port->membase +AML_UART_STATUS ) &AML_UART_TX_EMPTY )) +cpu_relax (); + +writel (c, port->membase +AML_UART_WFIFO ); + +while (!(readl (port->membase +AML_UART_STATUS ) &AML_UART_TX_EMPTY )) +cpu_relax (); + +spin_unlock_irqrestore (&port->lock, flags); +} + +#endif /* CONFIG_CONSOLE_POLL */ +static const struct uart_ops meson_uart_ops = { .set_mctrl = meson_uart_set_mctrl, .get_mctrl = meson_uart_get_mctrl,
@@ -441,6 +483,10 @@ static const struct uart_ops meson_uart_ops = { .request_port = meson_uart_request_port, .release_port = meson_uart_release_port, .verify_port = meson_uart_verify_port, +#ifdef CONFIG_CONSOLE_POLL + .poll_get_char = meson_uart_poll_get_char, + .poll_put_char = meson_uart_poll_put_char, +#endif };#ifdef CONFIG_SERIAL_MESON_CONSOLE
Signature · 1 line
2.7.4