diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2010-07-02 14:21:42 -0700 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-07-02 14:21:42 -0700 |
| commit | f3a20b368ebed936771e3516c240a77eed6bb918 (patch) | |
| tree | a0555d279949ec8245b077a001a85919f8b78068 /tty.current | |
| parent | c23087dad116bf3266e64605046361d985e7f493 (diff) | |
| download | patches-f3a20b368ebed936771e3516c240a77eed6bb918.tar.gz | |
patches merged with Linus now removed
Diffstat (limited to 'tty.current')
| -rw-r--r-- | tty.current/serial-cpm_uart-implement-the-cpm_uart_early_write-function-for-console-poll.patch | 197 |
1 files changed, 0 insertions, 197 deletions
diff --git a/tty.current/serial-cpm_uart-implement-the-cpm_uart_early_write-function-for-console-poll.patch b/tty.current/serial-cpm_uart-implement-the-cpm_uart_early_write-function-for-console-poll.patch deleted file mode 100644 index 161436af0d8f84..00000000000000 --- a/tty.current/serial-cpm_uart-implement-the-cpm_uart_early_write-function-for-console-poll.patch +++ /dev/null @@ -1,197 +0,0 @@ -From dongdong.deng@windriver.com Fri Jun 18 08:48:14 2010 -From: Dongdong Deng <dongdong.deng@windriver.com> -Date: Thu, 17 Jun 2010 11:13:40 +0800 -Subject: serial: cpm_uart: implement the cpm_uart_early_write() function for console poll -To: jason.wessel@windriver.com, gregkh@suse.de, galak@kernel.crashing.org, bruce.ashfield@windriver.com, dongdong.deng@windriver.com -Cc: linux-kernel@vger.kernel.org -Message-ID: <1276744420-7845-1-git-send-email-dongdong.deng@windriver.com> - - -The cpm_uart_early_write() function which was used for console poll -isn't implemented in the cpm uart driver. - -Implementing this function both fixes the build when CONFIG_CONSOLE_POLL -is set and allows kgdboc to work via the cpm uart. - -Signed-off-by: Dongdong Deng <dongdong.deng@windriver.com> -Reviewed-by: Bruce Ashfield <bruce.ashfield@windriver.com> -Cc: stable <stable@kernel.org> -Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> - ---- - drivers/serial/cpm_uart/cpm_uart_core.c | 143 +++++++++++++++++--------------- - 1 file changed, 79 insertions(+), 64 deletions(-) - ---- a/drivers/serial/cpm_uart/cpm_uart_core.c -+++ b/drivers/serial/cpm_uart/cpm_uart_core.c -@@ -930,6 +930,83 @@ static void cpm_uart_config_port(struct - } - } - -+#if defined(CONFIG_CONSOLE_POLL) || defined(CONFIG_SERIAL_CPM_CONSOLE) -+/* -+ * Write a string to the serial port -+ * Note that this is called with interrupts already disabled -+ */ -+static void cpm_uart_early_write(struct uart_cpm_port *pinfo, -+ const char *string, u_int count) -+{ -+ unsigned int i; -+ cbd_t __iomem *bdp, *bdbase; -+ unsigned char *cpm_outp_addr; -+ -+ /* Get the address of the host memory buffer. -+ */ -+ bdp = pinfo->tx_cur; -+ bdbase = pinfo->tx_bd_base; -+ -+ /* -+ * Now, do each character. This is not as bad as it looks -+ * since this is a holding FIFO and not a transmitting FIFO. -+ * We could add the complexity of filling the entire transmit -+ * buffer, but we would just wait longer between accesses...... -+ */ -+ for (i = 0; i < count; i++, string++) { -+ /* Wait for transmitter fifo to empty. -+ * Ready indicates output is ready, and xmt is doing -+ * that, not that it is ready for us to send. -+ */ -+ while ((in_be16(&bdp->cbd_sc) & BD_SC_READY) != 0) -+ ; -+ -+ /* Send the character out. -+ * If the buffer address is in the CPM DPRAM, don't -+ * convert it. -+ */ -+ cpm_outp_addr = cpm2cpu_addr(in_be32(&bdp->cbd_bufaddr), -+ pinfo); -+ *cpm_outp_addr = *string; -+ -+ out_be16(&bdp->cbd_datlen, 1); -+ setbits16(&bdp->cbd_sc, BD_SC_READY); -+ -+ if (in_be16(&bdp->cbd_sc) & BD_SC_WRAP) -+ bdp = bdbase; -+ else -+ bdp++; -+ -+ /* if a LF, also do CR... */ -+ if (*string == 10) { -+ while ((in_be16(&bdp->cbd_sc) & BD_SC_READY) != 0) -+ ; -+ -+ cpm_outp_addr = cpm2cpu_addr(in_be32(&bdp->cbd_bufaddr), -+ pinfo); -+ *cpm_outp_addr = 13; -+ -+ out_be16(&bdp->cbd_datlen, 1); -+ setbits16(&bdp->cbd_sc, BD_SC_READY); -+ -+ if (in_be16(&bdp->cbd_sc) & BD_SC_WRAP) -+ bdp = bdbase; -+ else -+ bdp++; -+ } -+ } -+ -+ /* -+ * Finally, Wait for transmitter & holding register to empty -+ * and restore the IER -+ */ -+ while ((in_be16(&bdp->cbd_sc) & BD_SC_READY) != 0) -+ ; -+ -+ pinfo->tx_cur = bdp; -+} -+#endif -+ - #ifdef CONFIG_CONSOLE_POLL - /* Serial polling routines for writing and reading from the uart while - * in an interrupt or debug context. -@@ -999,7 +1076,7 @@ static void cpm_put_poll_char(struct uar - static char ch[2]; - - ch[0] = (char)c; -- cpm_uart_early_write(pinfo->port.line, ch, 1); -+ cpm_uart_early_write(pinfo, ch, 1); - } - #endif /* CONFIG_CONSOLE_POLL */ - -@@ -1130,9 +1207,6 @@ static void cpm_uart_console_write(struc - u_int count) - { - struct uart_cpm_port *pinfo = &cpm_uart_ports[co->index]; -- unsigned int i; -- cbd_t __iomem *bdp, *bdbase; -- unsigned char *cp; - unsigned long flags; - int nolock = oops_in_progress; - -@@ -1142,66 +1216,7 @@ static void cpm_uart_console_write(struc - spin_lock_irqsave(&pinfo->port.lock, flags); - } - -- /* Get the address of the host memory buffer. -- */ -- bdp = pinfo->tx_cur; -- bdbase = pinfo->tx_bd_base; -- -- /* -- * Now, do each character. This is not as bad as it looks -- * since this is a holding FIFO and not a transmitting FIFO. -- * We could add the complexity of filling the entire transmit -- * buffer, but we would just wait longer between accesses...... -- */ -- for (i = 0; i < count; i++, s++) { -- /* Wait for transmitter fifo to empty. -- * Ready indicates output is ready, and xmt is doing -- * that, not that it is ready for us to send. -- */ -- while ((in_be16(&bdp->cbd_sc) & BD_SC_READY) != 0) -- ; -- -- /* Send the character out. -- * If the buffer address is in the CPM DPRAM, don't -- * convert it. -- */ -- cp = cpm2cpu_addr(in_be32(&bdp->cbd_bufaddr), pinfo); -- *cp = *s; -- -- out_be16(&bdp->cbd_datlen, 1); -- setbits16(&bdp->cbd_sc, BD_SC_READY); -- -- if (in_be16(&bdp->cbd_sc) & BD_SC_WRAP) -- bdp = bdbase; -- else -- bdp++; -- -- /* if a LF, also do CR... */ -- if (*s == 10) { -- while ((in_be16(&bdp->cbd_sc) & BD_SC_READY) != 0) -- ; -- -- cp = cpm2cpu_addr(in_be32(&bdp->cbd_bufaddr), pinfo); -- *cp = 13; -- -- out_be16(&bdp->cbd_datlen, 1); -- setbits16(&bdp->cbd_sc, BD_SC_READY); -- -- if (in_be16(&bdp->cbd_sc) & BD_SC_WRAP) -- bdp = bdbase; -- else -- bdp++; -- } -- } -- -- /* -- * Finally, Wait for transmitter & holding register to empty -- * and restore the IER -- */ -- while ((in_be16(&bdp->cbd_sc) & BD_SC_READY) != 0) -- ; -- -- pinfo->tx_cur = bdp; -+ cpm_uart_early_write(pinfo, s, count); - - if (unlikely(nolock)) { - local_irq_restore(flags); |
