linux-serial.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] Blackfin UART driver updates
@ 2010-10-27  8:16 Mike Frysinger
  2010-10-27  8:16 ` [PATCH 1/4] serial: bfin_5xx: always include DMA headers Mike Frysinger
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Mike Frysinger @ 2010-10-27  8:16 UTC (permalink / raw)
  To: linux-serial, Greg Kroah-Hartman, Alan Cox; +Cc: uclinux-dist-devel

These are fine for 2.6.37 or 2.6.38.

Sonic Zhang (4):
  serial: bfin_5xx: always include DMA headers
  serial: bfin_5xx: remove redundant SSYNC to improve TX speed
  serial: bfin_5xx: disable CON_PRINTBUFFER for consoles
  serial: bfin_5xx: grab port lock before making port termios changes

 drivers/serial/bfin_5xx.c |   25 +++++++++++++++++++------
 1 files changed, 19 insertions(+), 6 deletions(-)

-- 
1.7.3.2


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/4] serial: bfin_5xx: always include DMA headers
  2010-10-27  8:16 [PATCH 0/4] Blackfin UART driver updates Mike Frysinger
@ 2010-10-27  8:16 ` Mike Frysinger
  2010-10-27  8:16 ` [PATCH 2/4] serial: bfin_5xx: remove redundant SSYNC to improve TX speed Mike Frysinger
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Mike Frysinger @ 2010-10-27  8:16 UTC (permalink / raw)
  To: linux-serial, Greg Kroah-Hartman, Alan Cox
  Cc: uclinux-dist-devel, Sonic Zhang

From: Sonic Zhang <sonic.zhang@analog.com>

On Blackfin systems, peripherals that have optional DMA support always
route their interrupts through the corresponding DMA channel -- even
when DMA is not being used.  So in PIO mode, we still need to request
the DMA channel (so interrupts are delivered) which means we need to
always include the DMA header for the DMA defines/functions.

Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
 drivers/serial/bfin_5xx.c |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index a9eff2b..9ea8265 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -23,6 +23,7 @@
 #include <linux/tty.h>
 #include <linux/tty_flip.h>
 #include <linux/serial_core.h>
+#include <linux/dma-mapping.h>
 
 #if defined(CONFIG_KGDB_SERIAL_CONSOLE) || \
 	defined(CONFIG_KGDB_SERIAL_CONSOLE_MODULE)
@@ -33,12 +34,10 @@
 #include <asm/gpio.h>
 #include <mach/bfin_serial_5xx.h>
 
-#ifdef CONFIG_SERIAL_BFIN_DMA
-#include <linux/dma-mapping.h>
+#include <asm/dma.h>
 #include <asm/io.h>
 #include <asm/irq.h>
 #include <asm/cacheflush.h>
-#endif
 
 #ifdef CONFIG_SERIAL_BFIN_MODULE
 # undef CONFIG_EARLY_PRINTK
@@ -688,6 +687,13 @@ static int bfin_serial_startup(struct uart_port *port)
 
 # ifdef CONFIG_BF54x
 	{
+		/*
+		 * UART2 and UART3 on BF548 share interrupt PINs and DMA
+		 * controllers with SPORT2 and SPORT3. UART rx and tx
+		 * interrupts are generated in PIO mode only when configure
+		 * their peripheral mapping registers properly, which means
+		 * request corresponding DMA channels in PIO mode as well.
+		 */
 		unsigned uart_dma_ch_rx, uart_dma_ch_tx;
 
 		switch (uart->port.irq) {
-- 
1.7.3.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/4] serial: bfin_5xx: remove redundant SSYNC to improve TX speed
  2010-10-27  8:16 [PATCH 0/4] Blackfin UART driver updates Mike Frysinger
  2010-10-27  8:16 ` [PATCH 1/4] serial: bfin_5xx: always include DMA headers Mike Frysinger
