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