serial: 8250: create lsr_save_mask

Allow drivers to alter LSR save mask.

Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://lore.kernel.org/r/20220624204210.11112-3-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:42:06 +03:00 committed by Greg Kroah-Hartman
parent f8ba5680a5
commit 507bd6fbaa
4 changed files with 7 additions and 2 deletions

View File

@ -138,7 +138,7 @@ static inline u16 serial_lsr_in(struct uart_8250_port *up)
u16 lsr = up->lsr_saved_flags; u16 lsr = up->lsr_saved_flags;
lsr |= serial_in(up, UART_LSR); lsr |= serial_in(up, UART_LSR);
up->lsr_saved_flags = lsr & LSR_SAVE_FLAGS; up->lsr_saved_flags = lsr & up->lsr_save_mask;
return lsr; return lsr;
} }

View File

@ -1007,6 +1007,7 @@ int serial8250_register_8250_port(const struct uart_8250_port *up)
uart->port.rs485 = up->port.rs485; uart->port.rs485 = up->port.rs485;
uart->rs485_start_tx = up->rs485_start_tx; uart->rs485_start_tx = up->rs485_start_tx;
uart->rs485_stop_tx = up->rs485_stop_tx; uart->rs485_stop_tx = up->rs485_stop_tx;
uart->lsr_save_mask = up->lsr_save_mask;
uart->dma = up->dma; uart->dma = up->dma;
/* Take tx_loadsz from fifosize if it wasn't set separately */ /* Take tx_loadsz from fifosize if it wasn't set separately */
@ -1094,6 +1095,9 @@ int serial8250_register_8250_port(const struct uart_8250_port *up)
ret = 0; ret = 0;
} }
if (!uart->lsr_save_mask)
uart->lsr_save_mask = LSR_SAVE_FLAGS; /* Use default LSR mask */
/* Initialise interrupt backoff work if required */ /* Initialise interrupt backoff work if required */
if (up->overrun_backoff_time_ms > 0) { if (up->overrun_backoff_time_ms > 0) {
uart->overrun_backoff_time_ms = uart->overrun_backoff_time_ms =

View File

@ -129,7 +129,7 @@ static void dw8250_tx_wait_empty(struct uart_port *p)
while (tries--) { while (tries--) {
lsr = readb (p->membase + (UART_LSR << p->regshift)); lsr = readb (p->membase + (UART_LSR << p->regshift));
up->lsr_saved_flags |= lsr & LSR_SAVE_FLAGS; up->lsr_saved_flags |= lsr & up->lsr_save_mask;
if (lsr & UART_LSR_TEMT) if (lsr & UART_LSR_TEMT)
break; break;

View File

@ -120,6 +120,7 @@ struct uart_8250_port {
*/ */
#define LSR_SAVE_FLAGS UART_LSR_BRK_ERROR_BITS #define LSR_SAVE_FLAGS UART_LSR_BRK_ERROR_BITS
u16 lsr_saved_flags; u16 lsr_saved_flags;
u16 lsr_save_mask;
#define MSR_SAVE_FLAGS UART_MSR_ANY_DELTA #define MSR_SAVE_FLAGS UART_MSR_ANY_DELTA
unsigned char msr_saved_flags; unsigned char msr_saved_flags;