Skip to content

Commit

Permalink
tty: serial: qcom_geni_serial: Remove unnecessary memory barrier
Browse files Browse the repository at this point in the history
While initiating TX, only the register reads need to be ordered. The
register write order either is achieved due to data dependency or is
not required.

Use readl to achieve the read order and remove the unnecessary barrier.

Signed-off-by: Karthikeyan Ramasubramanian <kramasub@codeaurora.org>
Reviewed-by: Evan Green <evgreen@chromium.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Karthikeyan Ramasubramanian authored and Greg Kroah-Hartman committed May 14, 2018
1 parent f737175 commit 7fb5b88
Showing 1 changed file with 7 additions and 9 deletions.
16 changes: 7 additions & 9 deletions drivers/tty/serial/qcom_geni_serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -417,20 +417,18 @@ static void qcom_geni_serial_start_tx(struct uart_port *uport)
u32 status;

if (port->xfer_mode == GENI_SE_FIFO) {
status = readl_relaxed(uport->membase + SE_GENI_STATUS);
/*
* readl ensures reading & writing of IRQ_EN register
* is not re-ordered before checking the status of the
* Serial Engine.
*/
status = readl(uport->membase + SE_GENI_STATUS);
if (status & M_GENI_CMD_ACTIVE)
return;

if (!qcom_geni_serial_tx_empty(uport))
return;

/*
* Ensure writing to IRQ_EN & watermark registers are not
* re-ordered before checking the status of the Serial
* Engine and TX FIFO
*/
mb();

irq_en = readl_relaxed(uport->membase + SE_GENI_M_IRQ_EN);
irq_en |= M_TX_FIFO_WATERMARK_EN | M_CMD_DONE_EN;

Expand Down Expand Up @@ -894,7 +892,7 @@ static void qcom_geni_serial_set_termios(struct uart_port *uport,

static unsigned int qcom_geni_serial_tx_empty(struct uart_port *uport)
{
return !readl_relaxed(uport->membase + SE_GENI_TX_FIFO_STATUS);
return !readl(uport->membase + SE_GENI_TX_FIFO_STATUS);
}

#ifdef CONFIG_SERIAL_QCOM_GENI_CONSOLE
Expand Down

0 comments on commit 7fb5b88

Please sign in to comment.