serial: msm_geni_serial: Enable/Disable Frame, Break error, CTS interrupts

Currently Rx Frame & Rx Break error, CTS interrupts are
enabled by default.

During probe, if CTS interrupt is asserted and/or if UART
Rx line is low the CTS/Frame/Break errors cannot be handled
since port is closed/without a client resulting to crash
in isr handler.

Handle this situation by enabling the Rx Frame error,
Rx Break error and CTS interrupts only if Port is in
open state. Disable these interrupts if port is in
closed state.

Change-Id: Iae93903ff51ad6fdc74bd78320c61d8ed050d522
Signed-off-by: Visweswara Tanuku <quic_vtanuku@quicinc.com>
This commit is contained in:
Visweswara Tanuku 2023-11-17 11:07:19 -08:00 committed by Prasanna S
parent 464c1bf1a0
commit 85c7d8f729

View File

@ -793,6 +793,18 @@ static void msm_geni_serial_enable_interrupts(struct uart_port *uport)
geni_m_irq_en |= M_IRQ_BITS;
geni_s_irq_en |= S_IRQ_BITS;
/* Enable Rx Frame error & Rx Break error, CTS interrupts only if Port is in open state */
if (uport->state && uport->state->port.tty) {
geni_m_irq_en |= (M_IO_DATA_DEASSERT_EN | M_IO_DATA_ASSERT_EN);
geni_s_irq_en |= (S_GP_IRQ_1_EN | S_GP_IRQ_2_EN | S_GP_IRQ_3_EN);
} else {
geni_m_irq_en &= ~(M_IO_DATA_DEASSERT_EN | M_IO_DATA_ASSERT_EN);
geni_s_irq_en &= ~(S_GP_IRQ_1_EN | S_GP_IRQ_2_EN | S_GP_IRQ_3_EN);
}
UART_LOG_DBG(port->ipc_log_irqstatus, uport->dev,
"%s: geni_m_irq_en = 0x%x geni_s_irq_en = 0x%x\n",
__func__, geni_m_irq_en, geni_s_irq_en);
if (port->gsi_mode) {
geni_m_irq_en &= ~M_RX_FIFO_WATERMARK_EN;
geni_s_irq_en &= ~S_RX_FIFO_WATERMARK_EN;