@ 2010-10-27  8:16 ` Mike Frysinger
  2010-10-27  8:16 ` [PATCH 3/4] serial: bfin_5xx: disable CON_PRINTBUFFER for consoles Mike Frysinger
  2010-10-27  8:16 ` [PATCH 4/4] serial: bfin_5xx: grab port lock before making port termios changes Mike Frysinger
  3 siblings, 0 replies; 5+ messages in thread
From: Mike Frysinger @ 2010-10-27  8:16 UTC (permalink / raw)
  To: linux-serial, Greg Kroah-Hartman, Alan Cox
  Cc: uclinux-dist-devel, Sonic Zhang

From: Sonic Zhang <sonic.zhang@analog.com>

We don't need to force a SSYNC here as the LSR register will already
be updated by the time we get back to reading it.  This speeds up TX
throughput and lowers general system overhead (since SSYNC is system
wide, not peripheral-specific).

Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
 drivers/serial/bfin_5xx.c |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index 9ea8265..01315a2 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -359,7 +359,6 @@ static void bfin_serial_tx_chars(struct bfin_serial_port *uart)
 		UART_PUT_CHAR(uart, xmit->buf[xmit->tail]);
 		xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
 		uart->port.icount.tx++;
-		SSYNC();
 	}
 
 	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
-- 
1.7.3.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/4] serial: bfin_5xx: disable CON_PRINTBUFFER for consoles
  2010-10-27  8:16 [PATCH 0/4] Blackfin UART driver updates Mike Frysinger
  2010-10-27  8:16 ` [PATCH 1/4] serial: bfin_5xx: always include DMA headers Mike Frysinger
  2010-10-27  8:16 ` [PATCH 2/4] serial: bfin_5xx: remove redundant SSYNC to improve TX speed Mike Frysinger
@ 2010-10-27  8:16 ` Mike Frysinger
  2010-10-27  8:16 ` [PATCH 4/4] serial: bfin_5xx: grab port lock before making port termios changes Mike Frysinger
  3 siblings, 0 replies; 5+ messages in thread
From: Mike Frysinger @ 2010-10-27  8:16 UTC (permalink / raw)
  To: linux-serial, Greg Kroah-Hartman, Alan Cox
  Cc: uclinux-dist-devel, Sonic Zhang

From: Sonic Zhang <sonic.zhang@analog.com>

If we are using early serial, don't let the normal console rewind
the log buffer, since that causes things to be printed multiple times.

Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
 drivers/serial/bfin_5xx.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index 01315a2..c6774de 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -1326,6 +1326,14 @@ struct console __init *bfin_earlyserial_init(unsigned int port,
 	struct bfin_serial_port *uart;
 	struct ktermios t;
 
+#ifdef CONFIG_SERIAL_BFIN_CONSOLE
+	/*
+	 * If we are using early serial, don't let the normal console rewind
+	 * log buffer, since that causes things to be printed multiple times
+	 */
+	bfin_serial_console.flags &= ~CON_PRINTBUFFER;
+#endif
+
 	if (port == -1 || port >= nr_active_ports)
 		port = 0;
 	bfin_serial_init_ports();
-- 
1.7.3.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 4/4] serial: bfin_5xx: grab port lock before making port termios changes
  2010-10-27  8:16 [PATCH 0/4] Blackfin UART driver updates Mike Frysinger
                   ` (2 preceding siblings ...)
  2010-10-27  8:16 ` [PATCH 3/4] serial: bfin_5xx: disable CON_PRINTBUFFER for consoles Mike Frysinger
@ 2010-10-27  8:16 ` Mike Frysinger
  3 siblings, 0 replies; 5+ messages in thread
From: Mike Frysinger @ 2010-10-27  8:16 UTC (permalink / raw)
  To: linux-serial, Greg Kroah-Hartman, Alan Cox
  Cc: uclinux-dist-devel, Sonic Zhang

From: Sonic Zhang <sonic.zhang@analog.com>

The port lock exists to protect these resources, so we need to grab it
before making changes.

Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
---
 drivers/serial/bfin_5xx.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index c6774de..80f15ca 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -851,6 +851,8 @@ bfin_serial_set_termios(struct uart_port *port, struct ktermios *termios,
 	if (termios->c_cflag & CMSPAR)
 		lcr |= STP;
 
+	spin_lock_irqsave(&uart->port.lock, flags);
+
 	port->read_status_mask = OE;
 	if (termios->c_iflag & INPCK)
 		port->read_status_mask |= (FE | PE);
@@ -880,8 +882,6 @@ bfin_serial_set_termios(struct uart_port *port, struct ktermios *termios,
 	if (termios->c_line != N_IRDA)
 		quot -= ANOMALY_05000230;
 
-	spin_lock_irqsave(&uart->port.lock, flags);
-
 	UART_SET_ANOMALY_THRESHOLD(uart, USEC_PER_SEC / baud * 15);
 
 	/* Disable UART */
-- 
1.7.3.2


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2010-10-27  8:16 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-10-27  8:16 [PATCH 0/4] Blackfin UART driver updates Mike Frysinger
2010-10-27  8:16 ` [PATCH 1/4] serial: bfin_5xx: always include DMA headers Mike Frysinger
2010-10-27  8:16 ` [PATCH 2/4] serial: bfin_5xx: remove redundant SSYNC to improve TX speed Mike Frysinger
2010-10-27  8:16 ` [PATCH 3/4] serial: bfin_5xx: disable CON_PRINTBUFFER for consoles Mike Frysinger
2010-10-27  8:16 ` [PATCH 4/4] serial: bfin_5xx: grab port lock before making port termios changes Mike Frysinger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).