On 27. 11. 22, 14:24, Jisheng Zhang wrote:
+static void bflb_uart_tx_chars(struct uart_port *port)
Again: Are you unable to use the TX helper? If so: * why? * use uart_advance_xmit() at least.
+{ + struct circ_buf *xmit = &port->state->xmit; + unsigned int count; + + if (port->x_char) { + /* Send special char - probably flow control */ + wrl(port, UART_FIFO_WDATA, port->x_char); + port->x_char = 0; + port->icount.tx++; + return; + } + + if (uart_circ_empty(xmit) || uart_tx_stopped(port)) { + bflb_uart_stop_tx(port); + return; + } + + count = BFLB_UART_TX_FIFO_TH; + do { + wrl(port, UART_FIFO_WDATA, xmit->buf[xmit->tail]); + xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); + port->icount.tx++; + if (uart_circ_empty(xmit)) + break; + } while (--count > 0); + + if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) + uart_write_wakeup(port); + + if (uart_circ_empty(xmit)) + bflb_uart_stop_tx(port); +}
-- js suse labs