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