162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci%YAML 1.2 362306a36Sopenharmony_ci--- 462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/pci/hisilicon,kirin-pcie.yaml# 562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 662306a36Sopenharmony_ci 762306a36Sopenharmony_cititle: HiSilicon Kirin SoCs PCIe host DT description 862306a36Sopenharmony_ci 962306a36Sopenharmony_cimaintainers: 1062306a36Sopenharmony_ci - Xiaowei Song <songxiaowei@hisilicon.com> 1162306a36Sopenharmony_ci - Binghui Wang <wangbinghui@hisilicon.com> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_cidescription: | 1462306a36Sopenharmony_ci Kirin PCIe host controller is based on the Synopsys DesignWare PCI core. 1562306a36Sopenharmony_ci It shares common functions with the PCIe DesignWare core driver and 1662306a36Sopenharmony_ci inherits common properties defined in 1762306a36Sopenharmony_ci Documentation/devicetree/bindings/pci/snps,dw-pcie.yaml. 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ciallOf: 2062306a36Sopenharmony_ci - $ref: /schemas/pci/snps,dw-pcie.yaml# 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ciproperties: 2362306a36Sopenharmony_ci compatible: 2462306a36Sopenharmony_ci contains: 2562306a36Sopenharmony_ci enum: 2662306a36Sopenharmony_ci - hisilicon,kirin960-pcie 2762306a36Sopenharmony_ci - hisilicon,kirin970-pcie 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci reg: 3062306a36Sopenharmony_ci description: | 3162306a36Sopenharmony_ci Should contain dbi, apb, config registers location and length. 3262306a36Sopenharmony_ci For hisilicon,kirin960-pcie, it should also contain phy. 3362306a36Sopenharmony_ci minItems: 3 3462306a36Sopenharmony_ci maxItems: 4 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci reg-names: 3762306a36Sopenharmony_ci minItems: 3 3862306a36Sopenharmony_ci maxItems: 4 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci clocks: true 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci clock-names: 4362306a36Sopenharmony_ci items: 4462306a36Sopenharmony_ci - const: pcie_phy_ref 4562306a36Sopenharmony_ci - const: pcie_aux 4662306a36Sopenharmony_ci - const: pcie_apb_phy 4762306a36Sopenharmony_ci - const: pcie_apb_sys 4862306a36Sopenharmony_ci - const: pcie_aclk 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci phys: 5162306a36Sopenharmony_ci maxItems: 1 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci hisilicon,clken-gpios: 5462306a36Sopenharmony_ci description: | 5562306a36Sopenharmony_ci Clock input enablement GPIOs from PCI devices like Ethernet, M.2 and 5662306a36Sopenharmony_ci mini-PCIe slots. 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_cirequired: 5962306a36Sopenharmony_ci - compatible 6062306a36Sopenharmony_ci - reg 6162306a36Sopenharmony_ci - reg-names 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ciunevaluatedProperties: false 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ciexamples: 6662306a36Sopenharmony_ci - | 6762306a36Sopenharmony_ci #include <dt-bindings/interrupt-controller/arm-gic.h> 6862306a36Sopenharmony_ci #include <dt-bindings/clock/hi3660-clock.h> 6962306a36Sopenharmony_ci #include <dt-bindings/clock/hi3670-clock.h> 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci soc { 7262306a36Sopenharmony_ci #address-cells = <2>; 7362306a36Sopenharmony_ci #size-cells = <2>; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci pcie@f4000000 { 7662306a36Sopenharmony_ci compatible = "hisilicon,kirin960-pcie"; 7762306a36Sopenharmony_ci reg = <0x0 0xf4000000 0x0 0x1000>, 7862306a36Sopenharmony_ci <0x0 0xff3fe000 0x0 0x1000>, 7962306a36Sopenharmony_ci <0x0 0xf3f20000 0x0 0x40000>, 8062306a36Sopenharmony_ci <0x0 0xf5000000 0x0 0x2000>; 8162306a36Sopenharmony_ci reg-names = "dbi", "apb", "phy", "config"; 8262306a36Sopenharmony_ci bus-range = <0x0 0xff>; 8362306a36Sopenharmony_ci #address-cells = <3>; 8462306a36Sopenharmony_ci #size-cells = <2>; 8562306a36Sopenharmony_ci device_type = "pci"; 8662306a36Sopenharmony_ci ranges = <0x02000000 0x0 0x00000000 8762306a36Sopenharmony_ci 0x0 0xf6000000 8862306a36Sopenharmony_ci 0x0 0x02000000>; 8962306a36Sopenharmony_ci num-lanes = <1>; 9062306a36Sopenharmony_ci #interrupt-cells = <1>; 9162306a36Sopenharmony_ci interrupts = <0 283 4>; 9262306a36Sopenharmony_ci interrupt-names = "msi"; 9362306a36Sopenharmony_ci interrupt-map-mask = <0xf800 0 0 7>; 9462306a36Sopenharmony_ci interrupt-map = <0x0 0 0 1 &gic GIC_SPI 282 IRQ_TYPE_LEVEL_HIGH>, 9562306a36Sopenharmony_ci <0x0 0 0 2 &gic GIC_SPI 283 IRQ_TYPE_LEVEL_HIGH>, 9662306a36Sopenharmony_ci <0x0 0 0 3 &gic GIC_SPI 284 IRQ_TYPE_LEVEL_HIGH>, 9762306a36Sopenharmony_ci <0x0 0 0 4 &gic GIC_SPI 285 IRQ_TYPE_LEVEL_HIGH>; 9862306a36Sopenharmony_ci clocks = <&crg_ctrl HI3660_PCIEPHY_REF>, 9962306a36Sopenharmony_ci <&crg_ctrl HI3660_CLK_GATE_PCIEAUX>, 10062306a36Sopenharmony_ci <&crg_ctrl HI3660_PCLK_GATE_PCIE_PHY>, 10162306a36Sopenharmony_ci <&crg_ctrl HI3660_PCLK_GATE_PCIE_SYS>, 10262306a36Sopenharmony_ci <&crg_ctrl HI3660_ACLK_GATE_PCIE>; 10362306a36Sopenharmony_ci clock-names = "pcie_phy_ref", "pcie_aux", "pcie_apb_phy", 10462306a36Sopenharmony_ci "pcie_apb_sys", "pcie_aclk"; 10562306a36Sopenharmony_ci }; 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_ci pcie@f5000000 { 10862306a36Sopenharmony_ci compatible = "hisilicon,kirin970-pcie"; 10962306a36Sopenharmony_ci reg = <0x0 0xf4000000 0x0 0x1000000>, 11062306a36Sopenharmony_ci <0x0 0xfc180000 0x0 0x1000>, 11162306a36Sopenharmony_ci <0x0 0xf5000000 0x0 0x2000>; 11262306a36Sopenharmony_ci reg-names = "dbi", "apb", "config"; 11362306a36Sopenharmony_ci bus-range = <0x0 0xff>; 11462306a36Sopenharmony_ci #address-cells = <3>; 11562306a36Sopenharmony_ci #size-cells = <2>; 11662306a36Sopenharmony_ci device_type = "pci"; 11762306a36Sopenharmony_ci phys = <&pcie_phy>; 11862306a36Sopenharmony_ci ranges = <0x02000000 0x0 0x00000000 11962306a36Sopenharmony_ci 0x0 0xf6000000 12062306a36Sopenharmony_ci 0x0 0x02000000>; 12162306a36Sopenharmony_ci num-lanes = <1>; 12262306a36Sopenharmony_ci #interrupt-cells = <1>; 12362306a36Sopenharmony_ci interrupts = <GIC_SPI 283 IRQ_TYPE_LEVEL_HIGH>; 12462306a36Sopenharmony_ci interrupt-names = "msi"; 12562306a36Sopenharmony_ci interrupt-map-mask = <0 0 0 7>; 12662306a36Sopenharmony_ci interrupt-map = <0x0 0 0 1 &gic GIC_SPI 282 IRQ_TYPE_LEVEL_HIGH>, 12762306a36Sopenharmony_ci <0x0 0 0 2 &gic GIC_SPI 283 IRQ_TYPE_LEVEL_HIGH>, 12862306a36Sopenharmony_ci <0x0 0 0 3 &gic GIC_SPI 284 IRQ_TYPE_LEVEL_HIGH>, 12962306a36Sopenharmony_ci <0x0 0 0 4 &gic GIC_SPI 285 IRQ_TYPE_LEVEL_HIGH>; 13062306a36Sopenharmony_ci reset-gpios = <&gpio7 0 0>; 13162306a36Sopenharmony_ci hisilicon,clken-gpios = <&gpio27 3 0>, <&gpio17 0 0>, <&gpio20 6 0>; 13262306a36Sopenharmony_ci pcie@0,0 { // Lane 0: PCIe switch: Bus 1, Device 0 13362306a36Sopenharmony_ci reg = <0 0 0 0 0>; 13462306a36Sopenharmony_ci compatible = "pciclass,0604"; 13562306a36Sopenharmony_ci device_type = "pci"; 13662306a36Sopenharmony_ci #address-cells = <3>; 13762306a36Sopenharmony_ci #size-cells = <2>; 13862306a36Sopenharmony_ci ranges; 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci pcie@0,0 { // Lane 0: upstream 14162306a36Sopenharmony_ci reg = <0 0 0 0 0>; 14262306a36Sopenharmony_ci compatible = "pciclass,0604"; 14362306a36Sopenharmony_ci device_type = "pci"; 14462306a36Sopenharmony_ci #address-cells = <3>; 14562306a36Sopenharmony_ci #size-cells = <2>; 14662306a36Sopenharmony_ci ranges; 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_ci pcie@1,0 { // Lane 4: M.2 14962306a36Sopenharmony_ci reg = <0x0800 0 0 0 0>; 15062306a36Sopenharmony_ci compatible = "pciclass,0604"; 15162306a36Sopenharmony_ci device_type = "pci"; 15262306a36Sopenharmony_ci reset-gpios = <&gpio3 1 0>; 15362306a36Sopenharmony_ci #address-cells = <3>; 15462306a36Sopenharmony_ci #size-cells = <2>; 15562306a36Sopenharmony_ci ranges; 15662306a36Sopenharmony_ci }; 15762306a36Sopenharmony_ci 15862306a36Sopenharmony_ci pcie@5,0 { // Lane 5: Mini PCIe 15962306a36Sopenharmony_ci reg = <0x2800 0 0 0 0>; 16062306a36Sopenharmony_ci compatible = "pciclass,0604"; 16162306a36Sopenharmony_ci device_type = "pci"; 16262306a36Sopenharmony_ci reset-gpios = <&gpio27 4 0 >; 16362306a36Sopenharmony_ci #address-cells = <3>; 16462306a36Sopenharmony_ci #size-cells = <2>; 16562306a36Sopenharmony_ci ranges; 16662306a36Sopenharmony_ci }; 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_ci pcie@7,0 { // Lane 6: Ethernet 16962306a36Sopenharmony_ci reg = <0x03800 0 0 0 0>; 17062306a36Sopenharmony_ci compatible = "pciclass,0604"; 17162306a36Sopenharmony_ci device_type = "pci"; 17262306a36Sopenharmony_ci reset-gpios = <&gpio25 2 0 >; 17362306a36Sopenharmony_ci #address-cells = <3>; 17462306a36Sopenharmony_ci #size-cells = <2>; 17562306a36Sopenharmony_ci ranges; 17662306a36Sopenharmony_ci }; 17762306a36Sopenharmony_ci }; 17862306a36Sopenharmony_ci }; 17962306a36Sopenharmony_ci }; 18062306a36Sopenharmony_ci }; 181