Add poll_get_char & poll_put_char to uart_ops for the samsung UARTS.
Subsystems (2)
PATCH 1/1 Add poll_get_char & poll_put_char to uart_ops for the samsung UARTS.
(please CC me in your replies as I am not suscribed to the ML)
The following patch allows users to use KGDB over serial console on board based on Samsung SOC. It has been tested on a mini2440.
--- drivers/tty/serial/samsung.c | 50 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 50 insertions(+), 0 deletions(-)
drivers/tty/serial/samsung.c +50 -0
@@ -877,11 +877,24 @@ s3c24xx_serial_verify_port(struct uart_port *port, struct serial_struct *ser)static struct console s3c24xx_serial_console; +static int __init s3c24xx_serial_console_init (void ) +{ +register_console (&s3c24xx_serial_console); +return 0 ; +} +console_initcall (s3c24xx_serial_console_init); +#define S3C24XX_SERIAL_CONSOLE &s3c24xx_serial_console#else #define S3C24XX_SERIAL_CONSOLE NULL#endif +#ifdef CONFIG_CONSOLE_POLL +static int s3c24xx_serial_get_poll_char (struct uart_port *port); +static void s3c24xx_serial_put_poll_char (struct uart_port *port, +unsigned char c); +#endif +static struct uart_ops s3c24xx_serial_ops = { .pm = s3c24xx_serial_pm, .tx_empty = s3c24xx_serial_tx_empty,
@@ -900,6 +913,10 @@ static struct uart_ops s3c24xx_serial_ops = { .request_port = s3c24xx_serial_request_port, .config_port = s3c24xx_serial_config_port, .verify_port = s3c24xx_serial_verify_port, +#ifdef CONFIG_CONSOLE_POLL + .poll_get_char = s3c24xx_serial_get_poll_char, + .poll_put_char = s3c24xx_serial_put_poll_char, +#endif }; static struct uart_driver s3c24xx_uart_drv = {
@@ -1311,6 +1328,39 @@ s3c24xx_serial_console_txrdy(struct uart_port *port, unsigned int ufcon)return (utrstat &S3C2410_UTRSTAT_TXE ) ?1 :0 ; } +#ifdef CONFIG_CONSOLE_POLL +/* +* Console polling routines for writing and reading from the uart while +* in an interrupt or debug context. +*/ + +static int s3c24xx_serial_get_poll_char (struct uart_port *port) +{ +struct s3c24xx_uart_port *ourport =to_ourport (port); +unsigned int ufstat, count; + +do { + ufstat =rd_regl (port,S3C2410_UFSTAT ); + count =s3c24xx_serial_rx_fifocnt (ourport, ufstat); +if (!count) +cpu_relax (); + }while (!count); + +return rd_regb (port,S3C2410_URXH ); +} + +static void s3c24xx_serial_put_poll_char (struct uart_port *port, +unsigned char c) +{ +unsigned int ufcon =rd_regl (cons_uart,S3C2410_UFCON ); + +while (!s3c24xx_serial_console_txrdy (port, ufcon)) +cpu_relax (); +wr_regb (cons_uart,S3C2410_UTXH , c); +} + +#endif /* CONFIG_CONSOLE_POLL */ +static void s3c24xx_serial_console_putchar (struct uart_port *port,int ch) {
Signature · 1 line
1.7.2.5
A message that is not in the archive (sent off-list or not yet received): CAHQa92X=9kiVhxCspcAR+dK-NbFqaUW2xTCjjDOAHGfDx_yMBQ@mail.gmail.com
Quoted 87 lines
(please CC me in your replies as I am not suscribed to the ML)
The following patch allows users to use KGDB over serial console on board based on Samsung SOC. It has been tested on a mini2440.
Signed-off-by Julien Pichon <[email protected]>---
drivers/tty/serial/samsung.c | 50 ++++++++++++++++++++++++++++++++++++++++++1 files changed, 50 insertions(+), 0 deletions(-)drivers/tty/serial/samsung.c +50
-0@@ -877,11 +877,24 @@ s3c24xx_serial_verify_port(struct uart_port *port, struct serial_struct *ser) static struct console s3c24xx_serial_console; +static int __init s3c24xx_serial_console_init (void ) +{ + register_console(&s3c24xx_serial_console); + return 0; +} +console_initcall (s3c24xx_serial_console_init); + #define S3C24XX_SERIAL_CONSOLE &s3c24xx_serial_console #else #define S3C24XX_SERIAL_CONSOLE NULL #endif +#ifdef CONFIG_CONSOLE_POLL +static int s3c24xx_serial_get_poll_char (struct uart_port *port); +static void s3c24xx_serial_put_poll_char (struct uart_port *port, + unsigned char c); +#endif + static struct uart_ops s3c24xx_serial_ops = { .pm = s3c24xx_serial_pm, .tx_empty = s3c24xx_serial_tx_empty,@@ -900,6 +913,10 @@ static struct uart_ops s3c24xx_serial_ops = { .request_port = s3c24xx_serial_request_port, .config_port = s3c24xx_serial_config_port, .verify_port = s3c24xx_serial_verify_port, +#ifdef CONFIG_CONSOLE_POLL + .poll_get_char = s3c24xx_serial_get_poll_char, + .poll_put_char = s3c24xx_serial_put_poll_char, +#endif }; static struct uart_driver s3c24xx_uart_drv = {@@ -1311,6 +1328,39 @@ s3c24xx_serial_console_txrdy(struct uart_port *port, unsigned int ufcon) return (utrstat & S3C2410_UTRSTAT_TXE) ? 1 : 0; } +#ifdef CONFIG_CONSOLE_POLL +/* +* Console polling routines for writing and reading from the uart while +* in an interrupt or debug context. +*/ + +static int s3c24xx_serial_get_poll_char (struct uart_port *port) +{ + struct s3c24xx_uart_port *ourport = to_ourport(port); + unsigned int ufstat, count; + + do { + ufstat = rd_regl(port, S3C2410_UFSTAT); + count = s3c24xx_serial_rx_fifocnt(ourport, ufstat); + if (!count) + cpu_relax(); + } while (!count); + + return rd_regb(port, S3C2410_URXH); +} + +static void s3c24xx_serial_put_poll_char (struct uart_port *port, + unsigned char c) +{ + unsigned int ufcon = rd_regl(cons_uart, S3C2410_UFCON); + + while (!s3c24xx_serial_console_txrdy(port, ufcon)) + cpu_relax(); + wr_regb(cons_uart, S3C2410_UTXH, c); +} + +#endif /* CONFIG_CONSOLE_POLL */ +
Quoted 7 lines
static void
s3c24xx_serial_console_putchar(structuart_port*port, int ch) {
--
1.7.2.5
(CC maintainers)
Someone has time to review this patch ?
PATCH 1/1 Add poll_get_char & poll_put_char to uart_ops for the samsung UARTS.
Am Samstag 25 Februar 2012, 12:05:56 schrieb Pichon Julien:
Quoted 90 lines
Quoted 90 lines
(please CC me in your replies as I am not suscribed to the ML)
The following patch allows users to use KGDB over serial console on board based on Samsung SOC. It has been tested on a mini2440.
Signed-off-by Julien Pichon <[email protected]>--- drivers/tty/serial/samsung.c | 50++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 50 insertions(+), 0 deletions(-)
drivers/tty/serial/samsung.c +13
-0@@ -877,11 +877,24 @@ s3c24xx_serial_verify_port(struct uart_port *port, struct serial_struct *ser)static struct console s3c24xx_serial_console; +static int __init s3c24xx_serial_console_init (void ) +{ +register_console (&s3c24xx_serial_console); +return 0 ; +} +console_initcall (s3c24xx_serial_console_init); +#define S3C24XX_SERIAL_CONSOLE &s3c24xx_serial_console#else #define S3C24XX_SERIAL_CONSOLE NULL#endif +#ifdef CONFIG_CONSOLE_POLL +static int s3c24xx_serial_get_poll_char (struct uart_port *port); +static void s3c24xx_serial_put_poll_char (struct uart_port *port, +unsigned char c); +#endif +static struct uart_ops s3c24xx_serial_ops = { .pm = s3c24xx_serial_pm,.tx_empty =
s3c24xx_serial_tx_empty,drivers/tty/serial/samsung.c +37
-0@@ -900,6 +913,10 @@ static struct uart_ops s3c24xx_serial_ops = { .request_port = s3c24xx_serial_request_port, .config_port = s3c24xx_serial_config_port, .verify_port = s3c24xx_serial_verify_port, +#ifdef CONFIG_CONSOLE_POLL + .poll_get_char = s3c24xx_serial_get_poll_char, + .poll_put_char = s3c24xx_serial_put_poll_char, +#endif }; static struct uart_driver s3c24xx_uart_drv = {@@ -1311,6 +1328,39 @@ s3c24xx_serial_console_txrdy(struct uart_port *port, unsigned int ufcon) return (utrstat & S3C2410_UTRSTAT_TXE) ? 1 :0 ; } +#ifdef CONFIG_CONSOLE_POLL +/* +* Console polling routines for writing and reading from the uart while +* in an interrupt or debug context. +*/ + +static int s3c24xx_serial_get_poll_char (struct uart_port *port) +{ +struct s3c24xx_uart_port *ourport =to_ourport (port); +unsigned int ufstat, count; + +do { + ufstat =rd_regl (port,S3C2410_UFSTAT ); + count =s3c24xx_serial_rx_fifocnt (ourport, ufstat); +if (!count) +cpu_relax (); + }while (!count); + +return rd_regb (port,S3C2410_URXH ); +} + +static void s3c24xx_serial_put_poll_char (struct uart_port *port, +unsigned char c) +{ +unsigned int ufcon =rd_regl (cons_uart,S3C2410_UFCON ); + +while (!s3c24xx_serial_console_txrdy (port, ufcon)) +cpu_relax (); +wr_regb (cons_uart,S3C2410_UTXH , c); +} + +#endif /* CONFIG_CONSOLE_POLL */ +
Quoted 8 lines
Quoted 5 lines
drivers/tty/serial/samsung.c +0
-0static void s3c24xx_serial_console_putchar (struct uart_port *port,int ch){
--
1.7.2.5(CC maintainers)
Someone has time to review this patch ?
It might be goot to included the linux-arm-kernel list to get a wider audience. I always felt, that the samsung ml isn't read by many.
Heiko
PATCH 1/1 Add poll_get_char & poll_put_char to uart_ops for the samsung UARTS.
Quoted 2 lines
It might be goot to included the linux-arm-kernel list to get a wider audience. I always felt, that the samsung ml isn't read by many.
Why not the linux-serial mailing list?
I sent a patch there and it was accepted in Greg Kroah-Hartman's tree really fast(it didn't hit linux-next yet tough).
Denis.
Hi Julien,
Quoted 2 lines
The following patch allows users to use KGDB over serial console on board based on Samsung SOC. It has been tested on a mini2440.
(gdb) target remote /dev/ttyUSB0
Remote debugging using /dev/ttyUSB0 kgdb_breakpoint () at kernel/debug/debug_core.c:959
959 arch_kgdb_breakpoint();
It works on a gta02 machine too...
Thanks a lot for working on that, it will help me a lot for continuing to fix things in mainline for gta02, It already was very usefull with debugging an alsa problem.
Denis.
PATCH 1/1 serial: samsung: Add poll_get_char & poll_put_char
In reply to Julien PichonFrom: Julien Pichon <[email protected]>
The following patch allows users to use KGDB over serial console on board based on Samsung SOC. It has been tested on a board using exynos5.
(dianders changed poll to return NO_POLL_CHAR, which appears to fix 'help' in kgdb; also updated commit message)
---
This is pulled from an email on <[email protected]> from Feb 18, 2012. It's never landed anywhere. I've made a small modification that make it so that kgdb's "help" doesn't crash.
See: http://comments.gmane.org/gmane.linux.kernel.samsung-soc/9477
drivers/tty/serial/samsung.c | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 47 insertions(+), 0 deletions(-)
drivers/tty/serial/samsung.c +47 -0
@@ -876,11 +876,24 @@ s3c24xx_serial_verify_port(struct uart_port *port, struct serial_struct *ser)static struct console s3c24xx_serial_console; +static int __init s3c24xx_serial_console_init (void ) +{ +register_console (&s3c24xx_serial_console); +return 0 ; +} +console_initcall (s3c24xx_serial_console_init); +#define S3C24XX_SERIAL_CONSOLE &s3c24xx_serial_console#else #define S3C24XX_SERIAL_CONSOLE NULL#endif +#ifdef CONFIG_CONSOLE_POLL +static int s3c24xx_serial_get_poll_char (struct uart_port *port); +static void s3c24xx_serial_put_poll_char (struct uart_port *port, +unsigned char c); +#endif +static struct uart_ops s3c24xx_serial_ops = { .pm = s3c24xx_serial_pm, .tx_empty = s3c24xx_serial_tx_empty,
@@ -899,6 +912,10 @@ static struct uart_ops s3c24xx_serial_ops = { .request_port = s3c24xx_serial_request_port, .config_port = s3c24xx_serial_config_port, .verify_port = s3c24xx_serial_verify_port, +#ifdef CONFIG_CONSOLE_POLL + .poll_get_char = s3c24xx_serial_get_poll_char, + .poll_put_char = s3c24xx_serial_put_poll_char, +#endif }; static struct uart_driver s3c24xx_uart_drv = {
@@ -1316,6 +1333,36 @@ s3c24xx_serial_console_txrdy(struct uart_port *port, unsigned int ufcon)return (utrstat &S3C2410_UTRSTAT_TXE ) ?1 :0 ; } +#ifdef CONFIG_CONSOLE_POLL +/* +* Console polling routines for writing and reading from the uart while +* in an interrupt or debug context. +*/ + +static int s3c24xx_serial_get_poll_char (struct uart_port *port) +{ +struct s3c24xx_uart_port *ourport =to_ourport (port); +unsigned int ufstat; + + ufstat =rd_regl (port,S3C2410_UFSTAT ); +if (s3c24xx_serial_rx_fifocnt (ourport, ufstat) ==0 ) +return NO_POLL_CHAR ; + +return rd_regb (port,S3C2410_URXH ); +} + +static void s3c24xx_serial_put_poll_char (struct uart_port *port, +unsigned char c) +{ +unsigned int ufcon =rd_regl (cons_uart,S3C2410_UFCON ); + +while (!s3c24xx_serial_console_txrdy (port, ufcon)) +cpu_relax (); +wr_regb (cons_uart,S3C2410_UTXH , c); +} + +#endif /* CONFIG_CONSOLE_POLL */ +static void s3c24xx_serial_console_putchar (struct uart_port *port,int ch) {
Signature · 1 line
1.7.7.3