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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user