forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-11 04dd17822334871b23ea2862f7798fb0e0007777
kernel/drivers/tty/serial/8250/8250_lpss.c
....@@ -14,7 +14,7 @@
1414 #include <linux/dmaengine.h>
1515 #include <linux/dma/dw.h>
1616
17
-#include "8250.h"
17
+#include "8250_dwlib.h"
1818
1919 #define PCI_DEVICE_ID_INTEL_QRK_UARTx 0x0936
2020
....@@ -23,6 +23,13 @@
2323
2424 #define PCI_DEVICE_ID_INTEL_BSW_UART1 0x228a
2525 #define PCI_DEVICE_ID_INTEL_BSW_UART2 0x228c
26
+
27
+#define PCI_DEVICE_ID_INTEL_EHL_UART0 0x4b96
28
+#define PCI_DEVICE_ID_INTEL_EHL_UART1 0x4b97
29
+#define PCI_DEVICE_ID_INTEL_EHL_UART2 0x4b98
30
+#define PCI_DEVICE_ID_INTEL_EHL_UART3 0x4b99
31
+#define PCI_DEVICE_ID_INTEL_EHL_UART4 0x4b9a
32
+#define PCI_DEVICE_ID_INTEL_EHL_UART5 0x4b9b
2633
2734 #define PCI_DEVICE_ID_INTEL_BDW_UART1 0x9ce3
2835 #define PCI_DEVICE_ID_INTEL_BDW_UART2 0x9ce4
....@@ -48,21 +55,25 @@
4855 };
4956
5057 struct lpss8250 {
51
- int line;
58
+ struct dw8250_port_data data;
5259 struct lpss8250_board *board;
5360
5461 /* DMA parameters */
55
- struct uart_8250_dma dma;
5662 struct dw_dma_chip dma_chip;
5763 struct dw_dma_slave dma_param;
5864 u8 dma_maxburst;
5965 };
6066
67
+static inline struct lpss8250 *to_lpss8250(struct dw8250_port_data *data)
68
+{
69
+ return container_of(data, struct lpss8250, data);
70
+}
71
+
6172 static void byt_set_termios(struct uart_port *p, struct ktermios *termios,
6273 struct ktermios *old)
6374 {
6475 unsigned int baud = tty_termios_baud_rate(termios);
65
- struct lpss8250 *lpss = p->private_data;
76
+ struct lpss8250 *lpss = to_lpss8250(p->private_data);
6677 unsigned long fref = lpss->board->freq, fuart = baud * 16;
6778 unsigned long w = BIT(15) - 1;
6879 unsigned long m, n;
....@@ -109,10 +120,8 @@
109120 static int byt_serial_setup(struct lpss8250 *lpss, struct uart_port *port)
110121 {
111122 struct dw_dma_slave *param = &lpss->dma_param;
112
- struct uart_8250_port *up = up_to_u8250p(port);
113123 struct pci_dev *pdev = to_pci_dev(port->dev);
114
- unsigned int dma_devfn = PCI_DEVFN(PCI_SLOT(pdev->devfn), 0);
115
- struct pci_dev *dma_dev = pci_get_slot(pdev->bus, dma_devfn);
124
+ struct pci_dev *dma_dev;
116125
117126 switch (pdev->device) {
118127 case PCI_DEVICE_ID_INTEL_BYT_UART1:
....@@ -131,13 +140,11 @@
131140 return -EINVAL;
132141 }
133142
143
+ dma_dev = pci_get_slot(pdev->bus, PCI_DEVFN(PCI_SLOT(pdev->devfn), 0));
144
+
134145 param->dma_dev = &dma_dev->dev;
135146 param->m_master = 0;
136147 param->p_master = 1;
137
-
138
- /* TODO: Detect FIFO size automaticaly for DesignWare 8250 */
139
- port->fifosize = 64;
140
- up->tx_loadsz = 64;
141148
142149 lpss->dma_maxburst = 16;
143150
....@@ -150,10 +157,29 @@
150157 return 0;
151158 }
152159
160
+static void byt_serial_exit(struct lpss8250 *lpss)
161
+{
162
+ struct dw_dma_slave *param = &lpss->dma_param;
163
+
164
+ /* Paired with pci_get_slot() in the byt_serial_setup() above */
165
+ put_device(param->dma_dev);
166
+}
167
+
168
+static int ehl_serial_setup(struct lpss8250 *lpss, struct uart_port *port)
169
+{
170
+ return 0;
171
+}
172
+
173
+static void ehl_serial_exit(struct lpss8250 *lpss)
174
+{
175
+ struct uart_8250_port *up = serial8250_get_port(lpss->data.line);
176
+
177
+ up->dma = NULL;
178
+}
179
+
153180 #ifdef CONFIG_SERIAL_8250_DMA
154181 static const struct dw_dma_platform_data qrk_serial_dma_pdata = {
155182 .nr_channels = 2,
156
- .is_private = true,
157183 .chan_allocation_order = CHAN_ALLOCATION_ASCENDING,
158184 .chan_priority = CHAN_PRIORITY_ASCENDING,
159185 .block_size = 4095,
....@@ -164,16 +190,19 @@
164190
165191 static void qrk_serial_setup_dma(struct lpss8250 *lpss, struct uart_port *port)
166192 {
167
- struct uart_8250_dma *dma = &lpss->dma;
193
+ struct uart_8250_dma *dma = &lpss->data.dma;
168194 struct dw_dma_chip *chip = &lpss->dma_chip;
169195 struct dw_dma_slave *param = &lpss->dma_param;
170196 struct pci_dev *pdev = to_pci_dev(port->dev);
171197 int ret;
172198
199
+ chip->pdata = &qrk_serial_dma_pdata;
173200 chip->dev = &pdev->dev;
201
+ chip->id = pdev->devfn;
174202 chip->irq = pci_irq_vector(pdev, 0);
175203 chip->regs = pci_ioremap_bar(pdev, 1);
176
- chip->pdata = &qrk_serial_dma_pdata;
204
+ if (!chip->regs)
205
+ return;
177206
178207 /* Falling back to PIO mode if DMA probing fails */
179208 ret = dw_dma_probe(chip);
....@@ -196,11 +225,15 @@
196225
197226 static void qrk_serial_exit_dma(struct lpss8250 *lpss)
198227 {
228
+ struct dw_dma_chip *chip = &lpss->dma_chip;
199229 struct dw_dma_slave *param = &lpss->dma_param;
200230
201231 if (!param->dma_dev)
202232 return;
203
- dw_dma_remove(&lpss->dma_chip);
233
+
234
+ dw_dma_remove(chip);
235
+
236
+ pci_iounmap(to_pci_dev(chip->dev), chip->regs);
204237 }
205238 #else /* CONFIG_SERIAL_8250_DMA */
206239 static void qrk_serial_setup_dma(struct lpss8250 *lpss, struct uart_port *port) {}
....@@ -209,17 +242,6 @@
209242
210243 static int qrk_serial_setup(struct lpss8250 *lpss, struct uart_port *port)
211244 {
212
- struct pci_dev *pdev = to_pci_dev(port->dev);
213
- int ret;
214
-
215
- pci_set_master(pdev);
216
-
217
- ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_ALL_TYPES);
218
- if (ret < 0)
219
- return ret;
220
-
221
- port->irq = pci_irq_vector(pdev, 0);
222
-
223245 qrk_serial_setup_dma(lpss, port);
224246 return 0;
225247 }
....@@ -242,12 +264,17 @@
242264
243265 static int lpss8250_dma_setup(struct lpss8250 *lpss, struct uart_8250_port *port)
244266 {
245
- struct uart_8250_dma *dma = &lpss->dma;
267
+ struct uart_8250_dma *dma = &lpss->data.dma;
246268 struct dw_dma_slave *rx_param, *tx_param;
247269 struct device *dev = port->port.dev;
248270
249
- if (!lpss->dma_param.dma_dev)
271
+ if (!lpss->dma_param.dma_dev) {
272
+ dma = port->dma;
273
+ if (dma)
274
+ goto out_configuration_only;
275
+
250276 return 0;
277
+ }
251278
252279 rx_param = devm_kzalloc(dev, sizeof(*rx_param), GFP_KERNEL);
253280 if (!rx_param)
....@@ -258,16 +285,18 @@
258285 return -ENOMEM;
259286
260287 *rx_param = lpss->dma_param;
261
- dma->rxconf.src_maxburst = lpss->dma_maxburst;
262
-
263288 *tx_param = lpss->dma_param;
264
- dma->txconf.dst_maxburst = lpss->dma_maxburst;
265289
266290 dma->fn = lpss8250_dma_filter;
267291 dma->rx_param = rx_param;
268292 dma->tx_param = tx_param;
269293
270294 port->dma = dma;
295
+
296
+out_configuration_only:
297
+ dma->rxconf.src_maxburst = lpss->dma_maxburst;
298
+ dma->txconf.dst_maxburst = lpss->dma_maxburst;
299
+
271300 return 0;
272301 }
273302
....@@ -281,17 +310,23 @@
281310 if (ret)
282311 return ret;
283312
313
+ pci_set_master(pdev);
314
+
284315 lpss = devm_kzalloc(&pdev->dev, sizeof(*lpss), GFP_KERNEL);
285316 if (!lpss)
286317 return -ENOMEM;
318
+
319
+ ret = pci_alloc_irq_vectors(pdev, 1, 1, PCI_IRQ_ALL_TYPES);
320
+ if (ret < 0)
321
+ return ret;
287322
288323 lpss->board = (struct lpss8250_board *)id->driver_data;
289324
290325 memset(&uart, 0, sizeof(struct uart_8250_port));
291326
292327 uart.port.dev = &pdev->dev;
293
- uart.port.irq = pdev->irq;
294
- uart.port.private_data = lpss;
328
+ uart.port.irq = pci_irq_vector(pdev, 0);
329
+ uart.port.private_data = &lpss->data;
295330 uart.port.type = PORT_16550A;
296331 uart.port.iotype = UPIO_MEM;
297332 uart.port.regshift = 2;
....@@ -307,6 +342,8 @@
307342 if (ret)
308343 return ret;
309344
345
+ dw8250_setup_port(&uart.port);
346
+
310347 ret = lpss8250_dma_setup(lpss, &uart);
311348 if (ret)
312349 goto err_exit;
....@@ -315,14 +352,14 @@
315352 if (ret < 0)
316353 goto err_exit;
317354
318
- lpss->line = ret;
355
+ lpss->data.line = ret;
319356
320357 pci_set_drvdata(pdev, lpss);
321358 return 0;
322359
323360 err_exit:
324
- if (lpss->board->exit)
325
- lpss->board->exit(lpss);
361
+ lpss->board->exit(lpss);
362
+ pci_free_irq_vectors(pdev);
326363 return ret;
327364 }
328365
....@@ -330,16 +367,24 @@
330367 {
331368 struct lpss8250 *lpss = pci_get_drvdata(pdev);
332369
333
- serial8250_unregister_port(lpss->line);
370
+ serial8250_unregister_port(lpss->data.line);
334371
335
- if (lpss->board->exit)
336
- lpss->board->exit(lpss);
372
+ lpss->board->exit(lpss);
373
+ pci_free_irq_vectors(pdev);
337374 }
338375
339376 static const struct lpss8250_board byt_board = {
340377 .freq = 100000000,
341378 .base_baud = 2764800,
342379 .setup = byt_serial_setup,
380
+ .exit = byt_serial_exit,
381
+};
382
+
383
+static const struct lpss8250_board ehl_board = {
384
+ .freq = 200000000,
385
+ .base_baud = 12500000,
386
+ .setup = ehl_serial_setup,
387
+ .exit = ehl_serial_exit,
343388 };
344389
345390 static const struct lpss8250_board qrk_board = {
....@@ -349,17 +394,21 @@
349394 .exit = qrk_serial_exit,
350395 };
351396
352
-#define LPSS_DEVICE(id, board) { PCI_VDEVICE(INTEL, id), (kernel_ulong_t)&board }
353
-
354397 static const struct pci_device_id pci_ids[] = {
355
- LPSS_DEVICE(PCI_DEVICE_ID_INTEL_QRK_UARTx, qrk_board),
356
- LPSS_DEVICE(PCI_DEVICE_ID_INTEL_BYT_UART1, byt_board),
357
- LPSS_DEVICE(PCI_DEVICE_ID_INTEL_BYT_UART2, byt_board),
358
- LPSS_DEVICE(PCI_DEVICE_ID_INTEL_BSW_UART1, byt_board),
359
- LPSS_DEVICE(PCI_DEVICE_ID_INTEL_BSW_UART2, byt_board),
360
- LPSS_DEVICE(PCI_DEVICE_ID_INTEL_BDW_UART1, byt_board),
361
- LPSS_DEVICE(PCI_DEVICE_ID_INTEL_BDW_UART2, byt_board),
362
- { },
398
+ { PCI_DEVICE_DATA(INTEL, QRK_UARTx, &qrk_board) },
399
+ { PCI_DEVICE_DATA(INTEL, EHL_UART0, &ehl_board) },
400
+ { PCI_DEVICE_DATA(INTEL, EHL_UART1, &ehl_board) },
401
+ { PCI_DEVICE_DATA(INTEL, EHL_UART2, &ehl_board) },
402
+ { PCI_DEVICE_DATA(INTEL, EHL_UART3, &ehl_board) },
403
+ { PCI_DEVICE_DATA(INTEL, EHL_UART4, &ehl_board) },
404
+ { PCI_DEVICE_DATA(INTEL, EHL_UART5, &ehl_board) },
405
+ { PCI_DEVICE_DATA(INTEL, BYT_UART1, &byt_board) },
406
+ { PCI_DEVICE_DATA(INTEL, BYT_UART2, &byt_board) },
407
+ { PCI_DEVICE_DATA(INTEL, BSW_UART1, &byt_board) },
408
+ { PCI_DEVICE_DATA(INTEL, BSW_UART2, &byt_board) },
409
+ { PCI_DEVICE_DATA(INTEL, BDW_UART1, &byt_board) },
410
+ { PCI_DEVICE_DATA(INTEL, BDW_UART2, &byt_board) },
411
+ { }
363412 };
364413 MODULE_DEVICE_TABLE(pci, pci_ids);
365414