serial: Consolidate BOTH_EMPTY use

Per file BOTH_EMPTY defines are littering our source code here and
there. Define once in serial.h and create helper for the check
too.

Reviewed-by: Jiri Slaby <jirislaby@kernel.org>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://lore.kernel.org/r/20220624205424.12686-7-ilpo.jarvinen@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Ilpo Järvinen 2022-06-24 23:54:24 +03:00 committed by Greg Kroah-Hartman
parent eb47b59afb
commit 34619de1b8
10 changed files with 31 additions and 33 deletions

View File

@ -8,6 +8,7 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/serial.h>
#include <linux/serial_reg.h> #include <linux/serial_reg.h>
#include <asm/addrspace.h> #include <asm/addrspace.h>
#include <asm/setup.h> #include <asm/setup.h>
@ -29,15 +30,15 @@ static inline void prom_putchar_wait(void __iomem *reg, u32 mask, u32 val)
} while (1); } while (1);
} }
#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
static void prom_putchar_ar71xx(char ch) static void prom_putchar_ar71xx(char ch)
{ {
void __iomem *base = (void __iomem *)(KSEG1ADDR(AR71XX_UART_BASE)); void __iomem *base = (void __iomem *)(KSEG1ADDR(AR71XX_UART_BASE));
prom_putchar_wait(base + UART_LSR * 4, BOTH_EMPTY, BOTH_EMPTY); prom_putchar_wait(base + UART_LSR * 4, UART_LSR_BOTH_EMPTY,
UART_LSR_BOTH_EMPTY);
__raw_writel((unsigned char)ch, base + UART_TX * 4); __raw_writel((unsigned char)ch, base + UART_TX * 4);
prom_putchar_wait(base + UART_LSR * 4, BOTH_EMPTY, BOTH_EMPTY); prom_putchar_wait(base + UART_LSR * 4, UART_LSR_BOTH_EMPTY,
UART_LSR_BOTH_EMPTY);
} }
static void prom_putchar_ar933x(char ch) static void prom_putchar_ar933x(char ch)

View File

