hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/drivers/tty/serial/8250/8250_dma.c
....@@ -11,7 +11,7 @@
1111
1212 #include "8250.h"
1313
14
-#ifdef CONFIG_ARCH_ROCKCHIP
14
+#if defined(CONFIG_ARCH_ROCKCHIP) && defined(CONFIG_NO_GKI)
1515 #define MAX_TX_BYTES 64
1616 #define MAX_FIFO_SIZE 64
1717 #define UART_RFL_16550A 0x21
....@@ -40,18 +40,13 @@
4040 uart_write_wakeup(&p->port);
4141
4242 ret = serial8250_tx_dma(p);
43
- if (ret) {
44
- p->ier |= UART_IER_THRI;
45
-#ifdef CONFIG_ARCH_ROCKCHIP
46
- p->ier |= UART_IER_PTIME;
47
-#endif
48
- serial_port_out(&p->port, UART_IER, p->ier);
49
- }
43
+ if (ret)
44
+ serial8250_set_THRI(p);
5045
5146 spin_unlock_irqrestore(&p->port.lock, flags);
5247 }
5348
54
-#ifdef CONFIG_ARCH_ROCKCHIP
49
+#if defined(CONFIG_ARCH_ROCKCHIP) && defined(CONFIG_NO_GKI)
5550
5651 static void __dma_rx_complete(void *param)
5752 {
....@@ -110,10 +105,19 @@
110105 struct uart_8250_dma *dma = p->dma;
111106 struct circ_buf *xmit = &p->port.state->xmit;
112107 struct dma_async_tx_descriptor *desc;
108
+ struct uart_port *up = &p->port;
113109 int ret;
114110
115
- if (dma->tx_running)
111
+ if (dma->tx_running) {
112
+ if (up->x_char) {
113
+ dmaengine_pause(dma->txchan);
114
+ uart_xchar_out(up, UART_TX);
115
+ dmaengine_resume(dma->txchan);
116
+ }
116117 return 0;
118
+ } else if (up->x_char) {
119
+ uart_xchar_out(up, UART_TX);
120
+ }
117121
118122 if (uart_tx_stopped(&p->port) || uart_circ_empty(xmit)) {
119123 /* We have been called from __dma_tx_complete() */
....@@ -122,7 +126,7 @@
122126 }
123127
124128 dma->tx_size = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
125
-#ifdef CONFIG_ARCH_ROCKCHIP
129
+#if defined(CONFIG_ARCH_ROCKCHIP) && defined(CONFIG_NO_GKI)
126130 if (dma->tx_size < MAX_TX_BYTES) {
127131 ret = -EBUSY;
128132 goto err;
....@@ -149,13 +153,7 @@
149153 dma_async_issue_pending(dma->txchan);
150154 if (dma->tx_err) {
151155 dma->tx_err = 0;
152
- if (p->ier & UART_IER_THRI) {
153
- p->ier &= ~UART_IER_THRI;
154
-#ifdef CONFIG_ARCH_ROCKCHIP
155
- p->ier &= ~UART_IER_PTIME;
156
-#endif
157
- serial_out(p, UART_IER, p->ier);
158
- }
156
+ serial8250_clear_THRI(p);
159157 }
160158 return 0;
161159 err:
....@@ -163,7 +161,7 @@
163161 return ret;
164162 }
165163
166
-#ifdef CONFIG_ARCH_ROCKCHIP
164
+#if defined(CONFIG_ARCH_ROCKCHIP) && defined(CONFIG_NO_GKI)
167165
168166 int serial8250_rx_dma(struct uart_8250_port *p)
169167 {
....@@ -275,7 +273,7 @@
275273 dma->rxconf.direction = DMA_DEV_TO_MEM;
276274 dma->rxconf.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
277275 dma->rxconf.src_addr = rx_dma_addr + UART_RX;
278
-#ifdef CONFIG_ARCH_ROCKCHIP
276
+#if defined(CONFIG_ARCH_ROCKCHIP) && defined(CONFIG_NO_GKI)
279277 if ((p->port.fifosize / 4) < 16)
280278 dma->rxconf.src_maxburst = p->port.fifosize / 4;
281279 else
....@@ -285,7 +283,7 @@
285283 dma->txconf.direction = DMA_MEM_TO_DEV;
286284 dma->txconf.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
287285 dma->txconf.dst_addr = tx_dma_addr + UART_TX;
288
-#ifdef CONFIG_ARCH_ROCKCHIP
286
+#if defined(CONFIG_ARCH_ROCKCHIP) && defined(CONFIG_NO_GKI)
289287 dma->txconf.dst_maxburst = 16;
290288 #endif
291289 dma_cap_zero(mask);
....@@ -301,17 +299,17 @@
301299 /* 8250 rx dma requires dmaengine driver to support pause/terminate */
302300 ret = dma_get_slave_caps(dma->rxchan, &caps);
303301 if (ret)
304
- goto err_rx;
302
+ goto release_rx;
305303 if (!caps.cmd_pause || !caps.cmd_terminate ||
306304 caps.residue_granularity == DMA_RESIDUE_GRANULARITY_DESCRIPTOR) {
307305 ret = -EINVAL;
308
- goto err_rx;
306
+ goto release_rx;
309307 }
310308
311309 dmaengine_slave_config(dma->rxchan, &dma->rxconf);
312310
313311 /* RX buffer */
314
-#ifdef CONFIG_ARCH_ROCKCHIP
312
+#if defined(CONFIG_ARCH_ROCKCHIP) && defined(CONFIG_NO_GKI)
315313 if (!dma->rx_size)
316314 dma->rx_size = PAGE_SIZE * 2;
317315 #else
....@@ -321,10 +319,9 @@
321319
322320 dma->rx_buf = dma_alloc_coherent(dma->rxchan->device->dev, dma->rx_size,
323321 &dma->rx_addr, GFP_KERNEL);
324
-
325322 if (!dma->rx_buf) {
326323 ret = -ENOMEM;
327
- goto err_rx;
324
+ goto release_rx;
328325 }
329326
330327 /* Get a channel for TX */
....@@ -352,13 +349,12 @@
352349 dev_info_ratelimited(p->port.dev, "got rx dma channels only\n");
353350 }
354351
355
-#ifdef CONFIG_ARCH_ROCKCHIP
352
+#if defined(CONFIG_ARCH_ROCKCHIP) && defined(CONFIG_NO_GKI)
356353 /* start dma for rx*/
357354 serial8250_start_rx_dma(p);
358355 #endif
359356 return 0;
360
-
361
-err_rx:
357
+release_rx:
362358 dma_release_channel(dma->rxchan);
363359 return ret;
364360 }
....@@ -377,7 +373,7 @@
377373 dma->rx_addr);
378374 dma_release_channel(dma->rxchan);
379375 dma->rxchan = NULL;
380
-#ifdef CONFIG_ARCH_ROCKCHIP
376
+#if defined(CONFIG_ARCH_ROCKCHIP) && defined(CONFIG_NO_GKI)
381377 dma->rx_running = 0;
382378 #endif
383379 /* Release TX resources */