# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) %YAML 1.2 --- $id: http://devicetree.org/schemas/pci/brcm,iproc-pcie.yaml# $schema: http://devicetree.org/meta-schemas/core.yaml# title: Broadcom iProc PCIe controller with the platform bus interface maintainers: - Ray Jui <ray.jui@broadcom.com> - Scott Branden <scott.branden@broadcom.com> allOf: - $ref: /schemas/pci/pci-bus.yaml# properties: compatible: items: - enum: # for the first generation of PAXB based controller, used in SoCs # including NSP, Cygnus, NS2, and Pegasus - brcm,iproc-pcie # for the second generation of PAXB-based controllers, used in # Stingray - brcm,iproc-pcie-paxb-v2 # For the first generation of PAXC based controller, used in NS2 - brcm,iproc-pcie-paxc # For the second generation of PAXC based controller, used in Stingray - brcm,iproc-pcie-paxc-v2 reg: maxItems: 1 description: > Base address and length of the PCIe controller I/O register space ranges: minItems: 1 maxItems: 2 description: > Ranges for the PCI memory and I/O regions phys: maxItems: 1 phy-names: items: - const: pcie-phy dma-coherent: true brcm,pcie-ob: type: boolean description: > 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 brcm,pcie-ob-axi-offset: $ref: /schemas/types.yaml#/definitions/uint32 description: > The offset from the AXI address to the internal address used by the iProc PCIe core (not the PCIe address) msi: type: object $ref: /schemas/interrupt-controller/msi-controller.yaml# unevaluatedProperties: false properties: compatible: items: - const: brcm,iproc-msi interrupts: maxItems: 4 brcm,pcie-msi-inten: type: boolean description: Needs to be present for some older iProc platforms that require the interrupt enable registers to be set explicitly to enable MSI msi-parent: true dependencies: brcm,pcie-ob-axi-offset: ["brcm,pcie-ob"] brcm,pcie-msi-inten: [msi-controller] required: - compatible - reg - ranges if: properties: compatible: contains: enum: - brcm,iproc-pcie then: required: - interrupt-map - interrupt-map-mask unevaluatedProperties: false examples: - | #include <dt-bindings/interrupt-controller/arm-gic.h> gic: interrupt-controller { interrupt-controller; #interrupt-cells = <3>; }; 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 { compatible = "brcm,iproc-msi"; msi-controller; interrupt-parent = <&gic>; interrupts = <GIC_SPI 96 IRQ_TYPE_NONE>, <GIC_SPI 97 IRQ_TYPE_NONE>, <GIC_SPI 98 IRQ_TYPE_NONE>, <GIC_SPI 99 IRQ_TYPE_NONE>; }; }; - | 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"; };