| # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/pci/apple,pcie.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Apple PCIe host controller |
| |
| maintainers: |
| - Mark Kettenis <kettenis@openbsd.org> |
| |
| description: | |
| The Apple PCIe host controller is a PCIe host controller with |
| multiple root ports present in Apple ARM SoC platforms, including |
| various iPhone and iPad devices and the "Apple Silicon" Macs. |
| The controller incorporates Synopsys DesigWare PCIe logic to |
| implements its root ports. But the ATU found on most DesignWare |
| PCIe host bridges is absent. |
| |
| All root ports share a single ECAM space, but separate GPIOs are |
| used to take the PCI devices on those ports out of reset. Therefore |
| the standard "reset-gpios" and "max-link-speed" properties appear on |
| the child nodes that represent the PCI bridges that correspond to |
| the individual root ports. |
| |
| MSIs are handled by the PCIe controller and translated into regular |
| interrupts. A range of 32 MSIs is provided. These 32 MSIs can be |
| distributed over the root ports as the OS sees fit by programming |
| the PCIe controller's port registers. |
| |
| properties: |
| compatible: |
| items: |
| - enum: |
| - apple,t8103-pcie |
| - apple,t8112-pcie |
| - apple,t6000-pcie |
| - const: apple,pcie |
| |
| reg: |
| minItems: 3 |
| maxItems: 6 |
| |
| reg-names: |
| minItems: 3 |
| items: |
| - const: config |
| - const: rc |
| - const: port0 |
| - const: port1 |
| - const: port2 |
| - const: port3 |
| |
| ranges: |
| minItems: 2 |
| maxItems: 2 |
| |
| interrupts: |
| description: |
| Interrupt specifiers, one for each root port. |
| minItems: 1 |
| maxItems: 4 |
| |
| msi-parent: true |
| |
| msi-ranges: |
| maxItems: 1 |
| |
| iommu-map: true |
| iommu-map-mask: true |
| |
| power-domains: |
| maxItems: 1 |
| |
| required: |
| - compatible |
| - reg |
| - reg-names |
| - bus-range |
| - interrupts |
| - msi-controller |
| - msi-parent |
| - msi-ranges |
| |
| unevaluatedProperties: false |
| |
| allOf: |
| - $ref: /schemas/pci/pci-host-bridge.yaml# |
| - $ref: /schemas/interrupt-controller/msi-controller.yaml# |
| - if: |
| properties: |
| compatible: |
| contains: |
| const: apple,t8103-pcie |
| then: |
| properties: |
| reg: |
| maxItems: 5 |
| interrupts: |
| maxItems: 3 |
| |
| examples: |
| - | |
| #include <dt-bindings/interrupt-controller/apple-aic.h> |
| |
| soc { |
| #address-cells = <2>; |
| #size-cells = <2>; |
| |
| pcie0: pcie@690000000 { |
| compatible = "apple,t8103-pcie", "apple,pcie"; |
| device_type = "pci"; |
| |
| reg = <0x6 0x90000000 0x0 0x1000000>, |
| <0x6 0x80000000 0x0 0x100000>, |
| <0x6 0x81000000 0x0 0x4000>, |
| <0x6 0x82000000 0x0 0x4000>, |
| <0x6 0x83000000 0x0 0x4000>; |
| reg-names = "config", "rc", "port0", "port1", "port2"; |
| |
| interrupt-parent = <&aic>; |
| interrupts = <AIC_IRQ 695 IRQ_TYPE_LEVEL_HIGH>, |
| <AIC_IRQ 698 IRQ_TYPE_LEVEL_HIGH>, |
| <AIC_IRQ 701 IRQ_TYPE_LEVEL_HIGH>; |
| |
| msi-controller; |
| msi-parent = <&pcie0>; |
| msi-ranges = <&aic AIC_IRQ 704 IRQ_TYPE_EDGE_RISING 32>; |
| |
| iommu-map = <0x100 &dart0 1 1>, |
| <0x200 &dart1 1 1>, |
| <0x300 &dart2 1 1>; |
| iommu-map-mask = <0xff00>; |
| |
| bus-range = <0 3>; |
| #address-cells = <3>; |
| #size-cells = <2>; |
| ranges = <0x43000000 0x6 0xa0000000 0x6 0xa0000000 0x0 0x20000000>, |
| <0x02000000 0x0 0xc0000000 0x6 0xc0000000 0x0 0x40000000>; |
| |
| power-domains = <&ps_apcie_gp>; |
| pinctrl-0 = <&pcie_pins>; |
| pinctrl-names = "default"; |
| |
| pci@0,0 { |
| device_type = "pci"; |
| reg = <0x0 0x0 0x0 0x0 0x0>; |
| reset-gpios = <&pinctrl_ap 152 0>; |
| |
| #address-cells = <3>; |
| #size-cells = <2>; |
| ranges; |
| }; |
| |
| pci@1,0 { |
| device_type = "pci"; |
| reg = <0x800 0x0 0x0 0x0 0x0>; |
| reset-gpios = <&pinctrl_ap 153 0>; |
| |
| #address-cells = <3>; |
| #size-cells = <2>; |
| ranges; |
| }; |
| |
| pci@2,0 { |
| device_type = "pci"; |
| reg = <0x1000 0x0 0x0 0x0 0x0>; |
| reset-gpios = <&pinctrl_ap 33 0>; |
| |
| #address-cells = <3>; |
| #size-cells = <2>; |
| ranges; |
| }; |
| }; |
| }; |