1 // SPDX-License-Identifier: GPL-2.0
3 * Probe module for 8250/16550-type MCHP PCI serial ports.
5 * Based on drivers/tty/serial/8250/8250_pci.c,
7 * Copyright (C) 2022 Microchip Technology Inc., All Rights Reserved.
10 #include <linux/array_size.h>
11 #include <linux/bitfield.h>
12 #include <linux/bits.h>
13 #include <linux/circ_buf.h>
14 #include <linux/device.h>
15 #include <linux/errno.h>
16 #include <linux/gfp_types.h>
18 #include <linux/iopoll.h>
19 #include <linux/minmax.h>
20 #include <linux/module.h>
21 #include <linux/mutex.h>
22 #include <linux/overflow.h>
23 #include <linux/pci.h>
25 #include <linux/serial_core.h>
26 #include <linux/serial_reg.h>
27 #include <linux/serial_8250.h>
28 #include <linux/spinlock.h>
29 #include <linux/string.h>
30 #include <linux/time.h>
31 #include <linux/tty.h>
32 #include <linux/tty_flip.h>
33 #include <linux/types.h>
34 #include <linux/units.h>
36 #include <asm/byteorder.h>
39 #include "8250_pcilib.h"
41 #define PCI_DEVICE_ID_EFAR_PCI12000 0xa002
42 #define PCI_DEVICE_ID_EFAR_PCI11010 0xa012
43 #define PCI_DEVICE_ID_EFAR_PCI11101 0xa022
44 #define PCI_DEVICE_ID_EFAR_PCI11400 0xa032
45 #define PCI_DEVICE_ID_EFAR_PCI11414 0xa042
47 #define PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_4p 0x0001
48 #define PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_3p012 0x0002
49 #define PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_3p013 0x0003
50 #define PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_3p023 0x0004
51 #define PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_3p123 0x0005
52 #define PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_2p01 0x0006
53 #define PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_2p02 0x0007
54 #define PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_2p03 0x0008
55 #define PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_2p12 0x0009
56 #define PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_2p13 0x000a
57 #define PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_2p23 0x000b
58 #define PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_1p0 0x000c
59 #define PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_1p1 0x000d
60 #define PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_1p2 0x000e
61 #define PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_1p3 0x000f
63 #define PCI_SUBDEVICE_ID_EFAR_PCI12000 PCI_DEVICE_ID_EFAR_PCI12000
64 #define PCI_SUBDEVICE_ID_EFAR_PCI11010 PCI_DEVICE_ID_EFAR_PCI11010
65 #define PCI_SUBDEVICE_ID_EFAR_PCI11101 PCI_DEVICE_ID_EFAR_PCI11101
66 #define PCI_SUBDEVICE_ID_EFAR_PCI11400 PCI_DEVICE_ID_EFAR_PCI11400
67 #define PCI_SUBDEVICE_ID_EFAR_PCI11414 PCI_DEVICE_ID_EFAR_PCI11414
69 #define UART_SYSTEM_ADDR_BASE 0x1000
70 #define UART_DEV_REV_REG (UART_SYSTEM_ADDR_BASE + 0x00)
71 #define UART_DEV_REV_MASK GENMASK(7, 0)
72 #define UART_SYSLOCK_REG (UART_SYSTEM_ADDR_BASE + 0xA0)
73 #define UART_SYSLOCK BIT(2)
74 #define SYSLOCK_SLEEP_TIMEOUT 100
75 #define SYSLOCK_RETRY_CNT 1000
77 #define UART_RX_BYTE_FIFO 0x00
78 #define UART_TX_BYTE_FIFO 0x00
79 #define UART_FIFO_CTL 0x02
81 #define UART_ACTV_REG 0x11
82 #define UART_BLOCK_SET_ACTIVE BIT(0)
84 #define UART_PCI_CTRL_REG 0x80
85 #define UART_PCI_CTRL_SET_MULTIPLE_MSI BIT(4)
86 #define UART_PCI_CTRL_D3_CLK_ENABLE BIT(0)
88 #define ADCL_CFG_REG 0x40
89 #define ADCL_CFG_POL_SEL BIT(2)
90 #define ADCL_CFG_PIN_SEL BIT(1)
91 #define ADCL_CFG_EN BIT(0)
93 #define UART_BIT_SAMPLE_CNT_8 8
94 #define UART_BIT_SAMPLE_CNT_16 16
95 #define BAUD_CLOCK_DIV_INT_MSK GENMASK(31, 8)
96 #define ADCL_CFG_RTS_DELAY_MASK GENMASK(11, 8)
98 #define UART_WAKE_REG 0x8C
99 #define UART_WAKE_MASK_REG 0x90
100 #define UART_WAKE_N_PIN BIT(2)
101 #define UART_WAKE_NCTS BIT(1)
102 #define UART_WAKE_INT BIT(0)
103 #define UART_WAKE_SRCS \
104 (UART_WAKE_N_PIN | UART_WAKE_NCTS | UART_WAKE_INT)
106 #define UART_BAUD_CLK_DIVISOR_REG 0x54
107 #define FRAC_DIV_CFG_REG 0x58
109 #define UART_RESET_REG 0x94
110 #define UART_RESET_D3_RESET_DISABLE BIT(16)
112 #define UART_BURST_STATUS_REG 0x9C
113 #define UART_TX_BURST_FIFO 0xA0
114 #define UART_RX_BURST_FIFO 0xA4
116 #define UART_BIT_DIVISOR_8 0x26731000
117 #define UART_BIT_DIVISOR_16 0x6ef71000
118 #define UART_BAUD_4MBPS 4000000
121 #define PORT_OFFSET 0x100
122 #define RX_BUF_SIZE 512
123 #define UART_BYTE_SIZE 1
124 #define UART_BURST_SIZE 4
126 #define UART_BST_STAT_RX_COUNT_MASK 0x00FF
127 #define UART_BST_STAT_TX_COUNT_MASK 0xFF00
128 #define UART_BST_STAT_IIR_INT_PEND 0x100000
129 #define UART_LSR_OVERRUN_ERR_CLR 0x43
130 #define UART_BST_STAT_LSR_RX_MASK 0x9F000000
131 #define UART_BST_STAT_LSR_RX_ERR_MASK 0x9E000000
132 #define UART_BST_STAT_LSR_OVERRUN_ERR 0x2000000
133 #define UART_BST_STAT_LSR_PARITY_ERR 0x4000000
134 #define UART_BST_STAT_LSR_FRAME_ERR 0x8000000
135 #define UART_BST_STAT_LSR_THRE 0x20000000
137 struct pci1xxxx_8250
{
141 void __iomem
*membase
;
142 int line
[] __counted_by(nr
);
145 static const struct serial_rs485 pci1xxxx_rs485_supported
= {
146 .flags
= SER_RS485_ENABLED
| SER_RS485_RTS_ON_SEND
|
147 SER_RS485_RTS_AFTER_SEND
,
148 .delay_rts_after_send
= 1,
149 /* Delay RTS before send is not supported */
152 static int pci1xxxx_set_sys_lock(struct pci1xxxx_8250
*port
)
154 writel(UART_SYSLOCK
, port
->membase
+ UART_SYSLOCK_REG
);
155 return readl(port
->membase
+ UART_SYSLOCK_REG
);
158 static int pci1xxxx_acquire_sys_lock(struct pci1xxxx_8250
*port
)
162 return readx_poll_timeout(pci1xxxx_set_sys_lock
, port
, regval
,
163 (regval
& UART_SYSLOCK
),
164 SYSLOCK_SLEEP_TIMEOUT
,
165 SYSLOCK_RETRY_CNT
* SYSLOCK_SLEEP_TIMEOUT
);
168 static void pci1xxxx_release_sys_lock(struct pci1xxxx_8250
*port
)
170 writel(0x0, port
->membase
+ UART_SYSLOCK_REG
);
173 static const int logical_to_physical_port_idx
[][MAX_PORTS
] = {
174 {0, 1, 2, 3}, /* PCI12000, PCI11010, PCI11101, PCI11400, PCI11414 */
175 {0, 1, 2, 3}, /* PCI4p */
176 {0, 1, 2, -1}, /* PCI3p012 */
177 {0, 1, 3, -1}, /* PCI3p013 */
178 {0, 2, 3, -1}, /* PCI3p023 */
179 {1, 2, 3, -1}, /* PCI3p123 */
180 {0, 1, -1, -1}, /* PCI2p01 */
181 {0, 2, -1, -1}, /* PCI2p02 */
182 {0, 3, -1, -1}, /* PCI2p03 */
183 {1, 2, -1, -1}, /* PCI2p12 */
184 {1, 3, -1, -1}, /* PCI2p13 */
185 {2, 3, -1, -1}, /* PCI2p23 */
186 {0, -1, -1, -1}, /* PCI1p0 */
187 {1, -1, -1, -1}, /* PCI1p1 */
188 {2, -1, -1, -1}, /* PCI1p2 */
189 {3, -1, -1, -1}, /* PCI1p3 */
192 static int pci1xxxx_get_num_ports(struct pci_dev
*dev
)
194 switch (dev
->subsystem_device
) {
195 case PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_1p0
:
196 case PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_1p1
:
197 case PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_1p2
:
198 case PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_1p3
:
199 case PCI_SUBDEVICE_ID_EFAR_PCI12000
:
200 case PCI_SUBDEVICE_ID_EFAR_PCI11010
:
201 case PCI_SUBDEVICE_ID_EFAR_PCI11101
:
202 case PCI_SUBDEVICE_ID_EFAR_PCI11400
:
205 case PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_2p01
:
206 case PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_2p02
:
207 case PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_2p03
:
208 case PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_2p12
:
209 case PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_2p13
:
210 case PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_2p23
:
212 case PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_3p012
:
213 case PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_3p123
:
214 case PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_3p013
:
215 case PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_3p023
:
217 case PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_4p
:
218 case PCI_SUBDEVICE_ID_EFAR_PCI11414
:
223 static unsigned int pci1xxxx_get_divisor(struct uart_port
*port
,
224 unsigned int baud
, unsigned int *frac
)
226 unsigned int uart_sample_cnt
;
229 if (baud
>= UART_BAUD_4MBPS
)
230 uart_sample_cnt
= UART_BIT_SAMPLE_CNT_8
;
232 uart_sample_cnt
= UART_BIT_SAMPLE_CNT_16
;
235 * Calculate baud rate sampling period in nanoseconds.
236 * Fractional part x denotes x/255 parts of a nanosecond.
238 quot
= NSEC_PER_SEC
/ (baud
* uart_sample_cnt
);
239 *frac
= (NSEC_PER_SEC
- quot
* baud
* uart_sample_cnt
) *
240 255 / uart_sample_cnt
/ baud
;
245 static void pci1xxxx_set_divisor(struct uart_port
*port
, unsigned int baud
,
246 unsigned int quot
, unsigned int frac
)
248 if (baud
>= UART_BAUD_4MBPS
)
249 writel(UART_BIT_DIVISOR_8
, port
->membase
+ FRAC_DIV_CFG_REG
);
251 writel(UART_BIT_DIVISOR_16
, port
->membase
+ FRAC_DIV_CFG_REG
);
253 writel(FIELD_PREP(BAUD_CLOCK_DIV_INT_MSK
, quot
) | frac
,
254 port
->membase
+ UART_BAUD_CLK_DIVISOR_REG
);
257 static int pci1xxxx_rs485_config(struct uart_port
*port
,
258 struct ktermios
*termios
,
259 struct serial_rs485
*rs485
)
261 u32 delay_in_baud_periods
;
262 u32 baud_period_in_ns
;
268 frac_div
= readl(port
->membase
+ FRAC_DIV_CFG_REG
);
270 if (frac_div
== UART_BIT_DIVISOR_16
)
271 sample_cnt
= UART_BIT_SAMPLE_CNT_16
;
273 sample_cnt
= UART_BIT_SAMPLE_CNT_8
;
276 * pci1xxxx's uart hardware supports only RTS delay after
277 * Tx and in units of bit times to a maximum of 15
279 if (rs485
->flags
& SER_RS485_ENABLED
) {
280 mode_cfg
= ADCL_CFG_EN
| ADCL_CFG_PIN_SEL
;
282 if (!(rs485
->flags
& SER_RS485_RTS_ON_SEND
))
283 mode_cfg
|= ADCL_CFG_POL_SEL
;
285 if (rs485
->delay_rts_after_send
) {
286 clock_div
= readl(port
->membase
+ UART_BAUD_CLK_DIVISOR_REG
);
288 FIELD_GET(BAUD_CLOCK_DIV_INT_MSK
, clock_div
) *
290 delay_in_baud_periods
=
291 rs485
->delay_rts_after_send
* NSEC_PER_MSEC
/
293 delay_in_baud_periods
=
294 min_t(u32
, delay_in_baud_periods
,
295 FIELD_MAX(ADCL_CFG_RTS_DELAY_MASK
));
296 mode_cfg
|= FIELD_PREP(ADCL_CFG_RTS_DELAY_MASK
,
297 delay_in_baud_periods
);
298 rs485
->delay_rts_after_send
=
299 baud_period_in_ns
* delay_in_baud_periods
/
303 writel(mode_cfg
, port
->membase
+ ADCL_CFG_REG
);
307 static u32
pci1xxxx_read_burst_status(struct uart_port
*port
)
311 status
= readl(port
->membase
+ UART_BURST_STATUS_REG
);
312 if (status
& UART_BST_STAT_LSR_RX_ERR_MASK
) {
313 if (status
& UART_BST_STAT_LSR_OVERRUN_ERR
) {
314 writeb(UART_LSR_OVERRUN_ERR_CLR
,
315 port
->membase
+ UART_FIFO_CTL
);
316 port
->icount
.overrun
++;
319 if (status
& UART_BST_STAT_LSR_FRAME_ERR
)
320 port
->icount
.frame
++;
322 if (status
& UART_BST_STAT_LSR_PARITY_ERR
)
323 port
->icount
.parity
++;
328 static void pci1xxxx_process_read_data(struct uart_port
*port
,
329 unsigned char *rx_buff
, u32
*buff_index
,
330 u32
*valid_byte_count
)
332 u32 valid_burst_count
= *valid_byte_count
/ UART_BURST_SIZE
;
336 * Depending on the RX Trigger Level the number of bytes that can be
337 * stored in RX FIFO at a time varies. Each transaction reads data
338 * in DWORDs. If there are less than four remaining valid_byte_count
339 * to read, the data is received one byte at a time.
341 while (valid_burst_count
--) {
342 if (*buff_index
> (RX_BUF_SIZE
- UART_BURST_SIZE
))
344 burst_buf
= (u32
*)&rx_buff
[*buff_index
];
345 *burst_buf
= readl(port
->membase
+ UART_RX_BURST_FIFO
);
346 *buff_index
+= UART_BURST_SIZE
;
347 *valid_byte_count
-= UART_BURST_SIZE
;
350 while (*valid_byte_count
) {
351 if (*buff_index
>= RX_BUF_SIZE
)
353 rx_buff
[*buff_index
] = readb(port
->membase
+
355 *buff_index
+= UART_BYTE_SIZE
;
356 *valid_byte_count
-= UART_BYTE_SIZE
;
360 static void pci1xxxx_rx_burst(struct uart_port
*port
, u32 uart_status
)
362 u32 valid_byte_count
= uart_status
& UART_BST_STAT_RX_COUNT_MASK
;
363 struct tty_port
*tty_port
= &port
->state
->port
;
364 unsigned char rx_buff
[RX_BUF_SIZE
];
368 if (valid_byte_count
!= 0 &&
369 valid_byte_count
< RX_BUF_SIZE
) {
370 pci1xxxx_process_read_data(port
, rx_buff
, &buff_index
,
373 copied_len
= (u32
)tty_insert_flip_string(tty_port
, rx_buff
,
376 if (copied_len
!= buff_index
)
377 port
->icount
.overrun
+= buff_index
- copied_len
;
379 port
->icount
.rx
+= buff_index
;
380 tty_flip_buffer_push(tty_port
);
384 static void pci1xxxx_process_write_data(struct uart_port
*port
,
385 int *data_empty_count
,
386 u32
*valid_byte_count
)
388 struct tty_port
*tport
= &port
->state
->port
;
389 u32 valid_burst_count
= *valid_byte_count
/ UART_BURST_SIZE
;
392 * Each transaction transfers data in DWORDs. If there are less than
393 * four remaining valid_byte_count to transfer or if the circular
394 * buffer has insufficient space for a DWORD, the data is transferred
395 * one byte at a time.
397 while (valid_burst_count
) {
400 if (*data_empty_count
- UART_BURST_SIZE
< 0)
402 if (kfifo_len(&tport
->xmit_fifo
) < UART_BURST_SIZE
)
404 if (WARN_ON(kfifo_out(&tport
->xmit_fifo
, (u8
*)&c
, sizeof(c
)) !=
407 writel(c
, port
->membase
+ UART_TX_BURST_FIFO
);
408 *valid_byte_count
-= UART_BURST_SIZE
;
409 *data_empty_count
-= UART_BURST_SIZE
;
410 valid_burst_count
-= UART_BYTE_SIZE
;
413 while (*valid_byte_count
) {
416 if (!kfifo_get(&tport
->xmit_fifo
, &c
))
418 writeb(c
, port
->membase
+ UART_TX_BYTE_FIFO
);
419 *data_empty_count
-= UART_BYTE_SIZE
;
420 *valid_byte_count
-= UART_BYTE_SIZE
;
423 * If there are any pending burst count, data is handled by
424 * transmitting DWORDs at a time.
426 if (valid_burst_count
&&
427 kfifo_len(&tport
->xmit_fifo
) >= UART_BURST_SIZE
)
432 static void pci1xxxx_tx_burst(struct uart_port
*port
, u32 uart_status
)
434 struct uart_8250_port
*up
= up_to_u8250p(port
);
435 struct tty_port
*tport
= &port
->state
->port
;
436 u32 valid_byte_count
;
437 int data_empty_count
;
440 writeb(port
->x_char
, port
->membase
+ UART_TX
);
446 if ((uart_tx_stopped(port
)) || kfifo_is_empty(&tport
->xmit_fifo
)) {
447 port
->ops
->stop_tx(port
);
449 data_empty_count
= (pci1xxxx_read_burst_status(port
) &
450 UART_BST_STAT_TX_COUNT_MASK
) >> 8;
452 valid_byte_count
= kfifo_len(&tport
->xmit_fifo
);
454 pci1xxxx_process_write_data(port
,
459 if (kfifo_is_empty(&tport
->xmit_fifo
))
461 } while (data_empty_count
&& valid_byte_count
);
464 if (kfifo_len(&tport
->xmit_fifo
) < WAKEUP_CHARS
)
465 uart_write_wakeup(port
);
468 * With RPM enabled, we have to wait until the FIFO is empty before
469 * the HW can go idle. So we get here once again with empty FIFO and
470 * disable the interrupt and RPM in __stop_tx()
472 if (kfifo_is_empty(&tport
->xmit_fifo
) &&
473 !(up
->capabilities
& UART_CAP_RPM
))
474 port
->ops
->stop_tx(port
);
477 static int pci1xxxx_handle_irq(struct uart_port
*port
)
482 status
= pci1xxxx_read_burst_status(port
);
484 if (status
& UART_BST_STAT_IIR_INT_PEND
)
487 spin_lock_irqsave(&port
->lock
, flags
);
489 if (status
& UART_BST_STAT_LSR_RX_MASK
)
490 pci1xxxx_rx_burst(port
, status
);
492 if (status
& UART_BST_STAT_LSR_THRE
)
493 pci1xxxx_tx_burst(port
, status
);
495 spin_unlock_irqrestore(&port
->lock
, flags
);
500 static bool pci1xxxx_port_suspend(int line
)
502 struct uart_8250_port
*up
= serial8250_get_port(line
);
503 struct uart_port
*port
= &up
->port
;
504 struct tty_port
*tport
= &port
->state
->port
;
509 mutex_lock(&tport
->mutex
);
510 if (port
->suspended
== 0 && port
->dev
) {
511 wakeup_mask
= readb(up
->port
.membase
+ UART_WAKE_MASK_REG
);
513 uart_port_lock_irqsave(port
, &flags
);
514 port
->mctrl
&= ~TIOCM_OUT2
;
515 port
->ops
->set_mctrl(port
, port
->mctrl
);
516 uart_port_unlock_irqrestore(port
, flags
);
518 ret
= (wakeup_mask
& UART_WAKE_SRCS
) != UART_WAKE_SRCS
;
521 writeb(UART_WAKE_SRCS
, port
->membase
+ UART_WAKE_REG
);
522 mutex_unlock(&tport
->mutex
);
527 static void pci1xxxx_port_resume(int line
)
529 struct uart_8250_port
*up
= serial8250_get_port(line
);
530 struct uart_port
*port
= &up
->port
;
531 struct tty_port
*tport
= &port
->state
->port
;
534 mutex_lock(&tport
->mutex
);
535 writeb(UART_BLOCK_SET_ACTIVE
, port
->membase
+ UART_ACTV_REG
);
536 writeb(UART_WAKE_SRCS
, port
->membase
+ UART_WAKE_REG
);
538 if (port
->suspended
== 0) {
539 uart_port_lock_irqsave(port
, &flags
);
540 port
->mctrl
|= TIOCM_OUT2
;
541 port
->ops
->set_mctrl(port
, port
->mctrl
);
542 uart_port_unlock_irqrestore(port
, flags
);
544 mutex_unlock(&tport
->mutex
);
547 static int pci1xxxx_suspend(struct device
*dev
)
549 struct pci1xxxx_8250
*priv
= dev_get_drvdata(dev
);
550 struct pci_dev
*pcidev
= to_pci_dev(dev
);
556 for (i
= 0; i
< priv
->nr
; i
++) {
557 if (priv
->line
[i
] >= 0) {
558 serial8250_suspend_port(priv
->line
[i
]);
559 wakeup
|= pci1xxxx_port_suspend(priv
->line
[i
]);
563 p
= pci_ioremap_bar(pcidev
, 0);
565 dev_err(dev
, "remapping of bar 0 memory failed");
569 data
= readl(p
+ UART_RESET_REG
);
570 writel(data
| UART_RESET_D3_RESET_DISABLE
, p
+ UART_RESET_REG
);
573 writeb(UART_PCI_CTRL_D3_CLK_ENABLE
, p
+ UART_PCI_CTRL_REG
);
576 device_set_wakeup_enable(dev
, true);
577 pci_wake_from_d3(pcidev
, true);
582 static int pci1xxxx_resume(struct device
*dev
)
584 struct pci1xxxx_8250
*priv
= dev_get_drvdata(dev
);
585 struct pci_dev
*pcidev
= to_pci_dev(dev
);
590 p
= pci_ioremap_bar(pcidev
, 0);
592 dev_err(dev
, "remapping of bar 0 memory failed");
596 data
= readl(p
+ UART_RESET_REG
);
597 writel(data
& ~UART_RESET_D3_RESET_DISABLE
, p
+ UART_RESET_REG
);
600 for (i
= 0; i
< priv
->nr
; i
++) {
601 if (priv
->line
[i
] >= 0) {
602 pci1xxxx_port_resume(priv
->line
[i
]);
603 serial8250_resume_port(priv
->line
[i
]);
610 static int pci1xxxx_setup(struct pci_dev
*pdev
,
611 struct uart_8250_port
*port
, int port_idx
, int rev
)
615 port
->port
.flags
|= UPF_FIXED_TYPE
| UPF_SKIP_TEST
;
616 port
->port
.type
= PORT_MCHP16550A
;
618 * 8250 core considers prescaller value to be always 16.
619 * The MCHP ports support downscaled mode and hence the
620 * functional UART clock can be lower, i.e. 62.5MHz, than
621 * software expects in order to support higher baud rates.
622 * Assign here 64MHz to support 4Mbps.
624 * The value itself is not really used anywhere except baud
625 * rate calculations, so we can mangle it as we wish.
627 port
->port
.uartclk
= 64 * HZ_PER_MHZ
;
628 port
->port
.set_termios
= serial8250_do_set_termios
;
629 port
->port
.get_divisor
= pci1xxxx_get_divisor
;
630 port
->port
.set_divisor
= pci1xxxx_set_divisor
;
631 port
->port
.rs485_config
= pci1xxxx_rs485_config
;
632 port
->port
.rs485_supported
= pci1xxxx_rs485_supported
;
634 /* From C0 rev Burst operation is supported */
636 port
->port
.handle_irq
= pci1xxxx_handle_irq
;
638 ret
= serial8250_pci_setup_port(pdev
, port
, 0, PORT_OFFSET
* port_idx
, 0);
642 writeb(UART_BLOCK_SET_ACTIVE
, port
->port
.membase
+ UART_ACTV_REG
);
643 writeb(UART_WAKE_SRCS
, port
->port
.membase
+ UART_WAKE_REG
);
644 writeb(UART_WAKE_N_PIN
, port
->port
.membase
+ UART_WAKE_MASK_REG
);
649 static unsigned int pci1xxxx_get_max_port(int subsys_dev
)
651 unsigned int i
= MAX_PORTS
;
653 if (subsys_dev
< ARRAY_SIZE(logical_to_physical_port_idx
))
655 if (logical_to_physical_port_idx
[subsys_dev
][i
] != -1)
656 return logical_to_physical_port_idx
[subsys_dev
][i
] + 1;
659 if (subsys_dev
== PCI_SUBDEVICE_ID_EFAR_PCI11414
)
665 static int pci1xxxx_logical_to_physical_port_translate(int subsys_dev
, int port
)
667 if (subsys_dev
< ARRAY_SIZE(logical_to_physical_port_idx
))
668 return logical_to_physical_port_idx
[subsys_dev
][port
];
670 return logical_to_physical_port_idx
[0][port
];
673 static int pci1xxxx_get_device_revision(struct pci1xxxx_8250
*priv
)
679 * DEV REV is a system register, HW Syslock bit
680 * should be acquired before accessing the register
682 ret
= pci1xxxx_acquire_sys_lock(priv
);
686 regval
= readl(priv
->membase
+ UART_DEV_REV_REG
);
687 priv
->dev_rev
= regval
& UART_DEV_REV_MASK
;
689 pci1xxxx_release_sys_lock(priv
);
694 static int pci1xxxx_serial_probe(struct pci_dev
*pdev
,
695 const struct pci_device_id
*id
)
697 struct device
*dev
= &pdev
->dev
;
698 struct pci1xxxx_8250
*priv
;
699 struct uart_8250_port uart
;
700 unsigned int max_vec_reqd
;
701 unsigned int nr_ports
, i
;
708 rc
= pcim_enable_device(pdev
);
712 nr_ports
= pci1xxxx_get_num_ports(pdev
);
714 priv
= devm_kzalloc(dev
, struct_size(priv
, line
, nr_ports
), GFP_KERNEL
);
718 priv
->membase
= pci_ioremap_bar(pdev
, 0);
722 ret
= pci1xxxx_get_device_revision(priv
);
726 pci_set_master(pdev
);
730 subsys_dev
= pdev
->subsystem_device
;
731 max_vec_reqd
= pci1xxxx_get_max_port(subsys_dev
);
733 num_vectors
= pci_alloc_irq_vectors(pdev
, 1, max_vec_reqd
, PCI_IRQ_ALL_TYPES
);
734 if (num_vectors
< 0) {
735 pci_iounmap(pdev
, priv
->membase
);
739 memset(&uart
, 0, sizeof(uart
));
740 uart
.port
.flags
= UPF_SHARE_IRQ
| UPF_FIXED_PORT
;
743 if (num_vectors
== max_vec_reqd
)
744 writeb(UART_PCI_CTRL_SET_MULTIPLE_MSI
, priv
->membase
+ UART_PCI_CTRL_REG
);
746 for (i
= 0; i
< nr_ports
; i
++) {
747 priv
->line
[i
] = -ENODEV
;
749 port_idx
= pci1xxxx_logical_to_physical_port_translate(subsys_dev
, i
);
751 if (num_vectors
== max_vec_reqd
)
752 uart
.port
.irq
= pci_irq_vector(pdev
, port_idx
);
754 uart
.port
.irq
= pci_irq_vector(pdev
, 0);
756 rc
= pci1xxxx_setup(pdev
, &uart
, port_idx
, priv
->dev_rev
);
758 dev_warn(dev
, "Failed to setup port %u\n", i
);
762 priv
->line
[i
] = serial8250_register_8250_port(&uart
);
763 if (priv
->line
[i
] < 0) {
765 "Couldn't register serial port %lx, irq %d, type %d, error %d\n",
766 uart
.port
.iobase
, uart
.port
.irq
, uart
.port
.iotype
,
771 pci_set_drvdata(pdev
, priv
);
776 static void pci1xxxx_serial_remove(struct pci_dev
*dev
)
778 struct pci1xxxx_8250
*priv
= pci_get_drvdata(dev
);
781 for (i
= 0; i
< priv
->nr
; i
++) {
782 if (priv
->line
[i
] >= 0)
783 serial8250_unregister_port(priv
->line
[i
]);
786 pci_free_irq_vectors(dev
);
787 pci_iounmap(dev
, priv
->membase
);
790 static DEFINE_SIMPLE_DEV_PM_OPS(pci1xxxx_pm_ops
, pci1xxxx_suspend
, pci1xxxx_resume
);
792 static const struct pci_device_id pci1xxxx_pci_tbl
[] = {
793 { PCI_VDEVICE(EFAR
, PCI_DEVICE_ID_EFAR_PCI11010
) },
794 { PCI_VDEVICE(EFAR
, PCI_DEVICE_ID_EFAR_PCI11101
) },
795 { PCI_VDEVICE(EFAR
, PCI_DEVICE_ID_EFAR_PCI11400
) },
796 { PCI_VDEVICE(EFAR
, PCI_DEVICE_ID_EFAR_PCI11414
) },
797 { PCI_VDEVICE(EFAR
, PCI_DEVICE_ID_EFAR_PCI12000
) },
800 MODULE_DEVICE_TABLE(pci
, pci1xxxx_pci_tbl
);
802 static struct pci_driver pci1xxxx_pci_driver
= {
803 .name
= "pci1xxxx serial",
804 .probe
= pci1xxxx_serial_probe
,
805 .remove
= pci1xxxx_serial_remove
,
807 .pm
= pm_sleep_ptr(&pci1xxxx_pm_ops
),
809 .id_table
= pci1xxxx_pci_tbl
,
811 module_pci_driver(pci1xxxx_pci_driver
);
813 static_assert((ARRAY_SIZE(logical_to_physical_port_idx
) == PCI_SUBDEVICE_ID_EFAR_PCI1XXXX_1p3
+ 1));
815 MODULE_IMPORT_NS("SERIAL_8250_PCI");
816 MODULE_DESCRIPTION("Microchip Technology Inc. PCIe to UART module");
817 MODULE_AUTHOR("Kumaravel Thiagarajan <kumaravel.thiagarajan@microchip.com>");
818 MODULE_AUTHOR("Tharun Kumar P <tharunkumar.pasumarthi@microchip.com>");
819 MODULE_LICENSE("GPL");