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/interrupt-controller/ti,pruss-intc.yaml#
562306a36Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cititle: TI PRU-ICSS Local Interrupt Controller
862306a36Sopenharmony_ci
962306a36Sopenharmony_cimaintainers:
1062306a36Sopenharmony_ci  - Suman Anna <s-anna@ti.com>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cidescription: |
1362306a36Sopenharmony_ci  Each PRU-ICSS has a single interrupt controller instance that is common
1462306a36Sopenharmony_ci  to all the PRU cores. Most interrupt controllers can route 64 input events
1562306a36Sopenharmony_ci  which are then mapped to 10 possible output interrupts through two levels
1662306a36Sopenharmony_ci  of mapping. The input events can be triggered by either the PRUs and/or
1762306a36Sopenharmony_ci  various other PRUSS internal and external peripherals. The first 2 output
1862306a36Sopenharmony_ci  interrupts (0, 1) are fed exclusively to the internal PRU cores, with the
1962306a36Sopenharmony_ci  remaining 8 (2 through 9) connected to external interrupt controllers
2062306a36Sopenharmony_ci  including the MPU and/or other PRUSS instances, DSPs or devices.
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci  The property "ti,irqs-reserved" is used for denoting the connection
2362306a36Sopenharmony_ci  differences on the output interrupts 2 through 9. If this property is not
2462306a36Sopenharmony_ci  defined, it implies that all the PRUSS INTC output interrupts 2 through 9
2562306a36Sopenharmony_ci  (host_intr0 through host_intr7) are connected exclusively to the Arm interrupt
2662306a36Sopenharmony_ci  controller.
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci  The K3 family of SoCs can handle 160 input events that can be mapped to 20
2962306a36Sopenharmony_ci  different possible output interrupts. The additional output interrupts (10
3062306a36Sopenharmony_ci  through 19) are connected to new sub-modules within the ICSSG instances.
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci  This interrupt-controller node should be defined as a child node of the
3362306a36Sopenharmony_ci  corresponding PRUSS node. The node should be named "interrupt-controller".
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciproperties:
3662306a36Sopenharmony_ci  $nodename:
3762306a36Sopenharmony_ci    pattern: "^interrupt-controller@[0-9a-f]+$"
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci  compatible:
4062306a36Sopenharmony_ci    enum:
4162306a36Sopenharmony_ci      - ti,pruss-intc
4262306a36Sopenharmony_ci      - ti,icssg-intc
4362306a36Sopenharmony_ci    description: |
4462306a36Sopenharmony_ci      Use "ti,pruss-intc" for OMAP-L13x/AM18x/DA850 SoCs,
4562306a36Sopenharmony_ci                              AM335x family of SoCs,
4662306a36Sopenharmony_ci                              AM437x family of SoCs,
4762306a36Sopenharmony_ci                              AM57xx family of SoCs
4862306a36Sopenharmony_ci                              66AK2G family of SoCs
4962306a36Sopenharmony_ci      Use "ti,icssg-intc" for K3 AM65x, J721E and AM64x family of SoCs
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci  reg:
5262306a36Sopenharmony_ci    maxItems: 1
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci  interrupts:
5562306a36Sopenharmony_ci    minItems: 1
5662306a36Sopenharmony_ci    maxItems: 8
5762306a36Sopenharmony_ci    description: |
5862306a36Sopenharmony_ci      All the interrupts generated towards the main host processor in the SoC.
5962306a36Sopenharmony_ci      A shared interrupt can be skipped if the desired destination and usage is
6062306a36Sopenharmony_ci      by a different processor/device.
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci  interrupt-names:
6362306a36Sopenharmony_ci    minItems: 1
6462306a36Sopenharmony_ci    maxItems: 8
6562306a36Sopenharmony_ci    items:
6662306a36Sopenharmony_ci      pattern: host_intr[0-7]
6762306a36Sopenharmony_ci    description: |
6862306a36Sopenharmony_ci      Should use one of the above names for each valid host event interrupt
6962306a36Sopenharmony_ci      connected to Arm interrupt controller, the name should match the
7062306a36Sopenharmony_ci      corresponding host event interrupt number.
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci  interrupt-controller: true
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci  "#interrupt-cells":
7562306a36Sopenharmony_ci    const: 3
7662306a36Sopenharmony_ci    description: |
7762306a36Sopenharmony_ci      Client users shall use the PRU System event number (the interrupt source
7862306a36Sopenharmony_ci      that the client is interested in) [cell 1], PRU channel [cell 2] and PRU
7962306a36Sopenharmony_ci      host_event (target) [cell 3] as the value of the interrupts property in
8062306a36Sopenharmony_ci      their node.  The system events can be mapped to some output host
8162306a36Sopenharmony_ci      interrupts through 2 levels of many-to-one mapping i.e. events to channel
8262306a36Sopenharmony_ci      mapping and channels to host interrupts so through this property entire
8362306a36Sopenharmony_ci      mapping is provided.
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ci  ti,irqs-reserved:
8662306a36Sopenharmony_ci    $ref: /schemas/types.yaml#/definitions/uint8
8762306a36Sopenharmony_ci    description: |
8862306a36Sopenharmony_ci      Bitmask of host interrupts between 0 and 7 (corresponding to PRUSS INTC
8962306a36Sopenharmony_ci      output interrupts 2 through 9) that are not connected to the Arm interrupt
9062306a36Sopenharmony_ci      controller or are shared and used by other devices or processors in the
9162306a36Sopenharmony_ci      SoC. Define this property when any of 8 interrupts should not be handled
9262306a36Sopenharmony_ci      by Arm interrupt controller.
9362306a36Sopenharmony_ci        Eg: - AM437x and 66AK2G SoCs do not have "host_intr5" interrupt
9462306a36Sopenharmony_ci              connected to MPU
9562306a36Sopenharmony_ci            - AM65x and J721E SoCs have "host_intr5", "host_intr6" and
9662306a36Sopenharmony_ci              "host_intr7" interrupts connected to MPU, and other ICSSG
9762306a36Sopenharmony_ci              instances.
9862306a36Sopenharmony_ci            - AM64x SoCs have all the 8 host interrupts connected to various
9962306a36Sopenharmony_ci              other SoC entities
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_cirequired:
10262306a36Sopenharmony_ci  - compatible
10362306a36Sopenharmony_ci  - reg
10462306a36Sopenharmony_ci  - interrupts
10562306a36Sopenharmony_ci  - interrupt-names
10662306a36Sopenharmony_ci  - interrupt-controller
10762306a36Sopenharmony_ci  - "#interrupt-cells"
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ciadditionalProperties: false
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_ciexamples:
11262306a36Sopenharmony_ci  - |
11362306a36Sopenharmony_ci    /* AM33xx PRU-ICSS */
11462306a36Sopenharmony_ci    pruss: pruss@0 {
11562306a36Sopenharmony_ci        compatible = "ti,am3356-pruss";
11662306a36Sopenharmony_ci        reg = <0x0 0x80000>;
11762306a36Sopenharmony_ci        #address-cells = <1>;
11862306a36Sopenharmony_ci        #size-cells = <1>;
11962306a36Sopenharmony_ci        ranges;
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_ci        pruss_intc: interrupt-controller@20000 {
12262306a36Sopenharmony_ci            compatible = "ti,pruss-intc";
12362306a36Sopenharmony_ci            reg = <0x20000 0x2000>;
12462306a36Sopenharmony_ci            interrupts = <20 21 22 23 24 25 26 27>;
12562306a36Sopenharmony_ci            interrupt-names = "host_intr0", "host_intr1",
12662306a36Sopenharmony_ci                              "host_intr2", "host_intr3",
12762306a36Sopenharmony_ci                              "host_intr4", "host_intr5",
12862306a36Sopenharmony_ci                              "host_intr6", "host_intr7";
12962306a36Sopenharmony_ci            interrupt-controller;
13062306a36Sopenharmony_ci            #interrupt-cells = <3>;
13162306a36Sopenharmony_ci        };
13262306a36Sopenharmony_ci    };
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci  - |
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ci    /* AM4376 PRU-ICSS */
13762306a36Sopenharmony_ci    #include <dt-bindings/interrupt-controller/arm-gic.h>
13862306a36Sopenharmony_ci    pruss@0 {
13962306a36Sopenharmony_ci        compatible = "ti,am4376-pruss1";
14062306a36Sopenharmony_ci        reg = <0x0 0x40000>;
14162306a36Sopenharmony_ci        #address-cells = <1>;
14262306a36Sopenharmony_ci        #size-cells = <1>;
14362306a36Sopenharmony_ci        ranges;
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_ci        interrupt-controller@20000 {
14662306a36Sopenharmony_ci            compatible = "ti,pruss-intc";
14762306a36Sopenharmony_ci            reg = <0x20000 0x2000>;
14862306a36Sopenharmony_ci            interrupt-controller;
14962306a36Sopenharmony_ci            #interrupt-cells = <3>;
15062306a36Sopenharmony_ci            interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>,
15162306a36Sopenharmony_ci                   <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>,
15262306a36Sopenharmony_ci                   <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>,
15362306a36Sopenharmony_ci                   <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>,
15462306a36Sopenharmony_ci                   <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>,
15562306a36Sopenharmony_ci                   <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>,
15662306a36Sopenharmony_ci                   <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>;
15762306a36Sopenharmony_ci            interrupt-names = "host_intr0", "host_intr1",
15862306a36Sopenharmony_ci                              "host_intr2", "host_intr3",
15962306a36Sopenharmony_ci                              "host_intr4",
16062306a36Sopenharmony_ci                              "host_intr6", "host_intr7";
16162306a36Sopenharmony_ci            ti,irqs-reserved = /bits/ 8 <0x20>; /* BIT(5) */
16262306a36Sopenharmony_ci        };
16362306a36Sopenharmony_ci    };
164