162306a36Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
262306a36Sopenharmony_ci%YAML 1.2
362306a36Sopenharmony_ci---
462306a36Sopenharmony_ci$id: http://devicetree.org/schemas/pci/microchip,pcie-host.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Microchip PCIe Root Port Bridge Controller
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Daire McNamara <daire.mcnamara@microchip.com>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ciallOf:
1362306a36Sopenharmony_ci  - $ref: /schemas/pci/pci-bus.yaml#
1462306a36Sopenharmony_ci  - $ref: /schemas/interrupt-controller/msi-controller.yaml#
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ciproperties:
1762306a36Sopenharmony_ci  compatible:
1862306a36Sopenharmony_ci    const: microchip,pcie-host-1.0 # PolarFire
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci  reg:
2162306a36Sopenharmony_ci    maxItems: 2
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci  reg-names:
2462306a36Sopenharmony_ci    items:
2562306a36Sopenharmony_ci      - const: cfg
2662306a36Sopenharmony_ci      - const: apb
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci  clocks:
2962306a36Sopenharmony_ci    description:
3062306a36Sopenharmony_ci      Fabric Interface Controllers, FICs, are the interface between the FPGA
3162306a36Sopenharmony_ci      fabric and the core complex on PolarFire SoC. The FICs require two clocks,
3262306a36Sopenharmony_ci      one from each side of the interface. The "FIC clocks" described by this
3362306a36Sopenharmony_ci      property are on the core complex side & communication through a FIC is not
3462306a36Sopenharmony_ci      possible unless it's corresponding clock is enabled. A clock must be
3562306a36Sopenharmony_ci      enabled for each of the interfaces the root port is connected through.
3662306a36Sopenharmony_ci      This could in theory be all 4 interfaces, one interface or any combination
3762306a36Sopenharmony_ci      in between.
3862306a36Sopenharmony_ci    minItems: 1
3962306a36Sopenharmony_ci    items:
4062306a36Sopenharmony_ci      - description: FIC0's clock
4162306a36Sopenharmony_ci      - description: FIC1's clock
4262306a36Sopenharmony_ci      - description: FIC2's clock
4362306a36Sopenharmony_ci      - description: FIC3's clock
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci  clock-names:
4662306a36Sopenharmony_ci    description:
4762306a36Sopenharmony_ci      As any FIC connection combination is possible, the names should match the
4862306a36Sopenharmony_ci      order in the clocks property and take the form "ficN" where N is a number
4962306a36Sopenharmony_ci      0-3
5062306a36Sopenharmony_ci    minItems: 1
5162306a36Sopenharmony_ci    maxItems: 4
5262306a36Sopenharmony_ci    items:
5362306a36Sopenharmony_ci      pattern: '^fic[0-3]$'
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci  interrupts:
5662306a36Sopenharmony_ci    minItems: 1
5762306a36Sopenharmony_ci    items:
5862306a36Sopenharmony_ci      - description: PCIe host controller
5962306a36Sopenharmony_ci      - description: builtin MSI controller
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci  interrupt-names:
6262306a36Sopenharmony_ci    minItems: 1
6362306a36Sopenharmony_ci    items:
6462306a36Sopenharmony_ci      - const: pcie
6562306a36Sopenharmony_ci      - const: msi
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci  ranges:
6862306a36Sopenharmony_ci    maxItems: 1
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci  dma-ranges:
7162306a36Sopenharmony_ci    minItems: 1
7262306a36Sopenharmony_ci    maxItems: 6
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci  msi-controller:
7562306a36Sopenharmony_ci    description: Identifies the node as an MSI controller.
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci  msi-parent:
7862306a36Sopenharmony_ci    description: MSI controller the device is capable of using.
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci  interrupt-controller:
8162306a36Sopenharmony_ci    type: object
8262306a36Sopenharmony_ci    properties:
8362306a36Sopenharmony_ci      '#address-cells':
8462306a36Sopenharmony_ci        const: 0
8562306a36Sopenharmony_ci
8662306a36Sopenharmony_ci      '#interrupt-cells':
8762306a36Sopenharmony_ci        const: 1
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci      interrupt-controller: true
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci    required:
9262306a36Sopenharmony_ci      - '#address-cells'
9362306a36Sopenharmony_ci      - '#interrupt-cells'
9462306a36Sopenharmony_ci      - interrupt-controller
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_ci    additionalProperties: false
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_cirequired:
9962306a36Sopenharmony_ci  - reg
10062306a36Sopenharmony_ci  - reg-names
10162306a36Sopenharmony_ci  - "#interrupt-cells"
10262306a36Sopenharmony_ci  - interrupts
10362306a36Sopenharmony_ci  - interrupt-map-mask
10462306a36Sopenharmony_ci  - interrupt-map
10562306a36Sopenharmony_ci  - msi-controller
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_ciunevaluatedProperties: false
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ciexamples:
11062306a36Sopenharmony_ci  - |
11162306a36Sopenharmony_ci    soc {
11262306a36Sopenharmony_ci            #address-cells = <2>;
11362306a36Sopenharmony_ci            #size-cells = <2>;
11462306a36Sopenharmony_ci            pcie0: pcie@2030000000 {
11562306a36Sopenharmony_ci                    compatible = "microchip,pcie-host-1.0";
11662306a36Sopenharmony_ci                    reg = <0x0 0x70000000 0x0 0x08000000>,
11762306a36Sopenharmony_ci                          <0x0 0x43000000 0x0 0x00010000>;
11862306a36Sopenharmony_ci                    reg-names = "cfg", "apb";
11962306a36Sopenharmony_ci                    device_type = "pci";
12062306a36Sopenharmony_ci                    #address-cells = <3>;
12162306a36Sopenharmony_ci                    #size-cells = <2>;
12262306a36Sopenharmony_ci                    #interrupt-cells = <1>;
12362306a36Sopenharmony_ci                    interrupts = <119>;
12462306a36Sopenharmony_ci                    interrupt-map-mask = <0x0 0x0 0x0 0x7>;
12562306a36Sopenharmony_ci                    interrupt-map = <0 0 0 1 &pcie_intc0 0>,
12662306a36Sopenharmony_ci                                    <0 0 0 2 &pcie_intc0 1>,
12762306a36Sopenharmony_ci                                    <0 0 0 3 &pcie_intc0 2>,
12862306a36Sopenharmony_ci                                    <0 0 0 4 &pcie_intc0 3>;
12962306a36Sopenharmony_ci                    interrupt-parent = <&plic0>;
13062306a36Sopenharmony_ci                    msi-parent = <&pcie0>;
13162306a36Sopenharmony_ci                    msi-controller;
13262306a36Sopenharmony_ci                    bus-range = <0x00 0x7f>;
13362306a36Sopenharmony_ci                    ranges = <0x03000000 0x0 0x78000000 0x0 0x78000000 0x0 0x04000000>;
13462306a36Sopenharmony_ci                    pcie_intc0: interrupt-controller {
13562306a36Sopenharmony_ci                        #address-cells = <0>;
13662306a36Sopenharmony_ci                        #interrupt-cells = <1>;
13762306a36Sopenharmony_ci                        interrupt-controller;
13862306a36Sopenharmony_ci                    };
13962306a36Sopenharmony_ci            };
14062306a36Sopenharmony_ci    };
141