| # SPDX-License-Identifier: GPL-2.0 | 
 | %YAML 1.2 | 
 | --- | 
 | $id: http://devicetree.org/schemas/pci/hisilicon,kirin-pcie.yaml# | 
 | $schema: http://devicetree.org/meta-schemas/core.yaml# | 
 |  | 
 | title: HiSilicon Kirin SoCs PCIe host DT description | 
 |  | 
 | maintainers: | 
 |   - Xiaowei Song <songxiaowei@hisilicon.com> | 
 |   - Binghui Wang <wangbinghui@hisilicon.com> | 
 |  | 
 | description: | | 
 |   Kirin PCIe host controller is based on the Synopsys DesignWare PCI core. | 
 |   It shares common functions with the PCIe DesignWare core driver and | 
 |   inherits common properties defined in | 
 |   Documentation/devicetree/bindings/pci/snps,dw-pcie.yaml. | 
 |  | 
 | allOf: | 
 |   - $ref: /schemas/pci/snps,dw-pcie.yaml# | 
 |  | 
 | properties: | 
 |   compatible: | 
 |     contains: | 
 |       enum: | 
 |         - hisilicon,kirin960-pcie | 
 |         - hisilicon,kirin970-pcie | 
 |  | 
 |   reg: | 
 |     description: | | 
 |       Should contain dbi, apb, config registers location and length. | 
 |       For hisilicon,kirin960-pcie, it should also contain phy. | 
 |     minItems: 3 | 
 |     maxItems: 4 | 
 |  | 
 |   reg-names: | 
 |     minItems: 3 | 
 |     maxItems: 4 | 
 |  | 
 |   clocks: true | 
 |  | 
 |   clock-names: | 
 |     items: | 
 |       - const: pcie_phy_ref | 
 |       - const: pcie_aux | 
 |       - const: pcie_apb_phy | 
 |       - const: pcie_apb_sys | 
 |       - const: pcie_aclk | 
 |  | 
 |   phys: | 
 |     maxItems: 1 | 
 |  | 
 |   hisilicon,clken-gpios: | 
 |     description: | | 
 |       Clock input enablement GPIOs from PCI devices like Ethernet, M.2 and | 
 |       mini-PCIe slots. | 
 |  | 
 | required: | 
 |   - compatible | 
 |   - reg | 
 |   - reg-names | 
 |  | 
 | unevaluatedProperties: false | 
 |  | 
 | examples: | 
 |   - | | 
 |     #include <dt-bindings/interrupt-controller/arm-gic.h> | 
 |     #include <dt-bindings/clock/hi3660-clock.h> | 
 |     #include <dt-bindings/clock/hi3670-clock.h> | 
 |  | 
 |     soc { | 
 |       #address-cells = <2>; | 
 |       #size-cells = <2>; | 
 |  | 
 |       pcie@f4000000 { | 
 |         compatible = "hisilicon,kirin960-pcie"; | 
 |         reg = <0x0 0xf4000000 0x0 0x1000>, | 
 |               <0x0 0xff3fe000 0x0 0x1000>, | 
 |               <0x0 0xf3f20000 0x0 0x40000>, | 
 |               <0x0 0xf5000000 0x0 0x2000>; | 
 |         reg-names = "dbi", "apb", "phy", "config"; | 
 |         bus-range = <0x0  0xff>; | 
 |         #address-cells = <3>; | 
 |         #size-cells = <2>; | 
 |         device_type = "pci"; | 
 |         ranges = <0x02000000 0x0 0x00000000 | 
 |                   0x0 0xf6000000 | 
 |                   0x0 0x02000000>; | 
 |         num-lanes = <1>; | 
 |         #interrupt-cells = <1>; | 
 |         interrupts = <0 283 4>; | 
 |         interrupt-names = "msi"; | 
 |         interrupt-map-mask = <0xf800 0 0 7>; | 
 |         interrupt-map = <0x0 0 0 1 &gic GIC_SPI 282 IRQ_TYPE_LEVEL_HIGH>, | 
 |                         <0x0 0 0 2 &gic GIC_SPI 283 IRQ_TYPE_LEVEL_HIGH>, | 
 |                         <0x0 0 0 3 &gic GIC_SPI 284 IRQ_TYPE_LEVEL_HIGH>, | 
 |                         <0x0 0 0 4 &gic GIC_SPI 285 IRQ_TYPE_LEVEL_HIGH>; | 
 |         clocks = <&crg_ctrl HI3660_PCIEPHY_REF>, | 
 |                  <&crg_ctrl HI3660_CLK_GATE_PCIEAUX>, | 
 |                  <&crg_ctrl HI3660_PCLK_GATE_PCIE_PHY>, | 
 |                  <&crg_ctrl HI3660_PCLK_GATE_PCIE_SYS>, | 
 |                  <&crg_ctrl HI3660_ACLK_GATE_PCIE>; | 
 |         clock-names = "pcie_phy_ref", "pcie_aux", "pcie_apb_phy", | 
 |                       "pcie_apb_sys", "pcie_aclk"; | 
 |       }; | 
 |  | 
 |       pcie@f5000000 { | 
 |         compatible = "hisilicon,kirin970-pcie"; | 
 |         reg = <0x0 0xf4000000 0x0 0x1000000>, | 
 |               <0x0 0xfc180000 0x0 0x1000>, | 
 |               <0x0 0xf5000000 0x0 0x2000>; | 
 |         reg-names = "dbi", "apb", "config"; | 
 |         bus-range = <0x0  0xff>; | 
 |         #address-cells = <3>; | 
 |         #size-cells = <2>; | 
 |         device_type = "pci"; | 
 |         phys = <&pcie_phy>; | 
 |         ranges = <0x02000000 0x0 0x00000000 | 
 |                   0x0 0xf6000000 | 
 |                   0x0 0x02000000>; | 
 |         num-lanes = <1>; | 
 |         #interrupt-cells = <1>; | 
 |         interrupts = <GIC_SPI 283 IRQ_TYPE_LEVEL_HIGH>; | 
 |         interrupt-names = "msi"; | 
 |         interrupt-map-mask = <0 0 0 7>; | 
 |         interrupt-map = <0x0 0 0 1 &gic GIC_SPI 282 IRQ_TYPE_LEVEL_HIGH>, | 
 |                         <0x0 0 0 2 &gic GIC_SPI 283 IRQ_TYPE_LEVEL_HIGH>, | 
 |                         <0x0 0 0 3 &gic GIC_SPI 284 IRQ_TYPE_LEVEL_HIGH>, | 
 |                         <0x0 0 0 4 &gic GIC_SPI 285 IRQ_TYPE_LEVEL_HIGH>; | 
 |         reset-gpios = <&gpio7 0 0>; | 
 |         hisilicon,clken-gpios = <&gpio27 3 0>, <&gpio17 0 0>, <&gpio20 6 0>; | 
 |         pcie@0,0 { // Lane 0: PCIe switch: Bus 1, Device 0 | 
 |           reg = <0 0 0 0 0>; | 
 |           compatible = "pciclass,0604"; | 
 |           device_type = "pci"; | 
 |           #address-cells = <3>; | 
 |           #size-cells = <2>; | 
 |           ranges; | 
 |  | 
 |           pcie@0,0 { // Lane 0: upstream | 
 |             reg = <0 0 0 0 0>; | 
 |             compatible = "pciclass,0604"; | 
 |             device_type = "pci"; | 
 |             #address-cells = <3>; | 
 |             #size-cells = <2>; | 
 |             ranges; | 
 |  | 
 |             pcie@1,0 { // Lane 4: M.2 | 
 |               reg = <0x0800 0 0 0 0>; | 
 |               compatible = "pciclass,0604"; | 
 |               device_type = "pci"; | 
 |               reset-gpios = <&gpio3 1 0>; | 
 |               #address-cells = <3>; | 
 |               #size-cells = <2>; | 
 |               ranges; | 
 |             }; | 
 |  | 
 |             pcie@5,0 { // Lane 5: Mini PCIe | 
 |               reg = <0x2800 0 0 0 0>; | 
 |               compatible = "pciclass,0604"; | 
 |               device_type = "pci"; | 
 |               reset-gpios = <&gpio27 4 0 >; | 
 |               #address-cells = <3>; | 
 |               #size-cells = <2>; | 
 |               ranges; | 
 |             }; | 
 |  | 
 |             pcie@7,0 { // Lane 6: Ethernet | 
 |               reg = <0x03800 0 0 0 0>; | 
 |               compatible = "pciclass,0604"; | 
 |               device_type = "pci"; | 
 |               reset-gpios = <&gpio25 2 0 >; | 
 |               #address-cells = <3>; | 
 |               #size-cells = <2>; | 
 |               ranges; | 
 |             }; | 
 |           }; | 
 |         }; | 
 |       }; | 
 |     }; |