mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
TTY/Serial fixes for 6.8-rc5
Here are 3 small tty and serial driver fixes for 6.8-rc5: - revert a 8250_pci1xxxx off-by-one change that was incorrect - 2 changes to fix the transmit path of the mxs-auart driver, fixing a regression in the 6.2 release All of these have been in linux-next for over a week with no reported issues. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCZdDJUg8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ym4BACfe9/pmdSg9FUqXz1U3lTImFeYMEsAniVius/E OB3drtgoWp6bkxP0QdNJ =EnCw -----END PGP SIGNATURE----- Merge tag 'tty-6.8-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty Pull tty / serial fixes from Greg KH: "Here are three small tty and serial driver fixes for 6.8-rc5: - revert a 8250_pci1xxxx off-by-one change that was incorrect - two changes to fix the transmit path of the mxs-auart driver, fixing a regression in the 6.2 release All of these have been in linux-next for over a week with no reported issues" * tag 'tty-6.8-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: serial: mxs-auart: fix tx serial: core: introduce uart_port_tx_flags() serial: 8250_pci1xxxx: partially revert off by one patch
This commit is contained in:
commit
4b2981b227
@ -302,7 +302,7 @@ static void pci1xxxx_process_read_data(struct uart_port *port,
|
||||
* to read, the data is received one byte at a time.
|
||||
*/
|
||||
while (valid_burst_count--) {
|
||||
if (*buff_index >= (RX_BUF_SIZE - UART_BURST_SIZE))
|
||||
if (*buff_index > (RX_BUF_SIZE - UART_BURST_SIZE))
|
||||
break;
|
||||
burst_buf = (u32 *)&rx_buff[*buff_index];
|
||||
*burst_buf = readl(port->membase + UART_RX_BURST_FIFO);
|
||||
|
@ -605,13 +605,16 @@ static void mxs_auart_tx_chars(struct mxs_auart_port *s)
|
||||
return;
|
||||
}
|
||||
|
||||
pending = uart_port_tx(&s->port, ch,
|
||||
pending = uart_port_tx_flags(&s->port, ch, UART_TX_NOSTOP,
|
||||
!(mxs_read(s, REG_STAT) & AUART_STAT_TXFF),
|
||||
mxs_write(ch, s, REG_DATA));
|
||||
if (pending)
|
||||
mxs_set(AUART_INTR_TXIEN, s, REG_INTR);
|
||||
else
|
||||
mxs_clr(AUART_INTR_TXIEN, s, REG_INTR);
|
||||
|
||||
if (uart_tx_stopped(&s->port))
|
||||
mxs_auart_stop_tx(&s->port);
|
||||
}
|
||||
|
||||
static void mxs_auart_rx_char(struct mxs_auart_port *s)
|
||||
|
@ -748,8 +748,17 @@ struct uart_driver {
|
||||
|
||||
void uart_write_wakeup(struct uart_port *port);
|
||||
|
||||
#define __uart_port_tx(uport, ch, tx_ready, put_char, tx_done, for_test, \
|
||||
for_post) \
|
||||
/**
|
||||
* enum UART_TX_FLAGS -- flags for uart_port_tx_flags()
|
||||
*
|
||||
* @UART_TX_NOSTOP: don't call port->ops->stop_tx() on empty buffer
|
||||
*/
|
||||
enum UART_TX_FLAGS {
|
||||
UART_TX_NOSTOP = BIT(0),
|
||||
};
|
||||
|
||||
#define __uart_port_tx(uport, ch, flags, tx_ready, put_char, tx_done, \
|
||||
for_test, for_post) \
|
||||
({ \
|
||||
struct uart_port *__port = (uport); \
|
||||
struct circ_buf *xmit = &__port->state->xmit; \
|
||||
@ -777,7 +786,7 @@ void uart_write_wakeup(struct uart_port *port);
|
||||
if (pending < WAKEUP_CHARS) { \
|
||||
uart_write_wakeup(__port); \
|
||||
\
|
||||
if (pending == 0) \
|
||||
if (!((flags) & UART_TX_NOSTOP) && pending == 0) \
|
||||
__port->ops->stop_tx(__port); \
|
||||
} \
|
||||
\
|
||||
@ -812,7 +821,7 @@ void uart_write_wakeup(struct uart_port *port);
|
||||
*/
|
||||
#define uart_port_tx_limited(port, ch, count, tx_ready, put_char, tx_done) ({ \
|
||||
unsigned int __count = (count); \
|
||||
__uart_port_tx(port, ch, tx_ready, put_char, tx_done, __count, \
|
||||
__uart_port_tx(port, ch, 0, tx_ready, put_char, tx_done, __count, \
|
||||
__count--); \
|
||||
})
|
||||
|
||||
@ -826,8 +835,21 @@ void uart_write_wakeup(struct uart_port *port);
|
||||
* See uart_port_tx_limited() for more details.
|
||||
*/
|
||||
#define uart_port_tx(port, ch, tx_ready, put_char) \
|
||||
__uart_port_tx(port, ch, tx_ready, put_char, ({}), true, ({}))
|
||||
__uart_port_tx(port, ch, 0, tx_ready, put_char, ({}), true, ({}))
|
||||
|
||||
|
||||
/**
|
||||
* uart_port_tx_flags -- transmit helper for uart_port with flags
|
||||
* @port: uart port
|
||||
* @ch: variable to store a character to be written to the HW
|
||||
* @flags: %UART_TX_NOSTOP or similar
|
||||
* @tx_ready: can HW accept more data function
|
||||
* @put_char: function to write a character
|
||||
*
|
||||
* See uart_port_tx_limited() for more details.
|
||||
*/
|
||||
#define uart_port_tx_flags(port, ch, flags, tx_ready, put_char) \
|
||||
__uart_port_tx(port, ch, flags, tx_ready, put_char, ({}), true, ({}))
|
||||
/*
|
||||
* Baud rate helpers.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user