2010-01-19 11:13:12

by Mike Frysinger

[permalink] [raw]
Subject: [PATCH 1/4] serial: bfin_5xx: remove useless gpio handling with hard flow control

From: Sonic Zhang <[email protected]>

For UARTs that have dedicated hardware flow control support, there will be
no gpios to request/free as they are part of the normal peripheral pins.

Signed-off-by: Sonic Zhang <[email protected]>
Signed-off-by: Mike Frysinger <[email protected]>
---
drivers/serial/bfin_5xx.c | 16 +---------------
1 files changed, 1 insertions(+), 15 deletions(-)

diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index 50abb7e..15843cc 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -746,15 +746,6 @@ static int bfin_serial_startup(struct uart_port *port)
Status interrupt.\n");
}

- if (uart->cts_pin >= 0) {
- gpio_request(uart->cts_pin, DRIVER_NAME);
- gpio_direction_output(uart->cts_pin, 1);
- }
- if (uart->rts_pin >= 0) {
- gpio_request(uart->rts_pin, DRIVER_NAME);
- gpio_direction_output(uart->rts_pin, 0);
- }
-
/* CTS RTS PINs are negative assertive. */
UART_PUT_MCR(uart, ACTS);
UART_SET_IER(uart, EDSSI);
@@ -801,10 +792,6 @@ static void bfin_serial_shutdown(struct uart_port *port)
gpio_free(uart->rts_pin);
#endif
#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
- if (uart->cts_pin >= 0)
- gpio_free(uart->cts_pin);
- if (uart->rts_pin >= 0)
- gpio_free(uart->rts_pin);
if (UART_GET_IER(uart) && EDSSI)
free_irq(uart->status_irq, uart);
#endif
@@ -1409,8 +1396,7 @@ static int bfin_serial_remove(struct platform_device *dev)
continue;
uart_remove_one_port(&bfin_serial_reg, &bfin_serial_ports[i].port);
bfin_serial_ports[i].port.dev = NULL;
-#if defined(CONFIG_SERIAL_BFIN_CTSRTS) || \
- defined(CONFIG_SERIAL_BFIN_HARD_CTSRTS)
+#if defined(CONFIG_SERIAL_BFIN_CTSRTS)
gpio_free(bfin_serial_ports[i].cts_pin);
gpio_free(bfin_serial_ports[i].rts_pin);
#endif
--
1.6.6


2010-01-19 11:13:14

by Mike Frysinger

[permalink] [raw]
Subject: [PATCH 2/4] serial: bfin_5xx: need to disable DMA TX interrupt too

From: Graf Yang <[email protected]>

If we don't disable the DMA TX channel, an inopportune timeout will
trigger the interrupt handler and may cause a dead lock with the spin_lock.

Signed-off-by: Graf Yang <[email protected]>
Signed-off-by: Mike Frysinger <[email protected]>
---
drivers/serial/bfin_5xx.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index 15843cc..b5a9b37 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -488,6 +488,7 @@ void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart)
{
int x_pos, pos;

+ dma_disable_irq(uart->tx_dma_channel);
dma_disable_irq(uart->rx_dma_channel);
spin_lock_bh(&uart->port.lock);

@@ -521,6 +522,7 @@ void bfin_serial_rx_dma_timeout(struct bfin_serial_port *uart)
}

spin_unlock_bh(&uart->port.lock);
+ dma_enable_irq(uart->tx_dma_channel);
dma_enable_irq(uart->rx_dma_channel);

mod_timer(&(uart->rx_dma_timer), jiffies + DMA_RX_FLUSH_JIFFIES);
--
1.6.6

2010-01-19 11:13:35

by Mike Frysinger

[permalink] [raw]
Subject: [PATCH 4/4] serial: bfin_5xx: pull in linux/io.h for ioremap prototypes

Signed-off-by: Mike Frysinger <[email protected]>
---
drivers/serial/bfin_5xx.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index 6b87955..fcf273e 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -14,6 +14,7 @@

#include <linux/module.h>
#include <linux/ioport.h>
+#include <linux/io.h>
#include <linux/init.h>
#include <linux/console.h>
#include <linux/sysrq.h>
--
1.6.6

2010-01-19 11:13:56

by Mike Frysinger

[permalink] [raw]
Subject: [PATCH 3/4] serial: bfin_5xx: kgdboc should accept gdb break only when it is active

From: Sonic Zhang <[email protected]>

If we always check for gdb breaks even when it isn't active, we get false
positives on normal code and the system panics.

URL: http://blackfin.uclinux.org/gf/tracker/5277
Signed-off-by: Sonic Zhang <[email protected]>
Signed-off-by: Mike Frysinger <[email protected]>
---
drivers/serial/bfin_5xx.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index b5a9b37..6b87955 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -237,7 +237,8 @@ static void bfin_serial_rx_chars(struct bfin_serial_port *uart)

#if defined(CONFIG_KGDB_SERIAL_CONSOLE) || \
defined(CONFIG_KGDB_SERIAL_CONSOLE_MODULE)
- if (kgdb_connected && kgdboc_port_line == uart->port.line)
+ if (kgdb_connected && kgdboc_port_line == uart->port.line
+ && kgdboc_break_enabled)
if (ch == 0x3) {/* Ctrl + C */
kgdb_breakpoint();
return;
--
1.6.6

2010-01-26 00:11:32

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH 3/4] serial: bfin_5xx: kgdboc should accept gdb break only when it is active

On Tue, 19 Jan 2010 06:13:12 -0500
Mike Frysinger <[email protected]> wrote:

> From: Sonic Zhang <[email protected]>
>
> If we always check for gdb breaks even when it isn't active, we get false
> positives on normal code and the system panics.
>
> URL: http://blackfin.uclinux.org/gf/tracker/5277
> Signed-off-by: Sonic Zhang <[email protected]>
> Signed-off-by: Mike Frysinger <[email protected]>
> ---
> drivers/serial/bfin_5xx.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
> index b5a9b37..6b87955 100644
> --- a/drivers/serial/bfin_5xx.c
> +++ b/drivers/serial/bfin_5xx.c
> @@ -237,7 +237,8 @@ static void bfin_serial_rx_chars(struct bfin_serial_port *uart)
>
> #if defined(CONFIG_KGDB_SERIAL_CONSOLE) || \
> defined(CONFIG_KGDB_SERIAL_CONSOLE_MODULE)
> - if (kgdb_connected && kgdboc_port_line == uart->port.line)
> + if (kgdb_connected && kgdboc_port_line == uart->port.line
> + && kgdboc_break_enabled)
> if (ch == 0x3) {/* Ctrl + C */
> kgdb_breakpoint();
> return;

I expect that we want

[PATCH 2/4] serial: bfin_5xx: need to disable DMA TX interrupt too
and
[PATCH 3/4] serial: bfin_5xx: kgdboc should accept gdb break only when it is active

in 2.6.33 and the other two in 2.6.34?

If so then should either of the above two also be backported into
-stable?

2010-01-26 01:58:29

by Mike Frysinger

[permalink] [raw]
Subject: Re: [PATCH 3/4] serial: bfin_5xx: kgdboc should accept gdb break only when it is active

On Mon, Jan 25, 2010 at 19:11, Andrew Morton wrote:
> I expect that we want
>
>        [PATCH 2/4] serial: bfin_5xx: need to disable DMA TX interrupt too
> and
>        [PATCH 3/4] serial: bfin_5xx: kgdboc should accept gdb break only when it is active
>
> in 2.6.33 and the other two in 2.6.34?
>
> If so then should either of the above two also be backported into
> -stable?

sounds OK to me, thanks
-mike