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/brcm,stb-pcie.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: Brcmstb PCIe Host Controller
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ciproperties:
1362306a36Sopenharmony_ci  compatible:
1462306a36Sopenharmony_ci    items:
1562306a36Sopenharmony_ci      - enum:
1662306a36Sopenharmony_ci          - brcm,bcm2711-pcie # The Raspberry Pi 4
1762306a36Sopenharmony_ci          - brcm,bcm4908-pcie
1862306a36Sopenharmony_ci          - brcm,bcm7211-pcie # Broadcom STB version of RPi4
1962306a36Sopenharmony_ci          - brcm,bcm7278-pcie # Broadcom 7278 Arm
2062306a36Sopenharmony_ci          - brcm,bcm7216-pcie # Broadcom 7216 Arm
2162306a36Sopenharmony_ci          - brcm,bcm7445-pcie # Broadcom 7445 Arm
2262306a36Sopenharmony_ci          - brcm,bcm7425-pcie # Broadcom 7425 MIPs
2362306a36Sopenharmony_ci          - brcm,bcm7435-pcie # Broadcom 7435 MIPs
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci  reg:
2662306a36Sopenharmony_ci    maxItems: 1
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci  interrupts:
2962306a36Sopenharmony_ci    minItems: 1
3062306a36Sopenharmony_ci    items:
3162306a36Sopenharmony_ci      - description: PCIe host controller
3262306a36Sopenharmony_ci      - description: builtin MSI controller
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci  interrupt-names:
3562306a36Sopenharmony_ci    minItems: 1
3662306a36Sopenharmony_ci    items:
3762306a36Sopenharmony_ci      - const: pcie
3862306a36Sopenharmony_ci      - const: msi
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci  ranges:
4162306a36Sopenharmony_ci    minItems: 1
4262306a36Sopenharmony_ci    maxItems: 4
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci  dma-ranges:
4562306a36Sopenharmony_ci    minItems: 1
4662306a36Sopenharmony_ci    maxItems: 6
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ci  clocks:
4962306a36Sopenharmony_ci    maxItems: 1
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci  clock-names:
5262306a36Sopenharmony_ci    items:
5362306a36Sopenharmony_ci      - const: sw_pcie
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci  msi-controller:
5662306a36Sopenharmony_ci    description: Identifies the node as an MSI controller.
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci  msi-parent:
5962306a36Sopenharmony_ci    description: MSI controller the device is capable of using.
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci  brcm,enable-ssc:
6262306a36Sopenharmony_ci    description: Indicates usage of spread-spectrum clocking.
6362306a36Sopenharmony_ci    type: boolean
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci  aspm-no-l0s: true
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci  brcm,scb-sizes:
6862306a36Sopenharmony_ci    description: u64 giving the 64bit PCIe memory
6962306a36Sopenharmony_ci      viewport size of a memory controller.  There may be up to
7062306a36Sopenharmony_ci      three controllers, and each size must be a power of two
7162306a36Sopenharmony_ci      with a size greater or equal to the amount of memory the
7262306a36Sopenharmony_ci      controller supports.  Note that each memory controller
7362306a36Sopenharmony_ci      may have two component regions -- base and extended -- so
7462306a36Sopenharmony_ci      this information cannot be deduced from the dma-ranges.
7562306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint64-array
7662306a36Sopenharmony_ci    items:
7762306a36Sopenharmony_ci      minItems: 1
7862306a36Sopenharmony_ci      maxItems: 3
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_cirequired:
8162306a36Sopenharmony_ci  - compatible
8262306a36Sopenharmony_ci  - reg
8362306a36Sopenharmony_ci  - ranges
8462306a36Sopenharmony_ci  - dma-ranges
8562306a36Sopenharmony_ci  - "#interrupt-cells"
8662306a36Sopenharmony_ci  - interrupts
8762306a36Sopenharmony_ci  - interrupt-names
8862306a36Sopenharmony_ci  - interrupt-map-mask
8962306a36Sopenharmony_ci  - interrupt-map
9062306a36Sopenharmony_ci  - msi-controller
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ciallOf:
9362306a36Sopenharmony_ci  - $ref: /schemas/pci/pci-bus.yaml#
9462306a36Sopenharmony_ci  - $ref: /schemas/interrupt-controller/msi-controller.yaml#
9562306a36Sopenharmony_ci  - if:
9662306a36Sopenharmony_ci      properties:
9762306a36Sopenharmony_ci        compatible:
9862306a36Sopenharmony_ci          contains:
9962306a36Sopenharmony_ci            const: brcm,bcm4908-pcie
10062306a36Sopenharmony_ci    then:
10162306a36Sopenharmony_ci      properties:
10262306a36Sopenharmony_ci        resets:
10362306a36Sopenharmony_ci          items:
10462306a36Sopenharmony_ci            - description: reset controller handling the PERST# signal
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci        reset-names:
10762306a36Sopenharmony_ci          items:
10862306a36Sopenharmony_ci            - const: perst
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ci      required:
11162306a36Sopenharmony_ci        - resets
11262306a36Sopenharmony_ci        - reset-names
11362306a36Sopenharmony_ci  - if:
11462306a36Sopenharmony_ci      properties:
11562306a36Sopenharmony_ci        compatible:
11662306a36Sopenharmony_ci          contains:
11762306a36Sopenharmony_ci            const: brcm,bcm7216-pcie
11862306a36Sopenharmony_ci    then:
11962306a36Sopenharmony_ci      properties:
12062306a36Sopenharmony_ci        resets:
12162306a36Sopenharmony_ci          items:
12262306a36Sopenharmony_ci            - description: phandle pointing to the RESCAL reset controller
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_ci        reset-names:
12562306a36Sopenharmony_ci          items:
12662306a36Sopenharmony_ci            - const: rescal
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ci      required:
12962306a36Sopenharmony_ci        - resets
13062306a36Sopenharmony_ci        - reset-names
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ciunevaluatedProperties: false
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ciexamples:
13562306a36Sopenharmony_ci  - |
13662306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/irq.h>
13762306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci    scb {
14062306a36Sopenharmony_ci            #address-cells = <2>;
14162306a36Sopenharmony_ci            #size-cells = <1>;
14262306a36Sopenharmony_ci            pcie0: pcie@7d500000 {
14362306a36Sopenharmony_ci                    compatible = "brcm,bcm2711-pcie";
14462306a36Sopenharmony_ci                    reg = <0x0 0x7d500000 0x9310>;
14562306a36Sopenharmony_ci                    device_type = "pci";
14662306a36Sopenharmony_ci                    #address-cells = <3>;
14762306a36Sopenharmony_ci                    #size-cells = <2>;
14862306a36Sopenharmony_ci                    #interrupt-cells = <1>;
14962306a36Sopenharmony_ci                    interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>,
15062306a36Sopenharmony_ci                                 <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
15162306a36Sopenharmony_ci                    interrupt-names = "pcie", "msi";
15262306a36Sopenharmony_ci                    interrupt-map-mask = <0x0 0x0 0x0 0x7>;
15362306a36Sopenharmony_ci                    interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH
15462306a36Sopenharmony_ci                                     0 0 0 2 &gicv2 GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH
15562306a36Sopenharmony_ci                                     0 0 0 3 &gicv2 GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH
15662306a36Sopenharmony_ci                                     0 0 0 4 &gicv2 GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>;
15762306a36Sopenharmony_ci
15862306a36Sopenharmony_ci                    msi-parent = <&pcie0>;
15962306a36Sopenharmony_ci                    msi-controller;
16062306a36Sopenharmony_ci                    ranges = <0x02000000 0x0 0xf8000000 0x6 0x00000000 0x0 0x04000000>;
16162306a36Sopenharmony_ci                    dma-ranges = <0x42000000 0x1 0x00000000 0x0 0x40000000 0x0 0x80000000>,
16262306a36Sopenharmony_ci                                 <0x42000000 0x1 0x80000000 0x3 0x00000000 0x0 0x80000000>;
16362306a36Sopenharmony_ci                    brcm,enable-ssc;
16462306a36Sopenharmony_ci                    brcm,scb-sizes =  <0x0000000080000000 0x0000000080000000>;
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_ci                    /* PCIe bridge, Root Port */
16762306a36Sopenharmony_ci                    pci@0,0 {
16862306a36Sopenharmony_ci                            #address-cells = <3>;
16962306a36Sopenharmony_ci                            #size-cells = <2>;
17062306a36Sopenharmony_ci                            reg = <0x0 0x0 0x0 0x0 0x0>;
17162306a36Sopenharmony_ci                            compatible = "pciclass,0604";
17262306a36Sopenharmony_ci                            device_type = "pci";
17362306a36Sopenharmony_ci                            vpcie3v3-supply = <&vreg7>;
17462306a36Sopenharmony_ci                            ranges;
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ci                            /* PCIe endpoint */
17762306a36Sopenharmony_ci                            pci-ep@0,0 {
17862306a36Sopenharmony_ci                                    assigned-addresses =
17962306a36Sopenharmony_ci                                        <0x82010000 0x0 0xf8000000 0x6 0x00000000 0x0 0x2000>;
18062306a36Sopenharmony_ci                                    reg = <0x0 0x0 0x0 0x0 0x0>;
18162306a36Sopenharmony_ci                                    compatible = "pci14e4,1688";
18262306a36Sopenharmony_ci                            };
18362306a36Sopenharmony_ci                    };
18462306a36Sopenharmony_ci            };
18562306a36Sopenharmony_ci    };
186