diff options
-rw-r--r-- | drivers/tty/serial/8250/8250_exar.c | 83 | ||||
-rw-r--r-- | drivers/tty/serial/8250/8250_pci.c | 139 |
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 | ||
86 | static int | 90 | static int |
91 | pci_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 | |||
139 | static int | ||
87 | pci_connect_tech_setup(struct exar8250 *priv, struct pci_dev *pcidev, | 140 | pci_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 | ||
292 | static SIMPLE_DEV_PM_OPS(exar_pci_pm, exar_suspend, exar_resume); | 345 | static SIMPLE_DEV_PM_OPS(exar_pci_pm, exar_suspend, exar_resume); |
293 | 346 | ||
347 | static const struct exar8250_board pbn_fastcom335_2 = { | ||
348 | .num_ports = 2, | ||
349 | .setup = pci_fastcom335_setup, | ||
350 | }; | ||
351 | |||
352 | static const struct exar8250_board pbn_fastcom335_4 = { | ||
353 | .num_ports = 4, | ||
354 | .setup = pci_fastcom335_setup, | ||
355 | }; | ||
356 | |||
357 | static const struct exar8250_board pbn_fastcom335_8 = { | ||
358 | .num_ports = 8, | ||
359 | .setup = pci_fastcom335_setup, | ||
360 | }; | ||
361 | |||
294 | static const struct exar8250_board pbn_connect = { | 362 | static 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 | }; |
380 | MODULE_DEVICE_TABLE(pci, exar_pci_tbl); | 453 | MODULE_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 | |||
1630 | static int | ||
1631 | pci_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 | |||
1674 | static int | 1613 | static int |
1675 | pci_wch_ch353_setup(struct serial_private *priv, | 1614 | pci_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 }, |