162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/pci/apple,pcie.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: Apple PCIe host controller 862306a36Sopenharmony_ci 962306a36Sopenharmony_cimaintainers: 1062306a36Sopenharmony_ci - Mark Kettenis <kettenis@openbsd.org> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_cidescription: | 1362306a36Sopenharmony_ci The Apple PCIe host controller is a PCIe host controller with 1462306a36Sopenharmony_ci multiple root ports present in Apple ARM SoC platforms, including 1562306a36Sopenharmony_ci various iPhone and iPad devices and the "Apple Silicon" Macs. 1662306a36Sopenharmony_ci The controller incorporates Synopsys DesigWare PCIe logic to 1762306a36Sopenharmony_ci implements its root ports. But the ATU found on most DesignWare 1862306a36Sopenharmony_ci PCIe host bridges is absent. 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci All root ports share a single ECAM space, but separate GPIOs are 2162306a36Sopenharmony_ci used to take the PCI devices on those ports out of reset. Therefore 2262306a36Sopenharmony_ci the standard "reset-gpios" and "max-link-speed" properties appear on 2362306a36Sopenharmony_ci the child nodes that represent the PCI bridges that correspond to 2462306a36Sopenharmony_ci the individual root ports. 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci MSIs are handled by the PCIe controller and translated into regular 2762306a36Sopenharmony_ci interrupts. A range of 32 MSIs is provided. These 32 MSIs can be 2862306a36Sopenharmony_ci distributed over the root ports as the OS sees fit by programming 2962306a36Sopenharmony_ci the PCIe controller's port registers. 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ciproperties: 3262306a36Sopenharmony_ci compatible: 3362306a36Sopenharmony_ci items: 3462306a36Sopenharmony_ci - enum: 3562306a36Sopenharmony_ci - apple,t8103-pcie 3662306a36Sopenharmony_ci - apple,t8112-pcie 3762306a36Sopenharmony_ci - apple,t6000-pcie 3862306a36Sopenharmony_ci - const: apple,pcie 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci reg: 4162306a36Sopenharmony_ci minItems: 3 4262306a36Sopenharmony_ci maxItems: 6 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci reg-names: 4562306a36Sopenharmony_ci minItems: 3 4662306a36Sopenharmony_ci items: 4762306a36Sopenharmony_ci - const: config 4862306a36Sopenharmony_ci - const: rc 4962306a36Sopenharmony_ci - const: port0 5062306a36Sopenharmony_ci - const: port1 5162306a36Sopenharmony_ci - const: port2 5262306a36Sopenharmony_ci - const: port3 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci ranges: 5562306a36Sopenharmony_ci minItems: 2 5662306a36Sopenharmony_ci maxItems: 2 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci interrupts: 5962306a36Sopenharmony_ci description: 6062306a36Sopenharmony_ci Interrupt specifiers, one for each root port. 6162306a36Sopenharmony_ci minItems: 1 6262306a36Sopenharmony_ci maxItems: 4 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci msi-parent: true 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci msi-ranges: 6762306a36Sopenharmony_ci maxItems: 1 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci iommu-map: true 7062306a36Sopenharmony_ci iommu-map-mask: true 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci power-domains: 7362306a36Sopenharmony_ci maxItems: 1 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_cirequired: 7662306a36Sopenharmony_ci - compatible 7762306a36Sopenharmony_ci - reg 7862306a36Sopenharmony_ci - reg-names 7962306a36Sopenharmony_ci - bus-range 8062306a36Sopenharmony_ci - interrupts 8162306a36Sopenharmony_ci - msi-controller 8262306a36Sopenharmony_ci - msi-parent 8362306a36Sopenharmony_ci - msi-ranges 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ciunevaluatedProperties: false 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ciallOf: 8862306a36Sopenharmony_ci - $ref: /schemas/pci/pci-bus.yaml# 8962306a36Sopenharmony_ci - $ref: /schemas/interrupt-controller/msi-controller.yaml# 9062306a36Sopenharmony_ci - if: 9162306a36Sopenharmony_ci properties: 9262306a36Sopenharmony_ci compatible: 9362306a36Sopenharmony_ci contains: 9462306a36Sopenharmony_ci const: apple,t8103-pcie 9562306a36Sopenharmony_ci then: 9662306a36Sopenharmony_ci properties: 9762306a36Sopenharmony_ci reg: 9862306a36Sopenharmony_ci maxItems: 5 9962306a36Sopenharmony_ci interrupts: 10062306a36Sopenharmony_ci maxItems: 3 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ciexamples: 10362306a36Sopenharmony_ci - | 10462306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/apple-aic.h> 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci soc { 10762306a36Sopenharmony_ci #address-cells = <2>; 10862306a36Sopenharmony_ci #size-cells = <2>; 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci pcie0: pcie@690000000 { 11162306a36Sopenharmony_ci compatible = "apple,t8103-pcie", "apple,pcie"; 11262306a36Sopenharmony_ci device_type = "pci"; 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_ci reg = <0x6 0x90000000 0x0 0x1000000>, 11562306a36Sopenharmony_ci <0x6 0x80000000 0x0 0x100000>, 11662306a36Sopenharmony_ci <0x6 0x81000000 0x0 0x4000>, 11762306a36Sopenharmony_ci <0x6 0x82000000 0x0 0x4000>, 11862306a36Sopenharmony_ci <0x6 0x83000000 0x0 0x4000>; 11962306a36Sopenharmony_ci reg-names = "config", "rc", "port0", "port1", "port2"; 12062306a36Sopenharmony_ci 12162306a36Sopenharmony_ci interrupt-parent = <&aic>; 12262306a36Sopenharmony_ci interrupts = <AIC_IRQ 695 IRQ_TYPE_LEVEL_HIGH>, 12362306a36Sopenharmony_ci <AIC_IRQ 698 IRQ_TYPE_LEVEL_HIGH>, 12462306a36Sopenharmony_ci <AIC_IRQ 701 IRQ_TYPE_LEVEL_HIGH>; 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_ci msi-controller; 12762306a36Sopenharmony_ci msi-parent = <&pcie0>; 12862306a36Sopenharmony_ci msi-ranges = <&aic AIC_IRQ 704 IRQ_TYPE_EDGE_RISING 32>; 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci iommu-map = <0x100 &dart0 1 1>, 13162306a36Sopenharmony_ci <0x200 &dart1 1 1>, 13262306a36Sopenharmony_ci <0x300 &dart2 1 1>; 13362306a36Sopenharmony_ci iommu-map-mask = <0xff00>; 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_ci bus-range = <0 3>; 13662306a36Sopenharmony_ci #address-cells = <3>; 13762306a36Sopenharmony_ci #size-cells = <2>; 13862306a36Sopenharmony_ci ranges = <0x43000000 0x6 0xa0000000 0x6 0xa0000000 0x0 0x20000000>, 13962306a36Sopenharmony_ci <0x02000000 0x0 0xc0000000 0x6 0xc0000000 0x0 0x40000000>; 14062306a36Sopenharmony_ci 14162306a36Sopenharmony_ci power-domains = <&ps_apcie_gp>; 14262306a36Sopenharmony_ci pinctrl-0 = <&pcie_pins>; 14362306a36Sopenharmony_ci pinctrl-names = "default"; 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_ci pci@0,0 { 14662306a36Sopenharmony_ci device_type = "pci"; 14762306a36Sopenharmony_ci reg = <0x0 0x0 0x0 0x0 0x0>; 14862306a36Sopenharmony_ci reset-gpios = <&pinctrl_ap 152 0>; 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ci #address-cells = <3>; 15162306a36Sopenharmony_ci #size-cells = <2>; 15262306a36Sopenharmony_ci ranges; 15362306a36Sopenharmony_ci }; 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ci pci@1,0 { 15662306a36Sopenharmony_ci device_type = "pci"; 15762306a36Sopenharmony_ci reg = <0x800 0x0 0x0 0x0 0x0>; 15862306a36Sopenharmony_ci reset-gpios = <&pinctrl_ap 153 0>; 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci #address-cells = <3>; 16162306a36Sopenharmony_ci #size-cells = <2>; 16262306a36Sopenharmony_ci ranges; 16362306a36Sopenharmony_ci }; 16462306a36Sopenharmony_ci 16562306a36Sopenharmony_ci pci@2,0 { 16662306a36Sopenharmony_ci device_type = "pci"; 16762306a36Sopenharmony_ci reg = <0x1000 0x0 0x0 0x0 0x0>; 16862306a36Sopenharmony_ci reset-gpios = <&pinctrl_ap 33 0>; 16962306a36Sopenharmony_ci 17062306a36Sopenharmony_ci #address-cells = <3>; 17162306a36Sopenharmony_ci #size-cells = <2>; 17262306a36Sopenharmony_ci ranges; 17362306a36Sopenharmony_ci }; 17462306a36Sopenharmony_ci }; 17562306a36Sopenharmony_ci }; 176