NVIDIA: SAUCE: tty/serial: amba-pl011: Fix DMA hang with RTS and CTS enabled

BugLink: https://bugs.launchpad.net/bugs/2080908

Function pl011_throttle_rx calls function pl011_stop_rx() to disable
RX data transfer. This also disables the RX DMA by clearing RXDMAE
bit of DMACR register. To unthrottle RX when DMA is used, function
pl011_unthrottle_rx() is expected to set RXDMAE bit again to
enable RX DMA.

Set RXDMAE in DMACR register while unthrottling RX if RX DMA was
in use.

http://nvbugs/4701188

Signed-off-by: Kartik <kkartik@nvidia.com>
Tested-by: Petlozu Pravareshwar <petlozup@nvidia.com>
Reviewed-by: Petlozu Pravareshwar <petlozup@nvidia.com>
Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Acked-by: Noah Wager <noah.wager@canonical.com>
Acked-by: Jacob Martin <jacob.martin@canonical.com>
Signed-off-by: Noah Wager <noah.wager@canonical.com>
This commit is contained in:
Kartik
2024-06-10 17:34:31 +00:00
committed by Noah Wager
parent d34b3dad7d
commit 57c7e62b86
+5
View File
@@ -1940,6 +1940,11 @@ static void pl011_unthrottle_rx(struct uart_port *port)
} else {
if (uap->vendor->eord_interrupt)
pl011_write(NV_UART011_EORDIM, uap, REG_NV_MIM);
if (uap->using_rx_dma) {
uap->dmacr |= UART011_RXDMAE;
pl011_write(uap->dmacr, uap, REG_DMACR);
}
}
pl011_write(uap->im, uap, REG_IMSC);