@ -33,9 +33,8 @@ struct old_serial_port {
#define NUM_DISABLE_TIMEOUTS 3 #define NUM_DISABLE_TIMEOUTS 3
/* buffer timeout in ms */ /* buffer timeout in ms */
#define SPK_TIMEOUT 100 #define SPK_TIMEOUT 100
#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
#define spk_serial_tx_busy() \ #define spk_serial_tx_busy() \
((inb(speakup_info.port_tts + UART_LSR) & BOTH_EMPTY) != BOTH_EMPTY) (!uart_lsr_tx_empty(inb(speakup_info.port_tts + UART_LSR)))
#endif #endif

View File

@ -84,8 +84,6 @@ static void serial8250_early_out(struct uart_port *port, int offset, int value)
} }
} }
#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
static void serial_putc(struct uart_port *port, unsigned char c) static void serial_putc(struct uart_port *port, unsigned char c)
{ {
unsigned int status; unsigned int status;
@ -94,7 +92,7 @@ static void serial_putc(struct uart_port *port, unsigned char c)
for (;;) { for (;;) {
status = serial8250_early_in(port, UART_LSR); status = serial8250_early_in(port, UART_LSR);
if ((status & BOTH_EMPTY) == BOTH_EMPTY) if (uart_lsr_tx_empty(status))
break; break;
cpu_relax(); cpu_relax();
} }

View File

@ -50,8 +50,6 @@
#define DEBUG_AUTOCONF(fmt...) do { } while (0) #define DEBUG_AUTOCONF(fmt...) do { } while (0)
#endif #endif
#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
/* /*
* Here we define the default xmit fifo size used for each type of UART. * Here we define the default xmit fifo size used for each type of UART.
*/ */
@ -1843,7 +1841,7 @@ void serial8250_tx_chars(struct uart_8250_port *up)
if (uart_circ_empty(xmit)) if (uart_circ_empty(xmit))
break; break;
if ((up->capabilities & UART_CAP_HFIFO) && if ((up->capabilities & UART_CAP_HFIFO) &&
(serial_in(up, UART_LSR) & BOTH_EMPTY) != BOTH_EMPTY) !uart_lsr_tx_empty(serial_in(up, UART_LSR)))
break; break;
/* The BCM2835 MINI UART THRE bit is really a not-full bit. */ /* The BCM2835 MINI UART THRE bit is really a not-full bit. */
if ((up->capabilities & UART_CAP_MINI) && if ((up->capabilities & UART_CAP_MINI) &&
@ -2003,7 +2001,7 @@ static unsigned int serial8250_tx_empty(struct uart_port *port)
serial8250_rpm_put(up); serial8250_rpm_put(up);
return (lsr & BOTH_EMPTY) == BOTH_EMPTY ? TIOCSER_TEMT : 0; return uart_lsr_tx_empty(lsr) ? TIOCSER_TEMT : 0;
} }
unsigned int serial8250_do_get_mctrl(struct uart_port *port) unsigned int serial8250_do_get_mctrl(struct uart_port *port)
@ -2151,7 +2149,7 @@ static void serial8250_put_poll_char(struct uart_port *port,
else else
serial_port_out(port, UART_IER, 0); serial_port_out(port, UART_IER, 0);
wait_for_xmitr(up, BOTH_EMPTY); wait_for_xmitr(up, UART_LSR_BOTH_EMPTY);
/* /*
* Send the character out. * Send the character out.
*/ */
@ -2161,7 +2159,7 @@ static void serial8250_put_poll_char(struct uart_port *port,
* Finally, wait for transmitter to become empty * Finally, wait for transmitter to become empty
* and restore the IER * and restore the IER
*/ */
wait_for_xmitr(up, BOTH_EMPTY); wait_for_xmitr(up, UART_LSR_BOTH_EMPTY);
serial_port_out(port, UART_IER, ier); serial_port_out(port, UART_IER, ier);
serial8250_rpm_put(up); serial8250_rpm_put(up);
} }
@ -3431,7 +3429,7 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s,
* Finally, wait for transmitter to become empty * Finally, wait for transmitter to become empty
* and restore the IER * and restore the IER
*/ */
wait_for_xmitr(up, BOTH_EMPTY); wait_for_xmitr(up, UART_LSR_BOTH_EMPTY);
if (em485) { if (em485) {
mdelay(port->rs485.delay_rts_after_send); mdelay(port->rs485.delay_rts_after_send);

View File

@ -19,6 +19,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/serial.h>
#include <linux/serial_reg.h> #include <linux/serial_reg.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/slab.h> #include <linux/slab.h>
@ -1102,8 +1103,6 @@ serial_omap_type(struct uart_port *port)
return up->name; return up->name;
} }
#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
static void __maybe_unused wait_for_xmitr(struct uart_omap_port *up) static void __maybe_unused wait_for_xmitr(struct uart_omap_port *up)
{ {
unsigned int status, tmout = 10000; unsigned int status, tmout = 10000;
@ -1118,7 +1117,7 @@ static void __maybe_unused wait_for_xmitr(struct uart_omap_port *up)
if (--tmout == 0) if (--tmout == 0)
break; break;
udelay(1); udelay(1);
} while ((status & BOTH_EMPTY) != BOTH_EMPTY); } while (!uart_lsr_tx_empty(status));
/* Wait up to 1s for flow control if necessary */ /* Wait up to 1s for flow control if necessary */
if (up->port.flags & UPF_CONS_FLOW) { if (up->port.flags & UPF_CONS_FLOW) {
@ -1186,7 +1185,7 @@ static void omap_serial_early_putc(struct uart_port *port, unsigned char c)
for (;;) { for (;;) {
status = omap_serial_early_in(port, UART_LSR); status = omap_serial_early_in(port, UART_LSR);
if ((status & BOTH_EMPTY) == BOTH_EMPTY) if (uart_lsr_tx_empty(status))
break; break;
cpu_relax(); cpu_relax();
} }

View File

@ -3,6 +3,7 @@
*Copyright (C) 2011 LAPIS Semiconductor Co., Ltd. *Copyright (C) 2011 LAPIS Semiconductor Co., Ltd.
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/serial.h>
#include <linux/serial_reg.h> #include <linux/serial_reg.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/module.h> #include <linux/module.h>
@ -189,8 +190,6 @@ enum {
#define PCH_UART_HAL_LOOP (PCH_UART_MCR_LOOP) #define PCH_UART_HAL_LOOP (PCH_UART_MCR_LOOP)
#define PCH_UART_HAL_AFE (PCH_UART_MCR_AFE) #define PCH_UART_HAL_AFE (PCH_UART_MCR_AFE)
#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
#define DEFAULT_UARTCLK 1843200 /* 1.8432 MHz */ #define DEFAULT_UARTCLK 1843200 /* 1.8432 MHz */
#define CMITC_UARTCLK 192000000 /* 192.0000 MHz */ #define CMITC_UARTCLK 192000000 /* 192.0000 MHz */
#define FRI2_64_UARTCLK 64000000 /* 64.0000 MHz */ #define FRI2_64_UARTCLK 64000000 /* 64.0000 MHz */
@ -1516,7 +1515,7 @@ static void pch_uart_put_poll_char(struct uart_port *port,
* Finally, wait for transmitter to become empty * Finally, wait for transmitter to become empty
* and restore the IER * and restore the IER
*/ */
wait_for_xmitr(priv, BOTH_EMPTY); wait_for_xmitr(priv, UART_LSR_BOTH_EMPTY);
iowrite8(ier, priv->membase + UART_IER); iowrite8(ier, priv->membase + UART_IER);
} }
#endif /* CONFIG_CONSOLE_POLL */ #endif /* CONFIG_CONSOLE_POLL */
@ -1602,7 +1601,7 @@ pch_console_write(struct console *co, const char *s, unsigned int count)
* Finally, wait for transmitter to become empty * Finally, wait for transmitter to become empty
* and restore the IER * and restore the IER
*/ */
wait_for_xmitr(priv, BOTH_EMPTY); wait_for_xmitr(priv, UART_LSR_BOTH_EMPTY);
iowrite8(ier, priv->membase + UART_IER); iowrite8(ier, priv->membase + UART_IER);
if (port_locked) if (port_locked)

View File

@ -23,6 +23,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/console.h> #include <linux/console.h>
#include <linux/sysrq.h> #include <linux/sysrq.h>
#include <linux/serial.h>
#include <linux/serial_reg.h> #include <linux/serial_reg.h>
#include <linux/circ_buf.h> #include <linux/circ_buf.h>
#include <linux/delay.h> #include <linux/delay.h>
@ -575,8 +576,6 @@ static struct uart_driver serial_pxa_reg;
#ifdef CONFIG_SERIAL_PXA_CONSOLE #ifdef CONFIG_SERIAL_PXA_CONSOLE
#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
/* /*
* Wait for transmitter & holding register to empty * Wait for transmitter & holding register to empty
*/ */
@ -594,7 +593,7 @@ static void wait_for_xmitr(struct uart_pxa_port *up)
if (--tmout == 0) if (--tmout == 0)
break; break;
udelay(1); udelay(1);
} while ((status & BOTH_EMPTY) != BOTH_EMPTY); } while (!uart_lsr_tx_empty(status));
/* Wait up to 1s for flow control if necessary */ /* Wait up to 1s for flow control if necessary */
if (up->port.flags & UPF_CONS_FLOW) { if (up->port.flags & UPF_CONS_FLOW) {

View File

@ -1249,8 +1249,6 @@ static int sunsu_kbd_ms_init(struct uart_sunsu_port *up)
#ifdef CONFIG_SERIAL_SUNSU_CONSOLE #ifdef CONFIG_SERIAL_SUNSU_CONSOLE
#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
/* /*
* Wait for transmitter & holding register to empty * Wait for transmitter & holding register to empty
*/ */
@ -1268,7 +1266,7 @@ static void wait_for_xmitr(struct uart_sunsu_port *up)
if (--tmout == 0) if (--tmout == 0)
break; break;
udelay(1); udelay(1);
} while ((status & BOTH_EMPTY) != BOTH_EMPTY); } while (!uart_lsr_tx_empty(status));
/* Wait up to 1s for flow control if necessary */ /* Wait up to 1s for flow control if necessary */
if (up->port.flags & UPF_CONS_FLOW) { if (up->port.flags & UPF_CONS_FLOW) {

View File

@ -703,8 +703,6 @@ static int siu_init_ports(struct platform_device *pdev)
#ifdef CONFIG_SERIAL_VR41XX_CONSOLE #ifdef CONFIG_SERIAL_VR41XX_CONSOLE
#define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
static void wait_for_xmitr(struct uart_port *port) static void wait_for_xmitr(struct uart_port *port)
{ {
int timeout = 10000; int timeout = 10000;
@ -715,7 +713,7 @@ static void wait_for_xmitr(struct uart_port *port)
if (lsr & UART_LSR_BI) if (lsr & UART_LSR_BI)
lsr_break_flag[port->line] = UART_LSR_BI; lsr_break_flag[port->line] = UART_LSR_BI;
if ((lsr & BOTH_EMPTY) == BOTH_EMPTY) if (uart_lsr_tx_empty(lsr))
break; break;
} while (timeout-- > 0); } while (timeout-- > 0);

View File

@ -10,10 +10,19 @@
#define _LINUX_SERIAL_H #define _LINUX_SERIAL_H
#include <uapi/linux/serial.h> #include <uapi/linux/serial.h>
#include <uapi/linux/serial_reg.h>
/* Helper for dealing with UART_LCR_WLEN* defines */ /* Helper for dealing with UART_LCR_WLEN* defines */
#define UART_LCR_WLEN(x) ((x) - 5) #define UART_LCR_WLEN(x) ((x) - 5)
/* FIFO and shifting register empty */
#define UART_LSR_BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
static inline bool uart_lsr_tx_empty(u16 lsr)
{
return (lsr & UART_LSR_BOTH_EMPTY) == UART_LSR_BOTH_EMPTY;
}
/* /*
* Counters of the input lines (CTS, DSR, RI, CD) interrupts * Counters of the input lines (CTS, DSR, RI, CD) interrupts
*/ */