* [PATCH 0/8] Blackfin serial driver updates for 2.6.27
@ 2008-07-27 6:03 Bryan Wu
2008-07-27 6:04 ` [PATCH 1/8] Blackfin Serial Driver: use __initdata for data, not __init Bryan Wu
` (7 more replies)
0 siblings, 8 replies; 9+ messages in thread
From: Bryan Wu @ 2008-07-27 6:03 UTC (permalink / raw)
To: alan; +Cc: linux-kernel
Hi Alan,
These are bunch of Blackfin serial driver updates and fixing for 2.6.27.
Thanks a lot
-Bryan
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/8] Blackfin Serial Driver: use __initdata for data, not __init
2008-07-27 6:03 [PATCH 0/8] Blackfin serial driver updates for 2.6.27 Bryan Wu
@ 2008-07-27 6:04 ` Bryan Wu
2008-07-27 6:04 ` [PATCH 2/8] Blackfin Serial Driver: Fix bug - should suspend/resume/remove all uart ports Bryan Wu
` (6 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Bryan Wu @ 2008-07-27 6:04 UTC (permalink / raw)
To: alan; +Cc: linux-kernel, Mike Frysinger, Bryan Wu
From: Mike Frysinger <vapier.adi@gmail.com>
Signed-off-by: Mike Frysinger <vapier.adi@gmail.com>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
---
drivers/serial/bfin_5xx.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index fd9bb77..052ce73 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -1056,7 +1056,7 @@ static __init void early_serial_write(struct console *con, const char *s,
}
}
-static struct __init console bfin_early_serial_console = {
+static struct __initdata console bfin_early_serial_console = {
.name = "early_BFuart",
.write = early_serial_write,
.device = uart_console_device,
--
1.5.6
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/8] Blackfin Serial Driver: Fix bug - should suspend/resume/remove all uart ports.
2008-07-27 6:03 [PATCH 0/8] Blackfin serial driver updates for 2.6.27 Bryan Wu
2008-07-27 6:04 ` [PATCH 1/8] Blackfin Serial Driver: use __initdata for data, not __init Bryan Wu
@ 2008-07-27 6:04 ` Bryan Wu
2008-07-27 6:04 ` [PATCH 3/8] Blackfin Serial Driver: trim trailing whitespace -- no functional changes Bryan Wu
` (5 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Bryan Wu @ 2008-07-27 6:04 UTC (permalink / raw)
To: alan; +Cc: linux-kernel, Sonic Zhang, Bryan Wu
From: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
---
drivers/serial/bfin_5xx.c | 39 ++++++++++++++++++++++-----------------
1 files changed, 22 insertions(+), 17 deletions(-)
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index 052ce73..5e43530 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -1100,20 +1100,26 @@ static struct uart_driver bfin_serial_reg = {
static int bfin_serial_suspend(struct platform_device *dev, pm_message_t state)
{
- struct bfin_serial_port *uart = platform_get_drvdata(dev);
+ int i;
- if (uart)
- uart_suspend_port(&bfin_serial_reg, &uart->port);
+ for (i = 0; i < nr_ports; i++) {
+ if (bfin_serial_ports[i].port.dev != &dev->dev)
+ continue;
+ uart_suspend_port(&bfin_serial_reg, &bfin_serial_ports[i].port);
+ }
return 0;
}
static int bfin_serial_resume(struct platform_device *dev)
{
- struct bfin_serial_port *uart = platform_get_drvdata(dev);
+ int i;
- if (uart)
- uart_resume_port(&bfin_serial_reg, &uart->port);
+ for (i = 0; i < nr_ports; i++) {
+ if (bfin_serial_ports[i].port.dev != &dev->dev)
+ continue;
+ uart_resume_port(&bfin_serial_reg, &bfin_serial_ports[i].port);
+ }
return 0;
}
@@ -1133,27 +1139,26 @@ static int bfin_serial_probe(struct platform_device *dev)
continue;
bfin_serial_ports[i].port.dev = &dev->dev;
uart_add_one_port(&bfin_serial_reg, &bfin_serial_ports[i].port);
- platform_set_drvdata(dev, &bfin_serial_ports[i]);
}
}
return 0;
}
-static int bfin_serial_remove(struct platform_device *pdev)
+static int bfin_serial_remove(struct platform_device *dev)
{
- struct bfin_serial_port *uart = platform_get_drvdata(pdev);
-
+ int i;
+ for (i = 0; i < nr_ports; i++) {
+ if (bfin_serial_ports[i].port.dev != &dev->dev)
+ continue;
+ uart_remove_one_port(&bfin_serial_reg, &bfin_serial_ports[i].port);
+ bfin_serial_ports[i].port.dev = NULL;
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
- gpio_free(uart->cts_pin);
- gpio_free(uart->rts_pin);
+ gpio_free(bfin_serial_ports[i].cts_pin);
+ gpio_free(bfin_serial_ports[i].rts_pin);
#endif
-
- platform_set_drvdata(pdev, NULL);
-
- if (uart)
- uart_remove_one_port(&bfin_serial_reg, &uart->port);
+ }
return 0;
}
--
1.5.6
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/8] Blackfin Serial Driver: trim trailing whitespace -- no functional changes
2008-07-27 6:03 [PATCH 0/8] Blackfin serial driver updates for 2.6.27 Bryan Wu
2008-07-27 6:04 ` [PATCH 1/8] Blackfin Serial Driver: use __initdata for data, not __init Bryan Wu
2008-07-27 6:04 ` [PATCH 2/8] Blackfin Serial Driver: Fix bug - should suspend/resume/remove all uart ports Bryan Wu
@ 2008-07-27 6:04 ` Bryan Wu
2008-07-27 6:04 ` [PATCH 4/8] Blackfin Serial Driver: move common variables out of serial headers and into the serial driver Bryan Wu
` (4 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Bryan Wu @ 2008-07-27 6:04 UTC (permalink / raw)
To: alan; +Cc: linux-kernel, Mike Frysinger, Bryan Wu
From: Mike Frysinger <vapier.adi@gmail.com>
Signed-off-by: Mike Frysinger <vapier.adi@gmail.com>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
---
drivers/serial/bfin_5xx.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index 5e43530..444ebe5 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -1,7 +1,7 @@
/*
* Blackfin On-Chip Serial Driver
*
- * Copyright 2006-2007 Analog Devices Inc.
+ * Copyright 2006-2008 Analog Devices Inc.
*
* Enter bugs at http://blackfin.uclinux.org/
*
@@ -126,13 +126,13 @@ static int kgdb_entry_state;
void kgdb_put_debug_char(int chr)
{
struct bfin_serial_port *uart;
-
+
if (CONFIG_KGDB_UART_PORT < 0
|| CONFIG_KGDB_UART_PORT >= BFIN_UART_NR_PORTS)
uart = &bfin_serial_ports[0];
else
uart = &bfin_serial_ports[CONFIG_KGDB_UART_PORT];
-
+
while (!(UART_GET_LSR(uart) & THRE)) {
SSYNC();
}
@@ -152,7 +152,7 @@ int kgdb_get_debug_char(void)
uart = &bfin_serial_ports[0];
else
uart = &bfin_serial_ports[CONFIG_KGDB_UART_PORT];
-
+
while(!(UART_GET_LSR(uart) & DR)) {
SSYNC();
}
--
1.5.6
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 4/8] Blackfin Serial Driver: move common variables out of serial headers and into the serial driver
2008-07-27 6:03 [PATCH 0/8] Blackfin serial driver updates for 2.6.27 Bryan Wu
` (2 preceding siblings ...)
2008-07-27 6:04 ` [PATCH 3/8] Blackfin Serial Driver: trim trailing whitespace -- no functional changes Bryan Wu
@ 2008-07-27 6:04 ` Bryan Wu
2008-07-27 6:04 ` [PATCH 5/8] Blackfin Serial Driver: Remove useless stop Bryan Wu
` (3 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Bryan Wu @ 2008-07-27 6:04 UTC (permalink / raw)
To: alan; +Cc: linux-kernel, Mike Frysinger, Bryan Wu
From: Mike Frysinger <vapier.adi@gmail.com>
move common variables out of serial headers and into the serial driver and
rename "nr_ports" to "nr_active_ports" so as to easily differentiat
between BFIN_UART_NR_PORTS (the # of available) and nr_ports (the # of enabled)
Signed-off-by: Mike Frysinger <vapier.adi@gmail.com>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
---
drivers/serial/bfin_5xx.c | 17 ++++++++++-------
include/asm-blackfin/mach-bf527/bfin_serial_5xx.h | 3 ---
include/asm-blackfin/mach-bf533/bfin_serial_5xx.h | 2 --
include/asm-blackfin/mach-bf537/bfin_serial_5xx.h | 3 ---
include/asm-blackfin/mach-bf548/bfin_serial_5xx.h | 3 ---
include/asm-blackfin/mach-bf561/bfin_serial_5xx.h | 2 --
6 files changed, 10 insertions(+), 20 deletions(-)
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index 444ebe5..f069309 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -42,6 +42,9 @@
#define BFIN_SERIAL_MAJOR 204
#define BFIN_SERIAL_MINOR 64
+static struct bfin_serial_port bfin_serial_ports[BFIN_UART_NR_PORTS];
+static int nr_active_ports = ARRAY_SIZE(bfin_serial_resource);
+
/*
* Setup for console. Argument comes from the menuconfig
*/
@@ -859,7 +862,7 @@ static void __init bfin_serial_init_ports(void)
return;
first = 0;
- for (i = 0; i < nr_ports; i++) {
+ for (i = 0; i < nr_active_ports; i++) {
bfin_serial_ports[i].port.uartclk = get_sclk();
bfin_serial_ports[i].port.ops = &bfin_serial_pops;
bfin_serial_ports[i].port.line = i;
@@ -961,7 +964,7 @@ bfin_serial_console_setup(struct console *co, char *options)
* if so, search for the first available port that does have
* console support.
*/
- if (co->index == -1 || co->index >= nr_ports)
+ if (co->index == -1 || co->index >= nr_active_ports)
co->index = 0;
uart = &bfin_serial_ports[co->index];
@@ -1072,7 +1075,7 @@ struct console __init *bfin_earlyserial_init(unsigned int port,
struct bfin_serial_port *uart;
struct ktermios t;
- if (port == -1 || port >= nr_ports)
+ if (port == -1 || port >= nr_active_ports)
port = 0;
bfin_serial_init_ports();
bfin_early_serial_console.index = port;
@@ -1102,7 +1105,7 @@ static int bfin_serial_suspend(struct platform_device *dev, pm_message_t state)
{
int i;
- for (i = 0; i < nr_ports; i++) {
+ for (i = 0; i < nr_active_ports; i++) {
if (bfin_serial_ports[i].port.dev != &dev->dev)
continue;
uart_suspend_port(&bfin_serial_reg, &bfin_serial_ports[i].port);
@@ -1115,7 +1118,7 @@ static int bfin_serial_resume(struct platform_device *dev)
{
int i;
- for (i = 0; i < nr_ports; i++) {
+ for (i = 0; i < nr_active_ports; i++) {
if (bfin_serial_ports[i].port.dev != &dev->dev)
continue;
uart_resume_port(&bfin_serial_reg, &bfin_serial_ports[i].port);
@@ -1134,7 +1137,7 @@ static int bfin_serial_probe(struct platform_device *dev)
break;
if (i < dev->num_resources) {
- for (i = 0; i < nr_ports; i++, res++) {
+ for (i = 0; i < nr_active_ports; i++, res++) {
if (bfin_serial_ports[i].port.mapbase != res->start)
continue;
bfin_serial_ports[i].port.dev = &dev->dev;
@@ -1149,7 +1152,7 @@ static int bfin_serial_remove(struct platform_device *dev)
{
int i;
- for (i = 0; i < nr_ports; i++) {
+ for (i = 0; i < nr_active_ports; i++) {
if (bfin_serial_ports[i].port.dev != &dev->dev)
continue;
uart_remove_one_port(&bfin_serial_reg, &bfin_serial_ports[i].port);
diff --git a/include/asm-blackfin/mach-bf527/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf527/bfin_serial_5xx.h
index 2526b6e..a23d047 100644
--- a/include/asm-blackfin/mach-bf527/bfin_serial_5xx.h
+++ b/include/asm-blackfin/mach-bf527/bfin_serial_5xx.h
@@ -119,7 +119,6 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart)
bfin_write16(uart->port.membase + OFFSET_LSR, -1);
}
-struct bfin_serial_port bfin_serial_ports[BFIN_UART_NR_PORTS];
struct bfin_serial_res {
unsigned long uart_base_addr;
int uart_irq;
@@ -164,8 +163,6 @@ struct bfin_serial_res bfin_serial_resource[] = {
#endif
};
-int nr_ports = ARRAY_SIZE(bfin_serial_resource);
-
#define DRIVER_NAME "bfin-uart"
static void bfin_serial_hw_init(struct bfin_serial_port *uart)
diff --git a/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h
index ebf592b..20471cd 100644
--- a/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h
+++ b/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h
@@ -111,7 +111,6 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart)
bfin_write16(uart->port.membase + OFFSET_LSR, -1);
}
-struct bfin_serial_port bfin_serial_ports[BFIN_UART_NR_PORTS];
struct bfin_serial_res {
unsigned long uart_base_addr;
int uart_irq;
@@ -142,7 +141,6 @@ struct bfin_serial_res bfin_serial_resource[] = {
#define DRIVER_NAME "bfin-uart"
-int nr_ports = BFIN_UART_NR_PORTS;
static void bfin_serial_hw_init(struct bfin_serial_port *uart)
{
diff --git a/include/asm-blackfin/mach-bf537/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf537/bfin_serial_5xx.h
index 1bf56ff..08dfe30 100644
--- a/include/asm-blackfin/mach-bf537/bfin_serial_5xx.h
+++ b/include/asm-blackfin/mach-bf537/bfin_serial_5xx.h
@@ -119,7 +119,6 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart)
bfin_write16(uart->port.membase + OFFSET_LSR, -1);
}
-struct bfin_serial_port bfin_serial_ports[BFIN_UART_NR_PORTS];
struct bfin_serial_res {
unsigned long uart_base_addr;
int uart_irq;
@@ -164,8 +163,6 @@ struct bfin_serial_res bfin_serial_resource[] = {
#endif
};
-int nr_ports = ARRAY_SIZE(bfin_serial_resource);
-
#define DRIVER_NAME "bfin-uart"
static void bfin_serial_hw_init(struct bfin_serial_port *uart)
diff --git a/include/asm-blackfin/mach-bf548/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf548/bfin_serial_5xx.h
index 5e29446..76976b1 100644
--- a/include/asm-blackfin/mach-bf548/bfin_serial_5xx.h
+++ b/include/asm-blackfin/mach-bf548/bfin_serial_5xx.h
@@ -105,7 +105,6 @@ struct bfin_serial_port {
#endif
};
-struct bfin_serial_port bfin_serial_ports[BFIN_UART_NR_PORTS];
struct bfin_serial_res {
unsigned long uart_base_addr;
int uart_irq;
@@ -170,8 +169,6 @@ struct bfin_serial_res bfin_serial_resource[] = {
#endif
};
-int nr_ports = ARRAY_SIZE(bfin_serial_resource);
-
#define DRIVER_NAME "bfin-uart"
static void bfin_serial_hw_init(struct bfin_serial_port *uart)
diff --git a/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h
index 8aa0278..6cddca4 100644
--- a/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h
+++ b/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h
@@ -111,7 +111,6 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart)
bfin_write16(uart->port.membase + OFFSET_LSR, -1);
}
-struct bfin_serial_port bfin_serial_ports[BFIN_UART_NR_PORTS];
struct bfin_serial_res {
unsigned long uart_base_addr;
int uart_irq;
@@ -142,7 +141,6 @@ struct bfin_serial_res bfin_serial_resource[] = {
#define DRIVER_NAME "bfin-uart"
-int nr_ports = BFIN_UART_NR_PORTS;
static void bfin_serial_hw_init(struct bfin_serial_port *uart)
{
--
1.5.6
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 5/8] Blackfin Serial Driver: Remove useless stop
2008-07-27 6:03 [PATCH 0/8] Blackfin serial driver updates for 2.6.27 Bryan Wu
` (3 preceding siblings ...)
2008-07-27 6:04 ` [PATCH 4/8] Blackfin Serial Driver: move common variables out of serial headers and into the serial driver Bryan Wu
@ 2008-07-27 6:04 ` Bryan Wu
2008-07-27 6:04 ` [PATCH 6/8] Blackfin Serial Driver: Fix bug - Don't call tx_stop in tx_transfer Bryan Wu
` (2 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Bryan Wu @ 2008-07-27 6:04 UTC (permalink / raw)
To: alan; +Cc: linux-kernel, Sonic Zhang, Bryan Wu
From: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
---
drivers/serial/bfin_5xx.c | 3 ---
1 files changed, 0 insertions(+), 3 deletions(-)
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index f069309..31fc8e1 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -320,9 +320,6 @@ static void bfin_serial_tx_chars(struct bfin_serial_port *uart)
if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
uart_write_wakeup(&uart->port);
-
- if (uart_circ_empty(xmit))
- bfin_serial_stop_tx(&uart->port);
}
static irqreturn_t bfin_serial_rx_int(int irq, void *dev_id)
--
1.5.6
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 6/8] Blackfin Serial Driver: Fix bug - Don't call tx_stop in tx_transfer.
2008-07-27 6:03 [PATCH 0/8] Blackfin serial driver updates for 2.6.27 Bryan Wu
` (4 preceding siblings ...)
2008-07-27 6:04 ` [PATCH 5/8] Blackfin Serial Driver: Remove useless stop Bryan Wu
@ 2008-07-27 6:04 ` Bryan Wu
2008-07-27 6:04 ` [PATCH 7/8] Blackfin Serial Driver: Fix bug - ircp fails on sir over Blackfin UART Bryan Wu
2008-07-27 6:04 ` [PATCH 8/8] Blackfin Serial Driver: Fix bug - request UART2/3 peripheral mapped interrupts in PIO mode Bryan Wu
7 siblings, 0 replies; 9+ messages in thread
From: Bryan Wu @ 2008-07-27 6:04 UTC (permalink / raw)
To: alan; +Cc: linux-kernel, Sonic Zhang, Bryan Wu
From: Sonic Zhang <sonic.zhang@analog.com>
Disable irq and return immediately.
Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
---
drivers/serial/bfin_5xx.c | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index 31fc8e1..afeff9f 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -301,7 +301,11 @@ static void bfin_serial_tx_chars(struct bfin_serial_port *uart)
bfin_serial_mctrl_check(uart);
if (uart_circ_empty(xmit) || uart_tx_stopped(&uart->port)) {
- bfin_serial_stop_tx(&uart->port);
+#ifdef CONFIG_BF54x
+ /* Clear TFI bit */
+ UART_PUT_LSR(uart, TFI);
+#endif
+ UART_CLEAR_IER(uart, ETBEI);
return;
}
--
1.5.6
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 7/8] Blackfin Serial Driver: Fix bug - ircp fails on sir over Blackfin UART
2008-07-27 6:03 [PATCH 0/8] Blackfin serial driver updates for 2.6.27 Bryan Wu
` (5 preceding siblings ...)
2008-07-27 6:04 ` [PATCH 6/8] Blackfin Serial Driver: Fix bug - Don't call tx_stop in tx_transfer Bryan Wu
@ 2008-07-27 6:04 ` Bryan Wu
2008-07-27 6:04 ` [PATCH 8/8] Blackfin Serial Driver: Fix bug - request UART2/3 peripheral mapped interrupts in PIO mode Bryan Wu
7 siblings, 0 replies; 9+ messages in thread
From: Bryan Wu @ 2008-07-27 6:04 UTC (permalink / raw)
To: alan; +Cc: linux-kernel, Graf Yang, Bryan Wu
From: Graf Yang <graf.yang@analog.com>
We now use the sir_dev/irtty_sir/uart/bfin_serial drivers framework
to monitor the TX status.
Signed-off-by: Graf Yang <graf.yang@analog.com>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
---
drivers/serial/bfin_5xx.c | 4 ++++
include/asm-blackfin/mach-bf527/bfin_serial_5xx.h | 3 +++
include/asm-blackfin/mach-bf533/bfin_serial_5xx.h | 2 ++
include/asm-blackfin/mach-bf537/bfin_serial_5xx.h | 3 +++
include/asm-blackfin/mach-bf548/bfin_serial_5xx.h | 3 +++
include/asm-blackfin/mach-bf561/bfin_serial_5xx.h | 2 ++
6 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index afeff9f..ac74d8b 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -761,6 +761,9 @@ bfin_serial_set_termios(struct uart_port *port, struct ktermios *termios,
val |= UCEN;
UART_PUT_GCTL(uart, val);
+ /* Port speed changed, update the per-port timeout. */
+ uart_update_timeout(port, termios->c_cflag, baud);
+
spin_unlock_irqrestore(&uart->port.lock, flags);
}
@@ -865,6 +868,7 @@ static void __init bfin_serial_init_ports(void)
for (i = 0; i < nr_active_ports; i++) {
bfin_serial_ports[i].port.uartclk = get_sclk();
+ bfin_serial_ports[i].port.fifosize = BFIN_UART_TX_FIFO_SIZE;
bfin_serial_ports[i].port.ops = &bfin_serial_pops;
bfin_serial_ports[i].port.line = i;
bfin_serial_ports[i].port.iotype = UPIO_MEM;
diff --git a/include/asm-blackfin/mach-bf527/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf527/bfin_serial_5xx.h
index a23d047..75722d6 100644
--- a/include/asm-blackfin/mach-bf527/bfin_serial_5xx.h
+++ b/include/asm-blackfin/mach-bf527/bfin_serial_5xx.h
@@ -78,6 +78,9 @@
# define CONFIG_UART1_RTS_PIN -1
# endif
#endif
+
+#define BFIN_UART_TX_FIFO_SIZE 2
+
/*
* The pin configuration is different from schematic
*/
diff --git a/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h
index 20471cd..815bfe5 100644
--- a/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h
+++ b/include/asm-blackfin/mach-bf533/bfin_serial_5xx.h
@@ -69,6 +69,8 @@
# endif
#endif
+#define BFIN_UART_TX_FIFO_SIZE 2
+
struct bfin_serial_port {
struct uart_port port;
unsigned int old_status;
diff --git a/include/asm-blackfin/mach-bf537/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf537/bfin_serial_5xx.h
index 08dfe30..b3f87e1 100644
--- a/include/asm-blackfin/mach-bf537/bfin_serial_5xx.h
+++ b/include/asm-blackfin/mach-bf537/bfin_serial_5xx.h
@@ -78,6 +78,9 @@
# define CONFIG_UART1_RTS_PIN -1
# endif
#endif
+
+#define BFIN_UART_TX_FIFO_SIZE 2
+
/*
* The pin configuration is different from schematic
*/
diff --git a/include/asm-blackfin/mach-bf548/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf548/bfin_serial_5xx.h
index 76976b1..e4cf35e 100644
--- a/include/asm-blackfin/mach-bf548/bfin_serial_5xx.h
+++ b/include/asm-blackfin/mach-bf548/bfin_serial_5xx.h
@@ -82,6 +82,9 @@
# define CONFIG_UART1_RTS_PIN -1
# endif
#endif
+
+#define BFIN_UART_TX_FIFO_SIZE 2
+
/*
* The pin configuration is different from schematic
*/
diff --git a/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h b/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h
index 6cddca4..e0ce0c1 100644
--- a/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h
+++ b/include/asm-blackfin/mach-bf561/bfin_serial_5xx.h
@@ -69,6 +69,8 @@
# endif
#endif
+#define BFIN_UART_TX_FIFO_SIZE 2
+
struct bfin_serial_port {
struct uart_port port;
unsigned int old_status;
--
1.5.6
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 8/8] Blackfin Serial Driver: Fix bug - request UART2/3 peripheral mapped interrupts in PIO mode
2008-07-27 6:03 [PATCH 0/8] Blackfin serial driver updates for 2.6.27 Bryan Wu
` (6 preceding siblings ...)
2008-07-27 6:04 ` [PATCH 7/8] Blackfin Serial Driver: Fix bug - ircp fails on sir over Blackfin UART Bryan Wu
@ 2008-07-27 6:04 ` Bryan Wu
7 siblings, 0 replies; 9+ messages in thread
From: Bryan Wu @ 2008-07-27 6:04 UTC (permalink / raw)
To: alan; +Cc: linux-kernel, Sonic Zhang, Bryan Wu
From: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Bryan Wu <cooloney@kernel.org>
---
arch/blackfin/kernel/bfin_dma_5xx.c | 13 ++++-----
drivers/serial/bfin_5xx.c | 50 +++++++++++++++++++++++++++++++++++
2 files changed, 56 insertions(+), 7 deletions(-)
diff --git a/arch/blackfin/kernel/bfin_dma_5xx.c b/arch/blackfin/kernel/bfin_dma_5xx.c
index 93229b3..339293d 100644
--- a/arch/blackfin/kernel/bfin_dma_5xx.c
+++ b/arch/blackfin/kernel/bfin_dma_5xx.c
@@ -117,15 +117,14 @@ int request_dma(unsigned int channel, char *device_id)
#ifdef CONFIG_BF54x
if (channel >= CH_UART2_RX && channel <= CH_UART3_TX) {
- if (strncmp(device_id, "BFIN_UART", 9) == 0) {
- dma_ch[channel].regs->peripheral_map &= 0x0FFF;
- dma_ch[channel].regs->peripheral_map |=
+ unsigned int per_map;
+ per_map = dma_ch[channel].regs->peripheral_map & 0xFFF;
+ if (strncmp(device_id, "BFIN_UART", 9) == 0)
+ dma_ch[channel].regs->peripheral_map = per_map |
((channel - CH_UART2_RX + 0xC)<<12);
- } else {
- dma_ch[channel].regs->peripheral_map &= 0x0FFF;
- dma_ch[channel].regs->peripheral_map |=
+ else
+ dma_ch[channel].regs->peripheral_map = per_map |
((channel - CH_UART2_RX + 0x6)<<12);
- }
}
#endif
diff --git a/drivers/serial/bfin_5xx.c b/drivers/serial/bfin_5xx.c
index ac74d8b..6e4201d 100644
--- a/drivers/serial/bfin_5xx.c
+++ b/drivers/serial/bfin_5xx.c
@@ -649,6 +649,42 @@ static int bfin_serial_startup(struct uart_port *port)
free_irq(uart->port.irq, uart);
return -EBUSY;
}
+
+# ifdef CONFIG_BF54x
+ {
+ unsigned uart_dma_ch_rx, uart_dma_ch_tx;
+
+ switch (uart->port.irq) {
+ case IRQ_UART3_RX:
+ uart_dma_ch_rx = CH_UART3_RX;
+ uart_dma_ch_tx = CH_UART3_TX;
+ break;
+ case IRQ_UART2_RX:
+ uart_dma_ch_rx = CH_UART2_RX;
+ uart_dma_ch_tx = CH_UART2_TX;
+ break;
+ default:
+ uart_dma_ch_rx = uart_dma_ch_tx = 0;
+ break;
+ };
+
+ if (uart_dma_ch_rx &&
+ request_dma(uart_dma_ch_rx, "BFIN_UART_RX") < 0) {
+ printk(KERN_NOTICE"Fail to attach UART interrupt\n");
+ free_irq(uart->port.irq, uart);
+ free_irq(uart->port.irq + 1, uart);
+ return -EBUSY;
+ }
+ if (uart_dma_ch_tx &&
+ request_dma(uart_dma_ch_tx, "BFIN_UART_TX") < 0) {
+ printk(KERN_NOTICE "Fail to attach UART interrupt\n");
+ free_dma(uart_dma_ch_rx);
+ free_irq(uart->port.irq, uart);
+ free_irq(uart->port.irq + 1, uart);
+ return -EBUSY;
+ }
+ }
+# endif
#endif
UART_SET_IER(uart, ERBFI);
return 0;
@@ -666,6 +702,20 @@ static void bfin_serial_shutdown(struct uart_port *port)
del_timer(&(uart->rx_dma_timer));
dma_free_coherent(NULL, PAGE_SIZE, uart->rx_dma_buf.buf, 0);
#else
+#ifdef CONFIG_BF54x
+ switch (uart->port.irq) {
+ case IRQ_UART3_RX:
+ free_dma(CH_UART3_RX);
+ free_dma(CH_UART3_TX);
+ break;
+ case IRQ_UART2_RX:
+ free_dma(CH_UART2_RX);
+ free_dma(CH_UART2_TX);
+ break;
+ default:
+ break;
+ };
+#endif
#ifdef CONFIG_KGDB_UART
if (uart->port.line != CONFIG_KGDB_UART_PORT)
#endif
--
1.5.6
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2008-07-27 6:07 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-07-27 6:03 [PATCH 0/8] Blackfin serial driver updates for 2.6.27 Bryan Wu
2008-07-27 6:04 ` [PATCH 1/8] Blackfin Serial Driver: use __initdata for data, not __init Bryan Wu
2008-07-27 6:04 ` [PATCH 2/8] Blackfin Serial Driver: Fix bug - should suspend/resume/remove all uart ports Bryan Wu
2008-07-27 6:04 ` [PATCH 3/8] Blackfin Serial Driver: trim trailing whitespace -- no functional changes Bryan Wu
2008-07-27 6:04 ` [PATCH 4/8] Blackfin Serial Driver: move common variables out of serial headers and into the serial driver Bryan Wu
2008-07-27 6:04 ` [PATCH 5/8] Blackfin Serial Driver: Remove useless stop Bryan Wu
2008-07-27 6:04 ` [PATCH 6/8] Blackfin Serial Driver: Fix bug - Don't call tx_stop in tx_transfer Bryan Wu
2008-07-27 6:04 ` [PATCH 7/8] Blackfin Serial Driver: Fix bug - ircp fails on sir over Blackfin UART Bryan Wu
2008-07-27 6:04 ` [PATCH 8/8] Blackfin Serial Driver: Fix bug - request UART2/3 peripheral mapped interrupts in PIO mode Bryan Wu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®