serial: msm_geni_serial: Handle Rx EOT & DMA_DONE after DMA Reset

Upon DMA reset dma_status is cleared, but if Rx EOT and
DMA_DONE bits are still set corresponding data is not
received from rx fifo. This scenario is encountered when
there was a cancel, abort, fsm reset failure.

Handle Rx EOT & DMA_DONE if set after DMA Reset.

Change-Id: Ie0e4e59510c6103cf9794f567cbac99d7a45d867
Signed-off-by: Visweswara Tanuku <quic_vtanuku@quicinc.com>
Signed-off-by: Panicker Harish <quic_pharish@quicinc.com>
This commit is contained in:
Panicker Harish
2024-02-06 12:27:29 +05:30
parent 63b678c6fe
commit 5d50e0d169

View File

@@ -1,7 +1,7 @@
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include <linux/bitmap.h>
@@ -2008,7 +2008,6 @@ static bool handle_rx_dma_xfer(u32 s_irq_status, struct uart_port *uport)
IPC_LOG_MSG(msm_port->ipc_log_misc,
"%s.Reset done. 0x%x.\n", __func__, dma_rx_status);
ret = true;
goto exit;
}
if (dma_rx_status & UART_DMA_RX_ERRS) {
@@ -2063,7 +2062,6 @@ static bool handle_rx_dma_xfer(u32 s_irq_status, struct uart_port *uport)
if (s_irq_status & (S_CMD_CANCEL_EN | S_CMD_ABORT_EN))
ret = true;
exit:
spin_unlock(&msm_port->rx_lock);
return ret;
}