Commit 74231ab6 authored by Manikanta Guntupalli's avatar Manikanta Guntupalli Committed by Greg Kroah-Hartman
Browse files

tty: serial: uartps: Relocate cdns_uart_tx_empty to facilitate rs485



Relocate cdns_uart_tx_empty function to avoid prototype statement in
rs485 changes.
Update return check with uart_tx_stopped() in cdns_uart_handle_tx().

Signed-off-by: default avatarManikanta Guntupalli <manikanta.guntupalli@amd.com>
Link: https://lore.kernel.org/r/20240123061655.2150946-3-manikanta.guntupalli@amd.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 32152467
Loading
Loading
Loading
Loading
+19 −17
Original line number Diff line number Diff line
@@ -306,7 +306,22 @@ static void cdns_uart_handle_rx(void *dev_id, unsigned int isrstatus)
}

/**
 * cdns_uart_handle_tx - Handle the bytes to be Txed.
 * cdns_uart_tx_empty -  Check whether TX is empty
 * @port: Handle to the uart port structure
 *
 * Return: TIOCSER_TEMT on success, 0 otherwise
 */
static unsigned int cdns_uart_tx_empty(struct uart_port *port)
{
	unsigned int status;

	status = readl(port->membase + CDNS_UART_SR);
	status &= (CDNS_UART_SR_TXEMPTY | CDNS_UART_SR_TACTIVE);
	return (status == CDNS_UART_SR_TXEMPTY) ? TIOCSER_TEMT : 0;
}

/**
 * cdns_uart_handle_tx - Handle the bytes to be transmitted.
 * @dev_id: Id of the UART port
 * Return: None
 */
@@ -316,7 +331,8 @@ static void cdns_uart_handle_tx(void *dev_id)
	struct circ_buf *xmit = &port->state->xmit;
	unsigned int numbytes;

	if (uart_circ_empty(xmit)) {
	if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
		/* Disable the TX Empty interrupt */
		writel(CDNS_UART_IXR_TXEMPTY, port->membase + CDNS_UART_IDR);
		return;
	}
@@ -587,6 +603,7 @@ static void cdns_uart_start_tx(struct uart_port *port)
	if (uart_circ_empty(&port->state->xmit))
		return;

	/* Clear the TX Empty interrupt */
	writel(CDNS_UART_IXR_TXEMPTY, port->membase + CDNS_UART_ISR);

	cdns_uart_handle_tx(port);
@@ -626,21 +643,6 @@ static void cdns_uart_stop_rx(struct uart_port *port)
	writel(regval, port->membase + CDNS_UART_CR);
}

/**
 * cdns_uart_tx_empty -  Check whether TX is empty
 * @port: Handle to the uart port structure
 *
 * Return: TIOCSER_TEMT on success, 0 otherwise
 */
static unsigned int cdns_uart_tx_empty(struct uart_port *port)
{
	unsigned int status;

	status = readl(port->membase + CDNS_UART_SR) &
		       (CDNS_UART_SR_TXEMPTY | CDNS_UART_SR_TACTIVE);
	return (status == CDNS_UART_SR_TXEMPTY) ? TIOCSER_TEMT : 0;
}

/**
 * cdns_uart_break_ctl - Based on the input ctl we have to start or stop
 *			transmitting char breaks