aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/tty/serial/8250/8250_exar.c83
-rw-r--r--drivers/tty/serial/8250/8250_pci.c139
2 files changed, 79 insertions, 143 deletions
diff --git a/drivers/tty/serial/8250/8250_exar.c b/drivers/tty/serial/8250/8250_exar.c
index f489f25643c5..9af4266eff96 100644
--- a/drivers/tty/serial/8250/8250_exar.c
+++ b/drivers/tty/serial/8250/8250_exar.c
@@ -24,11 +24,15 @@
24 24
25#include "8250.h" 25#include "8250.h"
26 26
27#define PCI_DEVICE_ID_COMMTECH_4224PCIE 0x0020 27#define PCI_DEVICE_ID_COMMTECH_4224PCI335 0x0002
28#define PCI_DEVICE_ID_COMMTECH_4228PCIE 0x0021 28#define PCI_DEVICE_ID_COMMTECH_4222PCI335 0x0004
29#define PCI_DEVICE_ID_COMMTECH_4222PCIE 0x0022 29#define PCI_DEVICE_ID_COMMTECH_2324PCI335 0x000a
30#define PCI_DEVICE_ID_EXAR_XR17V4358 0x4358 30#define PCI_DEVICE_ID_COMMTECH_2328PCI335 0x000b
31#define PCI_DEVICE_ID_EXAR_XR17V8358 0x8358 31#define PCI_DEVICE_ID_COMMTECH_4224PCIE 0x0020
32#define PCI_DEVICE_ID_COMMTECH_4228PCIE 0x0021
33#define PCI_DEVICE_ID_COMMTECH_4222PCIE 0x0022
34#define PCI_DEVICE_ID_EXAR_XR17V4358 0x4358
35#define PCI_DEVICE_ID_EXAR_XR17V8358 0x8358
32 36
33#define UART_EXAR_MPIOINT_7_0 0x8f /* MPIOINT[7:0] */ 37#define UART_EXAR_MPIOINT_7_0 0x8f /* MPIOINT[7:0] */
34#define UART_EXAR_MPIOLVL_7_0 0x90 /* MPIOLVL[7:0] */ 38#define UART_EXAR_MPIOLVL_7_0 0x90 /* MPIOLVL[7:0] */
@@ -84,6 +88,55 @@ static int default_setup(struct exar8250 *priv, struct pci_dev *pcidev,
84} 88}
85 89
86static int 90static int
91pci_fastcom335_setup(struct exar8250 *priv, struct pci_dev *pcidev,
92 struct uart_8250_port *port, int idx)
93{
94 unsigned int offset = idx * 0x200;
95 unsigned int baud = 1843200;
96 u8 __iomem *p;
97 int err;
98
99 port->port.flags |= UPF_EXAR_EFR;
100 port->port.uartclk = baud * 16;
101
102 err = default_setup(priv, pcidev, idx, offset, port);
103 if (err)
104 return err;
105
106 p = port->port.membase;
107
108 writeb(0x00, p + UART_EXAR_8XMODE);
109 writeb(UART_FCTR_EXAR_TRGD, p + UART_EXAR_FCTR);
110 writeb(32, p + UART_EXAR_TXTRG);
111 writeb(32, p + UART_EXAR_RXTRG);
112
113 /*
114 * Setup Multipurpose Input/Output pins.
115 */
116 if (idx == 0) {
117 switch (pcidev->device) {
118 case PCI_DEVICE_ID_COMMTECH_4222PCI335:
119 case PCI_DEVICE_ID_COMMTECH_4224PCI335:
120 writeb(0x78, p + UART_EXAR_MPIOLVL_7_0);
121 writeb(0x00, p + UART_EXAR_MPIOINV_7_0);
122 writeb(0x00, p + UART_EXAR_MPIOSEL_7_0);
123 break;
124 case PCI_DEVICE_ID_COMMTECH_2324PCI335:
125 case PCI_DEVICE_ID_COMMTECH_2328PCI335:
126 writeb(0x00, p + UART_EXAR_MPIOLVL_7_0);
127 writeb(0xc0, p + UART_EXAR_MPIOINV_7_0);
128 writeb(0xc0, p + UART_EXAR_MPIOSEL_7_0);
129 break;
130 }
131 writeb(0x00, p + UART_EXAR_MPIOINT_7_0);
132 writeb(0x00, p + UART_EXAR_MPIO3T_7_0);
133 writeb(0x00, p + UART_EXAR_MPIOOD_7_0);
134 }
135
136 return 0;
137}
138
139static int
87pci_connect_tech_setup(struct exar8250 *priv, struct pci_dev *pcidev, 140pci_connect_tech_setup(struct exar8250 *priv, struct pci_dev *pcidev,
88 struct uart_8250_port *port, int idx) 141 struct uart_8250_port *port, int idx)
89{ 142{
@@ -291,6 +344,21 @@ static int __maybe_unused exar_resume(struct device *dev)
291 344
292static SIMPLE_DEV_PM_OPS(exar_pci_pm, exar_suspend, exar_resume); 345static SIMPLE_DEV_PM_OPS(exar_pci_pm, exar_suspend, exar_resume);
293 346
347static const struct exar8250_board pbn_fastcom335_2 = {
348 .num_ports = 2,
349 .setup = pci_fastcom335_setup,
350};
351
352static const struct exar8250_board pbn_fastcom335_4 = {
353 .num_ports = 4,
354 .setup = pci_fastcom335_setup,
355};
356
357static const struct exar8250_board pbn_fastcom335_8 = {
358 .num_ports = 8,
359 .setup = pci_fastcom335_setup,
360};
361
294static const struct exar8250_board pbn_connect = { 362static const struct exar8250_board pbn_connect = {
295 .setup = pci_connect_tech_setup, 363 .setup = pci_connect_tech_setup,
296}; 364};
@@ -375,6 +443,11 @@ static struct pci_device_id exar_pci_tbl[] = {
375 EXAR_DEVICE(COMMTECH, COMMTECH_4222PCIE, pbn_exar_XR17V35x), 443 EXAR_DEVICE(COMMTECH, COMMTECH_4222PCIE, pbn_exar_XR17V35x),
376 EXAR_DEVICE(COMMTECH, COMMTECH_4224PCIE, pbn_exar_XR17V35x), 444 EXAR_DEVICE(COMMTECH, COMMTECH_4224PCIE, pbn_exar_XR17V35x),
377 EXAR_DEVICE(COMMTECH, COMMTECH_4228PCIE, pbn_exar_XR17V35x), 445 EXAR_DEVICE(COMMTECH, COMMTECH_4228PCIE, pbn_exar_XR17V35x),
446
447 EXAR_DEVICE(COMMTECH, COMMTECH_4222PCI335, pbn_fastcom335_2),
448 EXAR_DEVICE(COMMTECH, COMMTECH_4224PCI335, pbn_fastcom335_4),
449 EXAR_DEVICE(COMMTECH, COMMTECH_2324PCI335, pbn_fastcom335_4),
450 EXAR_DEVICE(COMMTECH, COMMTECH_2328PCI335, pbn_fastcom335_8),
378 { 0, } 451 { 0, }
379}; 452};
380MODULE_DEVICE_TABLE(pci, exar_pci_tbl); 453MODULE_DEVICE_TABLE(pci, exar_pci_tbl);
diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
index 2c83fd54b36c..d2bdcef7d759 100644
--- a/drivers/tty/serial/8250/8250_pci.c
+++ b/drivers/tty/serial/8250/8250_pci.c
@@ -1610,67 +1610,6 @@ static int pci_eg20t_init(struct pci_dev *dev)
1610#endif 1610#endif
1611} 1611}
1612 1612
1613#define UART_EXAR_MPIOINT_7_0 0x8f /* MPIOINT[7:0] */
1614#define UART_EXAR_MPIOLVL_7_0 0x90 /* MPIOLVL[7:0] */
1615#define UART_EXAR_MPIO3T_7_0 0x91 /* MPIO3T[7:0] */
1616#define UART_EXAR_MPIOINV_7_0 0x92 /* MPIOINV[7:0] */
1617#define UART_EXAR_MPIOSEL_7_0 0x93 /* MPIOSEL[7:0] */
1618#define UART_EXAR_MPIOOD_7_0 0x94 /* MPIOOD[7:0] */
1619#define UART_EXAR_MPIOINT_15_8 0x95 /* MPIOINT[15:8] */
1620#define UART_EXAR_MPIOLVL_15_8 0x96 /* MPIOLVL[15:8] */
1621#define UART_EXAR_MPIO3T_15_8 0x97 /* MPIO3T[15:8] */
1622#define UART_EXAR_MPIOINV_15_8 0x98 /* MPIOINV[15:8] */
1623#define UART_EXAR_MPIOSEL_15_8 0x99 /* MPIOSEL[15:8] */
1624#define UART_EXAR_MPIOOD_15_8 0x9a /* MPIOOD[15:8] */
1625#define PCI_DEVICE_ID_COMMTECH_4222PCI335 0x0004
1626#define PCI_DEVICE_ID_COMMTECH_4224PCI335 0x0002
1627#define PCI_DEVICE_ID_COMMTECH_2324PCI335 0x000a
1628#define PCI_DEVICE_ID_COMMTECH_2328PCI335 0x000b
1629
1630static int
1631pci_fastcom335_setup(struct serial_private *priv,
1632 const struct pciserial_board *board,
1633 struct uart_8250_port *port, int idx)
1634{
1635 u8 __iomem *p;
1636
1637 p = pci_ioremap_bar(priv->dev, 0);
1638 if (p == NULL)
1639 return -ENOMEM;
1640
1641 port->port.flags |= UPF_EXAR_EFR;
1642
1643 /*
1644 * Setup Multipurpose Input/Output pins.
1645 */
1646 if (idx == 0) {
1647 switch (priv->dev->device) {
1648 case PCI_DEVICE_ID_COMMTECH_4222PCI335:
1649 case PCI_DEVICE_ID_COMMTECH_4224PCI335:
1650 writeb(0x78, p + UART_EXAR_MPIOLVL_7_0);
1651 writeb(0x00, p + UART_EXAR_MPIOINV_7_0);
1652 writeb(0x00, p + UART_EXAR_MPIOSEL_7_0);
1653 break;
1654 case PCI_DEVICE_ID_COMMTECH_2324PCI335:
1655 case PCI_DEVICE_ID_COMMTECH_2328PCI335:
1656 writeb(0x00, p + UART_EXAR_MPIOLVL_7_0);
1657 writeb(0xc0, p + UART_EXAR_MPIOINV_7_0);
1658 writeb(0xc0, p + UART_EXAR_MPIOSEL_7_0);
1659 break;
1660 }
1661 writeb(0x00, p + UART_EXAR_MPIOINT_7_0);
1662 writeb(0x00, p + UART_EXAR_MPIO3T_7_0);
1663 writeb(0x00, p + UART_EXAR_MPIOOD_7_0);
1664 }
1665 writeb(0x00, p + UART_EXAR_8XMODE);
1666 writeb(UART_FCTR_EXAR_TRGD, p + UART_EXAR_FCTR);
1667 writeb(32, p + UART_EXAR_TXTRG);
1668 writeb(32, p + UART_EXAR_RXTRG);
1669 iounmap(p);
1670
1671 return pci_default_setup(priv, board, port, idx);
1672}
1673
1674static int 1613static int
1675pci_wch_ch353_setup(struct serial_private *priv, 1614pci_wch_ch353_setup(struct serial_private *priv,
1676 const struct pciserial_board *board, 1615 const struct pciserial_board *board,
@@ -2431,38 +2370,6 @@ static struct pci_serial_quirk pci_serial_quirks[] __refdata = {
2431 .setup = pci_asix_setup, 2370 .setup = pci_asix_setup,
2432 }, 2371 },
2433 /* 2372 /*
2434 * Commtech, Inc. Fastcom adapters
2435 *
2436 */
2437 {
2438 .vendor = PCI_VENDOR_ID_COMMTECH,
2439 .device = PCI_DEVICE_ID_COMMTECH_4222PCI335,
2440 .subvendor = PCI_ANY_ID,
2441 .subdevice = PCI_ANY_ID,
2442 .setup = pci_fastcom335_setup,
2443 },
2444 {
2445 .vendor = PCI_VENDOR_ID_COMMTECH,
2446 .device = PCI_DEVICE_ID_COMMTECH_4224PCI335,
2447 .subvendor = PCI_ANY_ID,
2448 .subdevice = PCI_ANY_ID,
2449 .setup = pci_fastcom335_setup,
2450 },
2451 {
2452 .vendor = PCI_VENDOR_ID_COMMTECH,
2453 .device = PCI_DEVICE_ID_COMMTECH_2324PCI335,
2454 .subvendor = PCI_ANY_ID,
2455 .subdevice = PCI_ANY_ID,
2456 .setup = pci_fastcom335_setup,
2457 },
2458 {
2459 .vendor = PCI_VENDOR_ID_COMMTECH,
2460 .device = PCI_DEVICE_ID_COMMTECH_2328PCI335,
2461 .subvendor = PCI_ANY_ID,
2462 .subdevice = PCI_ANY_ID,
2463 .setup = pci_fastcom335_setup,
2464 },
2465 /*
2466 * Broadcom TruManage (NetXtreme) 2373 * Broadcom TruManage (NetXtreme)
2467 */ 2374 */
2468 { 2375 {
@@ -2573,10 +2480,6 @@ enum pci_board_num_t {
2573 2480
2574 pbn_b0_4_1152000, 2481 pbn_b0_4_1152000,
2575 2482
2576 pbn_b0_2_1152000_200,
2577 pbn_b0_4_1152000_200,
2578 pbn_b0_8_1152000_200,
2579
2580 pbn_b0_4_1250000, 2483 pbn_b0_4_1250000,
2581 2484
2582 pbn_b0_2_1843200, 2485 pbn_b0_2_1843200,
@@ -2780,27 +2683,6 @@ static struct pciserial_board pci_boards[] = {
2780 .uart_offset = 8, 2683 .uart_offset = 8,
2781 }, 2684 },
2782 2685
2783 [pbn_b0_2_1152000_200] = {
2784 .flags = FL_BASE0,
2785 .num_ports = 2,
2786 .base_baud = 1152000,
2787 .uart_offset = 0x200,
2788 },
2789
2790 [pbn_b0_4_1152000_200] = {
2791 .flags = FL_BASE0,
2792 .num_ports = 4,
2793 .base_baud = 1152000,
2794 .uart_offset = 0x200,
2795 },
2796
2797 [pbn_b0_8_1152000_200] = {
2798 .flags = FL_BASE0,
2799 .num_ports = 8,
2800 .base_baud = 1152000,
2801 .uart_offset = 0x200,
2802 },
2803
2804 [pbn_b0_4_1250000] = { 2686 [pbn_b0_4_1250000] = {
2805 .flags = FL_BASE0, 2687 .flags = FL_BASE0,
2806 .num_ports = 4, 2688 .num_ports = 4,
@@ -3521,6 +3403,7 @@ static const struct pci_device_id blacklist[] = {
3521 3403
3522 /* Exar devices */ 3404 /* Exar devices */
3523 { PCI_VDEVICE(EXAR, PCI_ANY_ID), }, 3405 { PCI_VDEVICE(EXAR, PCI_ANY_ID), },
3406 { PCI_VDEVICE(COMMTECH, PCI_ANY_ID), },
3524}; 3407};
3525 3408
3526/* 3409/*
@@ -5248,26 +5131,6 @@ static struct pci_device_id serial_pci_tbl[] = {
5248 PCI_ANY_ID, PCI_ANY_ID, 5131 PCI_ANY_ID, PCI_ANY_ID,
5249 0, 0, pbn_wch384_4 }, 5132 0, 0, pbn_wch384_4 },
5250 5133
5251 /*
5252 * Commtech, Inc. Fastcom adapters
5253 */
5254 { PCI_VENDOR_ID_COMMTECH, PCI_DEVICE_ID_COMMTECH_4222PCI335,
5255 PCI_ANY_ID, PCI_ANY_ID,
5256 0,
5257 0, pbn_b0_2_1152000_200 },
5258 { PCI_VENDOR_ID_COMMTECH, PCI_DEVICE_ID_COMMTECH_4224PCI335,
5259 PCI_ANY_ID, PCI_ANY_ID,
5260 0,
5261 0, pbn_b0_4_1152000_200 },
5262 { PCI_VENDOR_ID_COMMTECH, PCI_DEVICE_ID_COMMTECH_2324PCI335,
5263 PCI_ANY_ID, PCI_ANY_ID,
5264 0,
5265 0, pbn_b0_4_1152000_200 },
5266 { PCI_VENDOR_ID_COMMTECH, PCI_DEVICE_ID_COMMTECH_2328PCI335,
5267 PCI_ANY_ID, PCI_ANY_ID,
5268 0,
5269 0, pbn_b0_8_1152000_200 },
5270
5271 /* Fintek PCI serial cards */ 5134 /* Fintek PCI serial cards */
5272 { PCI_DEVICE(0x1c29, 0x1104), .driver_data = pbn_fintek_4 }, 5135 { PCI_DEVICE(0x1c29, 0x1104), .driver_data = pbn_fintek_4 },
5273 { PCI_DEVICE(0x1c29, 0x1108), .driver_data = pbn_fintek_8 }, 5136 { PCI_DEVICE(0x1c29, 0x1108), .driver_data = pbn_fintek_8 },