2022-11-23 09:55:08

by Jiri Slaby

[permalink] [raw]
Subject: [PATCH 1/2] serial: atmel: cleanup atmel_start+stop_tx()

Define local variables holding information about whether pdc or dma is
used in the HW. These are retested several times by calls to
atmel_use_pdc_tx() and atmel_use_dma_tx(). So to make the code more
readable, simply cache the values.

This is also a preparatory patch for the next one (where is_pdc is used
once more in atmel_stop_tx()).

Cc: Richard Genoud <[email protected]>
Cc: Nicolas Ferre <[email protected]>
Cc: Alexandre Belloni <[email protected]>
Cc: Claudiu Beznea <[email protected]>
Cc: [email protected]
Reported-by: Michael Walle <[email protected]>
Signed-off-by: Jiri Slaby (SUSE) <[email protected]>
---
drivers/tty/serial/atmel_serial.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
index 4ca04676c406..65f63dccfd72 100644
--- a/drivers/tty/serial/atmel_serial.c
+++ b/drivers/tty/serial/atmel_serial.c
@@ -552,8 +552,9 @@ static u_int atmel_get_mctrl(struct uart_port *port)
static void atmel_stop_tx(struct uart_port *port)
{
struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
+ bool is_pdc = atmel_use_pdc_tx(port);

- if (atmel_use_pdc_tx(port)) {
+ if (is_pdc) {
/* disable PDC transmit */
atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTDIS);
}
@@ -572,7 +573,6 @@ static void atmel_stop_tx(struct uart_port *port)
if (atmel_uart_is_half_duplex(port))
if (!atomic_read(&atmel_port->tasklet_shutdown))
atmel_start_rx(port);
-
}

/*
@@ -581,20 +581,22 @@ static void atmel_stop_tx(struct uart_port *port)
static void atmel_start_tx(struct uart_port *port)
{
struct atmel_uart_port *atmel_port = to_atmel_uart_port(port);
+ bool is_pdc = atmel_use_pdc_tx(port);
+ bool is_dma = is_pdc || atmel_use_dma_tx(port);

- if (atmel_use_pdc_tx(port) && (atmel_uart_readl(port, ATMEL_PDC_PTSR)
+ if (is_pdc && (atmel_uart_readl(port, ATMEL_PDC_PTSR)
& ATMEL_PDC_TXTEN))
/* The transmitter is already running. Yes, we
really need this.*/
return;

- if (atmel_use_pdc_tx(port) || atmel_use_dma_tx(port))
- if (atmel_uart_is_half_duplex(port))
- atmel_stop_rx(port);
+ if (is_dma && atmel_uart_is_half_duplex(port))
+ atmel_stop_rx(port);

- if (atmel_use_pdc_tx(port))
+ if (is_pdc) {
/* re-enable PDC transmit */
atmel_uart_writel(port, ATMEL_PDC_PTCR, ATMEL_PDC_TXTEN);
+ }

/* Enable interrupts */
atmel_uart_writel(port, ATMEL_US_IER, atmel_port->tx_done_mask);
--
2.38.1


2022-11-23 10:29:12

by Michael Walle

[permalink] [raw]
Subject: Re: [PATCH 1/2] serial: atmel: cleanup atmel_start+stop_tx()

Am 2022-11-23 09:27, schrieb Jiri Slaby (SUSE):
> Define local variables holding information about whether pdc or dma is
> used in the HW. These are retested several times by calls to
> atmel_use_pdc_tx() and atmel_use_dma_tx(). So to make the code more
> readable, simply cache the values.
>
> This is also a preparatory patch for the next one (where is_pdc is used
> once more in atmel_stop_tx()).
>
> Cc: Richard Genoud <[email protected]>
> Cc: Nicolas Ferre <[email protected]>
> Cc: Alexandre Belloni <[email protected]>
> Cc: Claudiu Beznea <[email protected]>
> Cc: [email protected]
> Reported-by: Michael Walle <[email protected]>
> Signed-off-by: Jiri Slaby (SUSE) <[email protected]>

Already merged, but:
Tested-by: Michael Walle <[email protected]>

Thanks,
-michael

2022-11-23 13:28:01

by Richard Genoud

[permalink] [raw]
Subject: Re: [PATCH 1/2] serial: atmel: cleanup atmel_start+stop_tx()

Le 23/11/2022 à 09:50, Michael Walle a écrit :
> Am 2022-11-23 09:27, schrieb Jiri Slaby (SUSE):
>> Define local variables holding information about whether pdc or dma is
>> used in the HW. These are retested several times by calls to
>> atmel_use_pdc_tx() and atmel_use_dma_tx(). So to make the code more
>> readable, simply cache the values.
>>
>> This is also a preparatory patch for the next one (where is_pdc is used
>> once more in atmel_stop_tx()).
>>
>> Cc: Richard Genoud <[email protected]>
>> Cc: Nicolas Ferre <[email protected]>
>> Cc: Alexandre Belloni <[email protected]>
>> Cc: Claudiu Beznea <[email protected]>
>> Cc: [email protected]
>> Reported-by: Michael Walle <[email protected]>
>> Signed-off-by: Jiri Slaby (SUSE) <[email protected]>
>
> Already merged, but:
> Tested-by: Michael Walle <[email protected]>
Acked-by: Richard Genoud <[email protected]>
>
> Thanks,
> -michael
Thanks !