* Broadcom iProc PCIe controller with the platform bus interface Required properties: - compatible: "brcm,iproc-pcie" for the first generation of PAXB based controller, used in SoCs including NSP, Cygnus, NS2, and Pegasus "brcm,iproc-pcie-paxb-v2" for the second generation of PAXB-based controllers, used in Stingray "brcm,iproc-pcie-paxc" for the first generation of PAXC based controller, used in NS2 "brcm,iproc-pcie-paxc-v2" for the second generation of PAXC based controller, used in Stingray PAXB-based root complex is used for external endpoint devices. PAXC-based root complex is connected to emulated endpoint devices internal to the ASIC - reg: base address and length of the PCIe controller I/O register space - #interrupt-cells: set to <1> - interrupt-map-mask and interrupt-map, standard PCI properties to define the mapping of the PCIe interface to interrupt numbers - linux,pci-domain: PCI domain ID. Should be unique for each host controller - bus-range: PCI bus numbers covered - #address-cells: set to <3> - #size-cells: set to <2> - device_type: set to "pci" - ranges: ranges for the PCI memory and I/O regions Optional properties: - phys: phandle of the PCIe PHY device - phy-names: must be "pcie-phy" - dma-coherent: present if DMA operations are coherent - dma-ranges: Some PAXB-based root complexes do not have inbound mapping done by the ASIC after power on reset. In this case, SW is required to configure the mapping, based on inbound memory regions specified by this property. - brcm,pcie-ob: Some iProc SoCs do not have the outbound address mapping done by the ASIC after power on reset. In this case, SW needs to configure it If the brcm,pcie-ob property is present, the following properties become effective: Required: - brcm,pcie-ob-axi-offset: The offset from the AXI address to the internal address used by the iProc PCIe core (not the PCIe address) MSI support (optional): For older platforms without MSI integrated in the GIC, iProc PCIe core provides an event queue based MSI support. The iProc MSI uses host memories to store MSI posted writes in the event queues On newer iProc platforms, gicv2m or gicv3-its based MSI support should be used - msi-map: Maps a Requester ID to an MSI controller and associated MSI sideband data - msi-parent: Link to the device node of the MSI controller, used when no MSI sideband data is passed between the iProc PCIe controller and the MSI controller Refer to the following binding documents for more detailed description on the use of 'msi-map' and 'msi-parent': Documentation/devicetree/bindings/pci/pci-msi.txt Documentation/devicetree/bindings/interrupt-controller/msi.txt When the iProc event queue based MSI is used, one needs to define the following properties in the MSI device node: - compatible: Must be "brcm,iproc-msi" - msi-controller: claims itself as an MSI controller - interrupt-parent: Link to its parent interrupt device - interrupts: List of interrupt IDs from its parent interrupt device Optional properties: - brcm,pcie-msi-inten: Needs to be present for some older iProc platforms that require the interrupt enable registers to be set explicitly to enable MSI Example: pcie0: pcie@18012000 { compatible = "brcm,iproc-pcie"; reg = <0x18012000 0x1000>; #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; interrupt-map = <0 0 0 0 &gic GIC_SPI 100 IRQ_TYPE_NONE>; linux,pci-domain = <0>; bus-range = <0x00 0xff>; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; ranges = <0x81000000 0 0 0x28000000 0 0x00010000 0x82000000 0 0x20000000 0x20000000 0 0x04000000>; phys = <&phy 0 5>; phy-names = "pcie-phy"; brcm,pcie-ob; brcm,pcie-ob-axi-offset = <0x00000000>; msi-parent = <&msi0>; /* iProc event queue based MSI */ msi0: msi@18012000 { compatible = "brcm,iproc-msi"; msi-controller; interrupt-parent = <&gic>; interrupts = , , , , }; }; pcie1: pcie@18013000 { compatible = "brcm,iproc-pcie"; reg = <0x18013000 0x1000>; #interrupt-cells = <1>; interrupt-map-mask = <0 0 0 0>; interrupt-map = <0 0 0 0 &gic GIC_SPI 106 IRQ_TYPE_NONE>; linux,pci-domain = <1>; bus-range = <0x00 0xff>; #address-cells = <3>; #size-cells = <2>; device_type = "pci"; ranges = <0x81000000 0 0 0x48000000 0 0x00010000 0x82000000 0 0x40000000 0x40000000 0 0x04000000>; phys = <&phy 1 6>; phy-names = "pcie-phy"; };