1 // SPDX-License-Identifier: GPL-2.0+
3 * PCIe host controller driver for Xilinx AXI PCIe Bridge
5 * Copyright (c) 2012 - 2014 Xilinx, Inc.
7 * Based on the Tegra PCIe driver
9 * Bits taken from Synopsys DesignWare Host controller driver and
10 * ARM PCI Host generic driver.
13 #include <linux/interrupt.h>
14 #include <linux/irq.h>
15 #include <linux/irqdomain.h>
16 #include <linux/kernel.h>
17 #include <linux/init.h>
18 #include <linux/msi.h>
19 #include <linux/of_address.h>
20 #include <linux/of_pci.h>
21 #include <linux/of_platform.h>
22 #include <linux/of_irq.h>
23 #include <linux/pci.h>
24 #include <linux/pci-ecam.h>
25 #include <linux/platform_device.h>
29 /* Register definitions */
30 #define XILINX_PCIE_REG_BIR 0x00000130
31 #define XILINX_PCIE_REG_IDR 0x00000138
32 #define XILINX_PCIE_REG_IMR 0x0000013c
33 #define XILINX_PCIE_REG_PSCR 0x00000144
34 #define XILINX_PCIE_REG_RPSC 0x00000148
35 #define XILINX_PCIE_REG_MSIBASE1 0x0000014c
36 #define XILINX_PCIE_REG_MSIBASE2 0x00000150
37 #define XILINX_PCIE_REG_RPEFR 0x00000154
38 #define XILINX_PCIE_REG_RPIFR1 0x00000158
39 #define XILINX_PCIE_REG_RPIFR2 0x0000015c
41 /* Interrupt registers definitions */
42 #define XILINX_PCIE_INTR_LINK_DOWN BIT(0)
43 #define XILINX_PCIE_INTR_ECRC_ERR BIT(1)
44 #define XILINX_PCIE_INTR_STR_ERR BIT(2)
45 #define XILINX_PCIE_INTR_HOT_RESET BIT(3)
46 #define XILINX_PCIE_INTR_CFG_TIMEOUT BIT(8)
47 #define XILINX_PCIE_INTR_CORRECTABLE BIT(9)
48 #define XILINX_PCIE_INTR_NONFATAL BIT(10)
49 #define XILINX_PCIE_INTR_FATAL BIT(11)
50 #define XILINX_PCIE_INTR_INTX BIT(16)
51 #define XILINX_PCIE_INTR_MSI BIT(17)
52 #define XILINX_PCIE_INTR_SLV_UNSUPP BIT(20)
53 #define XILINX_PCIE_INTR_SLV_UNEXP BIT(21)
54 #define XILINX_PCIE_INTR_SLV_COMPL BIT(22)
55 #define XILINX_PCIE_INTR_SLV_ERRP BIT(23)
56 #define XILINX_PCIE_INTR_SLV_CMPABT BIT(24)
57 #define XILINX_PCIE_INTR_SLV_ILLBUR BIT(25)
58 #define XILINX_PCIE_INTR_MST_DECERR BIT(26)
59 #define XILINX_PCIE_INTR_MST_SLVERR BIT(27)
60 #define XILINX_PCIE_INTR_MST_ERRP BIT(28)
61 #define XILINX_PCIE_IMR_ALL_MASK 0x1FF30FED
62 #define XILINX_PCIE_IMR_ENABLE_MASK 0x1FF30F0D
63 #define XILINX_PCIE_IDR_ALL_MASK 0xFFFFFFFF
65 /* Root Port Error FIFO Read Register definitions */
66 #define XILINX_PCIE_RPEFR_ERR_VALID BIT(18)
67 #define XILINX_PCIE_RPEFR_REQ_ID GENMASK(15, 0)
68 #define XILINX_PCIE_RPEFR_ALL_MASK 0xFFFFFFFF
70 /* Root Port Interrupt FIFO Read Register 1 definitions */
71 #define XILINX_PCIE_RPIFR1_INTR_VALID BIT(31)
72 #define XILINX_PCIE_RPIFR1_MSI_INTR BIT(30)
73 #define XILINX_PCIE_RPIFR1_INTR_MASK GENMASK(28, 27)
74 #define XILINX_PCIE_RPIFR1_ALL_MASK 0xFFFFFFFF
75 #define XILINX_PCIE_RPIFR1_INTR_SHIFT 27
77 /* Bridge Info Register definitions */
78 #define XILINX_PCIE_BIR_ECAM_SZ_MASK GENMASK(18, 16)
79 #define XILINX_PCIE_BIR_ECAM_SZ_SHIFT 16
81 /* Root Port Interrupt FIFO Read Register 2 definitions */
82 #define XILINX_PCIE_RPIFR2_MSG_DATA GENMASK(15, 0)
84 /* Root Port Status/control Register definitions */
85 #define XILINX_PCIE_REG_RPSC_BEN BIT(0)
87 /* Phy Status/Control Register definitions */
88 #define XILINX_PCIE_REG_PSCR_LNKUP BIT(11)
90 /* Number of MSI IRQs */
91 #define XILINX_NUM_MSI_IRQS 128
94 * struct xilinx_pcie - PCIe port information
95 * @dev: Device pointer
96 * @reg_base: IO Mapped Register Base
97 * @msi_map: Bitmap of allocated MSIs
98 * @map_lock: Mutex protecting the MSI allocation
99 * @msi_domain: MSI IRQ domain pointer
100 * @leg_domain: Legacy IRQ domain pointer
101 * @resources: Bus Resources
105 void __iomem
*reg_base
;
106 unsigned long msi_map
[BITS_TO_LONGS(XILINX_NUM_MSI_IRQS
)];
107 struct mutex map_lock
;
108 struct irq_domain
*msi_domain
;
109 struct irq_domain
*leg_domain
;
110 struct list_head resources
;
113 static inline u32
pcie_read(struct xilinx_pcie
*pcie
, u32 reg
)
115 return readl(pcie
->reg_base
+ reg
);
118 static inline void pcie_write(struct xilinx_pcie
*pcie
, u32 val
, u32 reg
)
120 writel(val
, pcie
->reg_base
+ reg
);
123 static inline bool xilinx_pcie_link_up(struct xilinx_pcie
*pcie
)
125 return (pcie_read(pcie
, XILINX_PCIE_REG_PSCR
) &
126 XILINX_PCIE_REG_PSCR_LNKUP
) ? 1 : 0;
130 * xilinx_pcie_clear_err_interrupts - Clear Error Interrupts
131 * @pcie: PCIe port information
133 static void xilinx_pcie_clear_err_interrupts(struct xilinx_pcie
*pcie
)
135 struct device
*dev
= pcie
->dev
;
136 unsigned long val
= pcie_read(pcie
, XILINX_PCIE_REG_RPEFR
);
138 if (val
& XILINX_PCIE_RPEFR_ERR_VALID
) {
139 dev_dbg(dev
, "Requester ID %lu\n",
140 val
& XILINX_PCIE_RPEFR_REQ_ID
);
141 pcie_write(pcie
, XILINX_PCIE_RPEFR_ALL_MASK
,
142 XILINX_PCIE_REG_RPEFR
);
147 * xilinx_pcie_valid_device - Check if a valid device is present on bus
148 * @bus: PCI Bus structure
149 * @devfn: device/function
151 * Return: 'true' on success and 'false' if invalid device is found
153 static bool xilinx_pcie_valid_device(struct pci_bus
*bus
, unsigned int devfn
)
155 struct xilinx_pcie
*pcie
= bus
->sysdata
;
157 /* Check if link is up when trying to access downstream pcie ports */
158 if (!pci_is_root_bus(bus
)) {
159 if (!xilinx_pcie_link_up(pcie
))
161 } else if (devfn
> 0) {
162 /* Only one device down on each root port */
169 * xilinx_pcie_map_bus - Get configuration base
170 * @bus: PCI Bus structure
171 * @devfn: Device/function
172 * @where: Offset from base
174 * Return: Base address of the configuration space needed to be
177 static void __iomem
*xilinx_pcie_map_bus(struct pci_bus
*bus
,
178 unsigned int devfn
, int where
)
180 struct xilinx_pcie
*pcie
= bus
->sysdata
;
182 if (!xilinx_pcie_valid_device(bus
, devfn
))
185 return pcie
->reg_base
+ PCIE_ECAM_OFFSET(bus
->number
, devfn
, where
);
188 /* PCIe operations */
189 static struct pci_ops xilinx_pcie_ops
= {
190 .map_bus
= xilinx_pcie_map_bus
,
191 .read
= pci_generic_config_read
,
192 .write
= pci_generic_config_write
,
197 static void xilinx_msi_top_irq_ack(struct irq_data
*d
)
200 * xilinx_pcie_intr_handler() will have performed the Ack.
201 * Eventually, this should be fixed and the Ack be moved in
202 * the respective callbacks for INTx and MSI.
206 static struct irq_chip xilinx_msi_top_chip
= {
208 .irq_ack
= xilinx_msi_top_irq_ack
,
211 static void xilinx_compose_msi_msg(struct irq_data
*data
, struct msi_msg
*msg
)
213 struct xilinx_pcie
*pcie
= irq_data_get_irq_chip_data(data
);
214 phys_addr_t pa
= ALIGN_DOWN(virt_to_phys(pcie
), SZ_4K
);
216 msg
->address_lo
= lower_32_bits(pa
);
217 msg
->address_hi
= upper_32_bits(pa
);
218 msg
->data
= data
->hwirq
;
221 static struct irq_chip xilinx_msi_bottom_chip
= {
222 .name
= "Xilinx MSI",
223 .irq_compose_msi_msg
= xilinx_compose_msi_msg
,
226 static int xilinx_msi_domain_alloc(struct irq_domain
*domain
, unsigned int virq
,
227 unsigned int nr_irqs
, void *args
)
229 struct xilinx_pcie
*pcie
= domain
->host_data
;
232 mutex_lock(&pcie
->map_lock
);
234 hwirq
= bitmap_find_free_region(pcie
->msi_map
, XILINX_NUM_MSI_IRQS
, order_base_2(nr_irqs
));
236 mutex_unlock(&pcie
->map_lock
);
241 for (i
= 0; i
< nr_irqs
; i
++)
242 irq_domain_set_info(domain
, virq
+ i
, hwirq
+ i
,
243 &xilinx_msi_bottom_chip
, domain
->host_data
,
244 handle_edge_irq
, NULL
, NULL
);
249 static void xilinx_msi_domain_free(struct irq_domain
*domain
, unsigned int virq
,
250 unsigned int nr_irqs
)
252 struct irq_data
*d
= irq_domain_get_irq_data(domain
, virq
);
253 struct xilinx_pcie
*pcie
= domain
->host_data
;
255 mutex_lock(&pcie
->map_lock
);
257 bitmap_release_region(pcie
->msi_map
, d
->hwirq
, order_base_2(nr_irqs
));
259 mutex_unlock(&pcie
->map_lock
);
262 static const struct irq_domain_ops xilinx_msi_domain_ops
= {
263 .alloc
= xilinx_msi_domain_alloc
,
264 .free
= xilinx_msi_domain_free
,
267 static struct msi_domain_info xilinx_msi_info
= {
268 .flags
= MSI_FLAG_USE_DEF_DOM_OPS
| MSI_FLAG_USE_DEF_CHIP_OPS
|
269 MSI_FLAG_NO_AFFINITY
,
270 .chip
= &xilinx_msi_top_chip
,
273 static int xilinx_allocate_msi_domains(struct xilinx_pcie
*pcie
)
275 struct fwnode_handle
*fwnode
= dev_fwnode(pcie
->dev
);
276 struct irq_domain
*parent
;
278 parent
= irq_domain_create_linear(fwnode
, XILINX_NUM_MSI_IRQS
,
279 &xilinx_msi_domain_ops
, pcie
);
281 dev_err(pcie
->dev
, "failed to create IRQ domain\n");
284 irq_domain_update_bus_token(parent
, DOMAIN_BUS_NEXUS
);
286 pcie
->msi_domain
= pci_msi_create_irq_domain(fwnode
, &xilinx_msi_info
, parent
);
287 if (!pcie
->msi_domain
) {
288 dev_err(pcie
->dev
, "failed to create MSI domain\n");
289 irq_domain_remove(parent
);
296 static void xilinx_free_msi_domains(struct xilinx_pcie
*pcie
)
298 struct irq_domain
*parent
= pcie
->msi_domain
->parent
;
300 irq_domain_remove(pcie
->msi_domain
);
301 irq_domain_remove(parent
);
307 * xilinx_pcie_intx_map - Set the handler for the INTx and mark IRQ as valid
308 * @domain: IRQ domain
309 * @irq: Virtual IRQ number
310 * @hwirq: HW interrupt number
312 * Return: Always returns 0.
314 static int xilinx_pcie_intx_map(struct irq_domain
*domain
, unsigned int irq
,
315 irq_hw_number_t hwirq
)
317 irq_set_chip_and_handler(irq
, &dummy_irq_chip
, handle_simple_irq
);
318 irq_set_chip_data(irq
, domain
->host_data
);
323 /* INTx IRQ Domain operations */
324 static const struct irq_domain_ops intx_domain_ops
= {
325 .map
= xilinx_pcie_intx_map
,
326 .xlate
= pci_irqd_intx_xlate
,
329 /* PCIe HW Functions */
332 * xilinx_pcie_intr_handler - Interrupt Service Handler
334 * @data: PCIe port information
336 * Return: IRQ_HANDLED on success and IRQ_NONE on failure
338 static irqreturn_t
xilinx_pcie_intr_handler(int irq
, void *data
)
340 struct xilinx_pcie
*pcie
= (struct xilinx_pcie
*)data
;
341 struct device
*dev
= pcie
->dev
;
342 u32 val
, mask
, status
;
344 /* Read interrupt decode and mask registers */
345 val
= pcie_read(pcie
, XILINX_PCIE_REG_IDR
);
346 mask
= pcie_read(pcie
, XILINX_PCIE_REG_IMR
);
352 if (status
& XILINX_PCIE_INTR_LINK_DOWN
)
353 dev_warn(dev
, "Link Down\n");
355 if (status
& XILINX_PCIE_INTR_ECRC_ERR
)
356 dev_warn(dev
, "ECRC failed\n");
358 if (status
& XILINX_PCIE_INTR_STR_ERR
)
359 dev_warn(dev
, "Streaming error\n");
361 if (status
& XILINX_PCIE_INTR_HOT_RESET
)
362 dev_info(dev
, "Hot reset\n");
364 if (status
& XILINX_PCIE_INTR_CFG_TIMEOUT
)
365 dev_warn(dev
, "ECAM access timeout\n");
367 if (status
& XILINX_PCIE_INTR_CORRECTABLE
) {
368 dev_warn(dev
, "Correctable error message\n");
369 xilinx_pcie_clear_err_interrupts(pcie
);
372 if (status
& XILINX_PCIE_INTR_NONFATAL
) {
373 dev_warn(dev
, "Non fatal error message\n");
374 xilinx_pcie_clear_err_interrupts(pcie
);
377 if (status
& XILINX_PCIE_INTR_FATAL
) {
378 dev_warn(dev
, "Fatal error message\n");
379 xilinx_pcie_clear_err_interrupts(pcie
);
382 if (status
& (XILINX_PCIE_INTR_INTX
| XILINX_PCIE_INTR_MSI
)) {
383 struct irq_domain
*domain
;
385 val
= pcie_read(pcie
, XILINX_PCIE_REG_RPIFR1
);
387 /* Check whether interrupt valid */
388 if (!(val
& XILINX_PCIE_RPIFR1_INTR_VALID
)) {
389 dev_warn(dev
, "RP Intr FIFO1 read error\n");
393 /* Decode the IRQ number */
394 if (val
& XILINX_PCIE_RPIFR1_MSI_INTR
) {
395 val
= pcie_read(pcie
, XILINX_PCIE_REG_RPIFR2
) &
396 XILINX_PCIE_RPIFR2_MSG_DATA
;
397 domain
= pcie
->msi_domain
->parent
;
399 val
= (val
& XILINX_PCIE_RPIFR1_INTR_MASK
) >>
400 XILINX_PCIE_RPIFR1_INTR_SHIFT
;
401 domain
= pcie
->leg_domain
;
404 /* Clear interrupt FIFO register 1 */
405 pcie_write(pcie
, XILINX_PCIE_RPIFR1_ALL_MASK
,
406 XILINX_PCIE_REG_RPIFR1
);
408 generic_handle_domain_irq(domain
, val
);
411 if (status
& XILINX_PCIE_INTR_SLV_UNSUPP
)
412 dev_warn(dev
, "Slave unsupported request\n");
414 if (status
& XILINX_PCIE_INTR_SLV_UNEXP
)
415 dev_warn(dev
, "Slave unexpected completion\n");
417 if (status
& XILINX_PCIE_INTR_SLV_COMPL
)
418 dev_warn(dev
, "Slave completion timeout\n");
420 if (status
& XILINX_PCIE_INTR_SLV_ERRP
)
421 dev_warn(dev
, "Slave Error Poison\n");
423 if (status
& XILINX_PCIE_INTR_SLV_CMPABT
)
424 dev_warn(dev
, "Slave Completer Abort\n");
426 if (status
& XILINX_PCIE_INTR_SLV_ILLBUR
)
427 dev_warn(dev
, "Slave Illegal Burst\n");
429 if (status
& XILINX_PCIE_INTR_MST_DECERR
)
430 dev_warn(dev
, "Master decode error\n");
432 if (status
& XILINX_PCIE_INTR_MST_SLVERR
)
433 dev_warn(dev
, "Master slave error\n");
435 if (status
& XILINX_PCIE_INTR_MST_ERRP
)
436 dev_warn(dev
, "Master error poison\n");
439 /* Clear the Interrupt Decode register */
440 pcie_write(pcie
, status
, XILINX_PCIE_REG_IDR
);
446 * xilinx_pcie_init_irq_domain - Initialize IRQ domain
447 * @pcie: PCIe port information
449 * Return: '0' on success and error value on failure
451 static int xilinx_pcie_init_irq_domain(struct xilinx_pcie
*pcie
)
453 struct device
*dev
= pcie
->dev
;
454 struct device_node
*pcie_intc_node
;
458 pcie_intc_node
= of_get_next_child(dev
->of_node
, NULL
);
459 if (!pcie_intc_node
) {
460 dev_err(dev
, "No PCIe Intc node found\n");
464 pcie
->leg_domain
= irq_domain_add_linear(pcie_intc_node
, PCI_NUM_INTX
,
467 of_node_put(pcie_intc_node
);
468 if (!pcie
->leg_domain
) {
469 dev_err(dev
, "Failed to get a INTx IRQ domain\n");
474 if (IS_ENABLED(CONFIG_PCI_MSI
)) {
475 phys_addr_t pa
= ALIGN_DOWN(virt_to_phys(pcie
), SZ_4K
);
477 ret
= xilinx_allocate_msi_domains(pcie
);
481 pcie_write(pcie
, upper_32_bits(pa
), XILINX_PCIE_REG_MSIBASE1
);
482 pcie_write(pcie
, lower_32_bits(pa
), XILINX_PCIE_REG_MSIBASE2
);
489 * xilinx_pcie_init_port - Initialize hardware
490 * @pcie: PCIe port information
492 static void xilinx_pcie_init_port(struct xilinx_pcie
*pcie
)
494 struct device
*dev
= pcie
->dev
;
496 if (xilinx_pcie_link_up(pcie
))
497 dev_info(dev
, "PCIe Link is UP\n");
499 dev_info(dev
, "PCIe Link is DOWN\n");
501 /* Disable all interrupts */
502 pcie_write(pcie
, ~XILINX_PCIE_IDR_ALL_MASK
,
503 XILINX_PCIE_REG_IMR
);
505 /* Clear pending interrupts */
506 pcie_write(pcie
, pcie_read(pcie
, XILINX_PCIE_REG_IDR
) &
507 XILINX_PCIE_IMR_ALL_MASK
,
508 XILINX_PCIE_REG_IDR
);
510 /* Enable all interrupts we handle */
511 pcie_write(pcie
, XILINX_PCIE_IMR_ENABLE_MASK
, XILINX_PCIE_REG_IMR
);
513 /* Enable the Bridge enable bit */
514 pcie_write(pcie
, pcie_read(pcie
, XILINX_PCIE_REG_RPSC
) |
515 XILINX_PCIE_REG_RPSC_BEN
,
516 XILINX_PCIE_REG_RPSC
);
520 * xilinx_pcie_parse_dt - Parse Device tree
521 * @pcie: PCIe port information
523 * Return: '0' on success and error value on failure
525 static int xilinx_pcie_parse_dt(struct xilinx_pcie
*pcie
)
527 struct device
*dev
= pcie
->dev
;
528 struct device_node
*node
= dev
->of_node
;
529 struct resource regs
;
533 err
= of_address_to_resource(node
, 0, ®s
);
535 dev_err(dev
, "missing \"reg\" property\n");
539 pcie
->reg_base
= devm_pci_remap_cfg_resource(dev
, ®s
);
540 if (IS_ERR(pcie
->reg_base
))
541 return PTR_ERR(pcie
->reg_base
);
543 irq
= irq_of_parse_and_map(node
, 0);
544 err
= devm_request_irq(dev
, irq
, xilinx_pcie_intr_handler
,
545 IRQF_SHARED
| IRQF_NO_THREAD
,
546 "xilinx-pcie", pcie
);
548 dev_err(dev
, "unable to request irq %d\n", irq
);
556 * xilinx_pcie_probe - Probe function
557 * @pdev: Platform device pointer
559 * Return: '0' on success and error value on failure
561 static int xilinx_pcie_probe(struct platform_device
*pdev
)
563 struct device
*dev
= &pdev
->dev
;
564 struct xilinx_pcie
*pcie
;
565 struct pci_host_bridge
*bridge
;
571 bridge
= devm_pci_alloc_host_bridge(dev
, sizeof(*pcie
));
575 pcie
= pci_host_bridge_priv(bridge
);
576 mutex_init(&pcie
->map_lock
);
579 err
= xilinx_pcie_parse_dt(pcie
);
581 dev_err(dev
, "Parsing DT failed\n");
585 xilinx_pcie_init_port(pcie
);
587 err
= xilinx_pcie_init_irq_domain(pcie
);
589 dev_err(dev
, "Failed creating IRQ Domain\n");
593 bridge
->sysdata
= pcie
;
594 bridge
->ops
= &xilinx_pcie_ops
;
596 err
= pci_host_probe(bridge
);
598 xilinx_free_msi_domains(pcie
);
603 static const struct of_device_id xilinx_pcie_of_match
[] = {
604 { .compatible
= "xlnx,axi-pcie-host-1.00.a", },
608 static struct platform_driver xilinx_pcie_driver
= {
610 .name
= "xilinx-pcie",
611 .of_match_table
= xilinx_pcie_of_match
,
612 .suppress_bind_attrs
= true,
614 .probe
= xilinx_pcie_probe
,
616 builtin_platform_driver(xilinx_pcie_driver
);