This patch implements (or exposes) routines to poll the imx uarts. The KGDB drivers need these methods to be implemented or the ttymxc driver is not sufficient. The synthetic CONFIG_CONSOLE_POLL value activates these routines (or CONFIG_SERIAL_MXC_CONSOLE for the polled write). There is still no poll routines in -855-ge067785, which is the September 2010 Linux release from Freescale. Also not in Linux 2.6.36 drivers/serial/imx.c either.
$ git diff drivers/serial/mxc_uart.c diff --git a/drivers/serial/mxc_uart.c b/drivers/serial/mxc_uart.c index ae6d2e1..728b607 100644 --- a/drivers/serial/mxc_uart.c +++ b/drivers/serial/mxc_uart.c @@ -1551,6 +1551,28 @@ mxcuart_pm(struct uart_port *port, unsigned int state, unsigned int oldstate) clk_enable(umxc->clk); } +#ifdef CONFIG_CONSOLE_POLL +/* + * Read a character from the UART. + */ +static inline int mxcuart_console_read_char(struct uart_port *port) +{ + volatile unsigned int status; + int ch; + + do { + status = readl(port->membase + MXC_UARTUSR2); + } while ((status & MXC_UARTUSR2_RDR) == 0); + ch = readl(port->membase + MXC_UARTURXD); +/* Ignore parity errors, etc. */ +/* status = ch | UART_CREAD_BIT; */ + ch &= 0xff; + + return ch; +} +static void mxcuart_console_write_char(struct uart_port *port, char ch); +#endif + /*! * This structure contains the pointers to the control functions that are * invoked by the core serial driver to access the UART hardware. The @@ -1575,14 +1597,18 @@ static struct uart_ops mxc_ops = { .config_port = mxcuart_config_port, .verify_port = mxcuart_verify_port, .send_xchar = mxcuart_send_xchar, +#ifdef CONFIG_CONSOLE_POLL + .poll_put_char = mxcuart_console_write_char, + .poll_get_char = mxcuart_console_read_char, +#endif }; -#ifdef CONFIG_SERIAL_MXC_CONSOLE +#if defined(CONFIG_SERIAL_MXC_CONSOLE) || defined (CONFIG_CONSOLE_POLL) /* * Write out a character once the UART is ready */ -static inline void mxcuart_console_write_char(struct uart_port *port, char ch) +static void mxcuart_console_write_char(struct uart_port *port, char ch) { volatile unsigned int status; @@ -1592,6 +1618,10 @@ static inline void mxcuart_console_write_char(struct uart_port *port, char ch) writel(ch, port->membase + MXC_UARTUTXD); } +#endif + +#ifdef CONFIG_SERIAL_MXC_CONSOLE + /*! * This function is called to write the console messages through the UART port. *