hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/tty/serial/amba-pl011.c
....@@ -1048,6 +1048,9 @@
10481048 */
10491049 static inline void pl011_dma_rx_stop(struct uart_amba_port *uap)
10501050 {
1051
+ if (!uap->using_rx_dma)
1052
+ return;
1053
+
10511054 /* FIXME. Just disable the DMA enable */
10521055 uap->dmacr &= ~UART011_RXDMAE;
10531056 pl011_write(uap->dmacr, uap, REG_DMACR);
....@@ -1757,8 +1760,17 @@
17571760 static void pl011_unthrottle_rx(struct uart_port *port)
17581761 {
17591762 struct uart_amba_port *uap = container_of(port, struct uart_amba_port, port);
1763
+ unsigned long flags;
17601764
1761
- pl011_enable_interrupts(uap);
1765
+ spin_lock_irqsave(&uap->port.lock, flags);
1766
+
1767
+ uap->im = UART011_RTIM;
1768
+ if (!pl011_dma_rx_running(uap))
1769
+ uap->im |= UART011_RXIM;
1770
+
1771
+ pl011_write(uap->im, uap, REG_IMSC);
1772
+
1773
+ spin_unlock_irqrestore(&uap->port.lock, flags);
17621774 }
17631775
17641776 static int pl011_startup(struct uart_port *port)