2023-08-30 17:31:07 +02:00
|
|
|
# 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
|
2023-10-24 12:59:35 +02:00
|
|
|
- apple,t8112-pcie
|
2023-08-30 17:31:07 +02:00
|
|
|
- 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-bus.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;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|