2022-11-16 15:34:58

by Gabriel L. Somlo

[permalink] [raw]
Subject: [PATCH v4 00/14] serial: liteuart: add IRQ support

Add IRQ support to the LiteX LiteUART serial interface

Changes from v3:
- picked up r/b Ilpo Järvinen on select subset of commits
- rebased entire series on top of tty-next tree
- 2/14 ("use bit number macros"): explicitly include <linux/bits.h>
- 3/14 ("remove unused uart_ops stubs"): don't add gratuitous comment
removed later on in the series
- 12/14 ("add IRQ support for the RX path"): add shadow irq register
to support polling mode and avoid reading hardware mmio irq register
to learn which irq flags are enabled
- this also simplifies both liteuart_interrupt() and liteuart_startup()
- 13/14 ("add IRQ support for the TX path"):
- removed superfluous curly braces from liteuart_interrupt()
- simplified [start|stop]_tx() by using shadow irq register from 12/14
- simplified liteuart_tx_chars() by rebasing on top of tty-next tree

> Changes from v2:
> - further split out "separate RX loop from poll timer" into
> dedicated patches highlighting additional changes explicitly:
> - factoring out tty_flip_buffer_push() (6/14)
> - ack only RX events in RX loop (7/14)
> - pass constant flag to uart_insert_char() directly (8/14)
> - fix variable types in rx loop (9/14)
> - separating RX loop from poll timer (10/14)
> - added patch (11/14) to move function definitions to a more
> convenient location, making subsequent changes easier to read
> in diff patch form.
> - fixes and clarifications for RX path IRQ support patch (now 12/14):
> - only return IRQ_HANDLED for RX events
> - use pr_fmt() to improve style of irq setup error message
> - remove unnecessary locking from around single-register access
> - modify TX path to support both IRQ-mode and polling (13/14)
> - move polling-only liteuart_putchar() behind same conditional
> (CONFIG_SERIAL_LITEUART_CONSOLE) as the rest of the code that's
> still using it.
>
> Changes from v1:
> - split minor cosmetic changes out into individual patches
> (1/3 became 1..5/7)
> - patches 6/7 and 7/7 unchanged (used to be 2/3 and 3/3)

Gabriel Somlo (14):
serial: liteuart: use KBUILD_MODNAME as driver name
serial: liteuart: use bit number macros
serial: liteuart: remove unused uart_ops stubs
serial: liteuart: don't set unused port fields
serial: liteuart: minor style fix in liteuart_init()
serial: liteuart: move tty_flip_buffer_push() out of rx loop
serial: liteuart: rx loop should only ack rx events
serial: liteuart: simplify passing of uart_insert_char() flag
serial: liteuart: fix rx loop variable types
serial: liteuart: separate rx loop from poll timer
serial: liteuart: move function definitions
serial: liteuart: add IRQ support for the RX path
serial: liteuart: add IRQ support for the TX path
serial: liteuart: move polling putchar() function

drivers/tty/serial/liteuart.c | 210 ++++++++++++++++++++--------------
1 file changed, 126 insertions(+), 84 deletions(-)

--
2.38.1



2022-11-16 15:42:00

by Gabriel L. Somlo

[permalink] [raw]
Subject: [PATCH v4 01/14] serial: liteuart: use KBUILD_MODNAME as driver name

Replace hard-coded instances of "liteuart" with KBUILD_MODNAME.

Signed-off-by: Gabriel Somlo <[email protected]>
---
drivers/tty/serial/liteuart.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/tty/serial/liteuart.c b/drivers/tty/serial/liteuart.c
index 062812fe1b09..db898751ffe3 100644
--- a/drivers/tty/serial/liteuart.c
+++ b/drivers/tty/serial/liteuart.c
@@ -57,7 +57,7 @@ static struct console liteuart_console;

static struct uart_driver liteuart_driver = {
.owner = THIS_MODULE,
- .driver_name = "liteuart",
+ .driver_name = KBUILD_MODNAME,
.dev_name = "ttyLXU",
.major = 0,
.minor = 0,
@@ -321,7 +321,7 @@ static struct platform_driver liteuart_platform_driver = {
.probe = liteuart_probe,
.remove = liteuart_remove,
.driver = {
- .name = "liteuart",
+ .name = KBUILD_MODNAME,
.of_match_table = liteuart_of_match,
},
};
@@ -367,7 +367,7 @@ static int liteuart_console_setup(struct console *co, char *options)
}

static struct console liteuart_console = {
- .name = "liteuart",
+ .name = KBUILD_MODNAME,
.write = liteuart_console_write,
.device = uart_console_device,
.setup = liteuart_console_setup,
--
2.38.1


2022-11-16 15:42:12

by Gabriel L. Somlo

[permalink] [raw]
Subject: [PATCH v4 08/14] serial: liteuart: simplify passing of uart_insert_char() flag

Simply provide the hard-coded TTY_NORMAL flag to uart_insert_char()
directly -- no need to dedicate a variable for that exclusive purpose.

Signed-off-by: Gabriel Somlo <[email protected]>
Reviewed-by: Ilpo Järvinen <[email protected]>
---
drivers/tty/serial/liteuart.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/tty/serial/liteuart.c b/drivers/tty/serial/liteuart.c
index c90ab65fbdcf..81aa7c1da73c 100644
--- a/drivers/tty/serial/liteuart.c
+++ b/drivers/tty/serial/liteuart.c
@@ -73,7 +73,6 @@ static void liteuart_timer(struct timer_list *t)
struct liteuart_port *uart = from_timer(uart, t, timer);
struct uart_port *port = &uart->port;
unsigned char __iomem *membase = port->membase;
- unsigned int flg = TTY_NORMAL;
int ch;
unsigned long status;

@@ -86,7 +85,7 @@ static void liteuart_timer(struct timer_list *t)

/* no overflow bits in status */
if (!(uart_handle_sysrq_char(port, ch)))
- uart_insert_char(port, status, 0, ch, flg);
+ uart_insert_char(port, status, 0, ch, TTY_NORMAL);
}

tty_flip_buffer_push(&port->state->port);
--
2.38.1