* Xilinx AXI PCIe Root Port Bridge DT description Required properties: - #address-cells: Address representation for root ports, set to <3> - #size-cells: Size representation for root ports, set to <2> - #interrupt-cells: specifies the number of cells needed to encode an interrupt source. The value must be 1. - compatible: Should contain "xlnx,axi-pcie-host-1.00.a" - reg: Should contain AXI PCIe registers location and length - device_type: must be "pci" - interrupts: Should contain AXI PCIe interrupt - interrupt-map-mask, interrupt-map: standard PCI properties to define the mapping of the PCI interface to interrupt numbers. - ranges: ranges for the PCI memory regions (I/O space region is not supported by hardware) Please refer to the standard PCI bus binding document for a more detailed explanation Optional properties for Zynq/Microblaze: - bus-range: PCI bus numbers covered Interrupt controller child node +++++++++++++++++++++++++++++++ Required properties: - interrupt-controller: identifies the node as an interrupt controller - #address-cells: specifies the number of cells needed to encode an address. The value must be 0. - #interrupt-cells: specifies the number of cells needed to encode an interrupt source. The value must be 1. NOTE: The core provides a single interrupt for both INTx/MSI messages. So, created a interrupt controller node to support 'interrupt-map' DT functionality. The driver will create an IRQ domain for this map, decode the four INTx interrupts in ISR and route them to this domain. Example: ++++++++ Zynq: pci_express: axi-pcie@50000000 { #address-cells = <3>; #size-cells = <2>; #interrupt-cells = <1>; compatible = "xlnx,axi-pcie-host-1.00.a"; reg = < 0x50000000 0x1000000 >; device_type = "pci"; interrupts = < 0 52 4 >; interrupt-map-mask = <0 0 0 7>; interrupt-map = <0 0 0 1 &pcie_intc 1>, <0 0 0 2 &pcie_intc 2>, <0 0 0 3 &pcie_intc 3>, <0 0 0 4 &pcie_intc 4>; ranges = < 0x02000000 0 0x60000000 0x60000000 0 0x10000000 >; pcie_intc: interrupt-controller { interrupt-controller; #address-cells = <0>; #interrupt-cells = <1>; }; }; Microblaze: pci_express: axi-pcie@10000000 { #address-cells = <3>; #size-cells = <2>; #interrupt-cells = <1>; compatible = "xlnx,axi-pcie-host-1.00.a"; reg = <0x10000000 0x4000000>; device_type = "pci"; interrupt-parent = <µblaze_0_intc>; interrupts = <1 2>; interrupt-map-mask = <0 0 0 7>; interrupt-map = <0 0 0 1 &pcie_intc 1>, <0 0 0 2 &pcie_intc 2>, <0 0 0 3 &pcie_intc 3>, <0 0 0 4 &pcie_intc 4>; ranges = <0x02000000 0x00000000 0x80000000 0x80000000 0x00000000 0x10000000>; pcie_intc: interrupt-controller { interrupt-controller; #address-cells = <0>; #interrupt-cells = <1>; }; }; |