# SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/interrupt-controller/ti,pruss-intc.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: TI PRU-ICSS Local Interrupt Controller

maintainers:
  - Suman Anna <s-anna@ti.com>

description: |
  Each PRU-ICSS has a single interrupt controller instance that is common
  to all the PRU cores. Most interrupt controllers can route 64 input events
  which are then mapped to 10 possible output interrupts through two levels
  of mapping. The input events can be triggered by either the PRUs and/or
  various other PRUSS internal and external peripherals. The first 2 output
  interrupts (0, 1) are fed exclusively to the internal PRU cores, with the
  remaining 8 (2 through 9) connected to external interrupt controllers
  including the MPU and/or other PRUSS instances, DSPs or devices.

  The property "ti,irqs-reserved" is used for denoting the connection
  differences on the output interrupts 2 through 9. If this property is not
  defined, it implies that all the PRUSS INTC output interrupts 2 through 9
  (host_intr0 through host_intr7) are connected exclusively to the Arm interrupt
  controller.

  The K3 family of SoCs can handle 160 input events that can be mapped to 20
  different possible output interrupts. The additional output interrupts (10
  through 19) are connected to new sub-modules within the ICSSG instances.

  This interrupt-controller node should be defined as a child node of the
  corresponding PRUSS node. The node should be named "interrupt-controller".

properties:
  compatible:
    enum:
      - ti,pruss-intc
      - ti,icssg-intc
    description: |
      Use "ti,pruss-intc" for OMAP-L13x/AM18x/DA850 SoCs,
                              AM335x family of SoCs,
                              AM437x family of SoCs,
                              AM57xx family of SoCs
                              66AK2G family of SoCs
      Use "ti,icssg-intc" for K3 AM65x & J721E family of SoCs

  reg:
    maxItems: 1

  interrupts:
    minItems: 1
    maxItems: 8
    description: |
      All the interrupts generated towards the main host processor in the SoC.
      A shared interrupt can be skipped if the desired destination and usage is
      by a different processor/device.

  interrupt-names:
    minItems: 1
    maxItems: 8
    items:
      pattern: host_intr[0-7]
    description: |
      Should use one of the above names for each valid host event interrupt
      connected to Arm interrupt controller, the name should match the
      corresponding host event interrupt number.

  interrupt-controller: true

  "#interrupt-cells":
    const: 3
    description: |
      Client users shall use the PRU System event number (the interrupt source
      that the client is interested in) [cell 1], PRU channel [cell 2] and PRU
      host_event (target) [cell 3] as the value of the interrupts property in
      their node.  The system events can be mapped to some output host
      interrupts through 2 levels of many-to-one mapping i.e. events to channel
      mapping and channels to host interrupts so through this property entire
      mapping is provided.

  ti,irqs-reserved:
    $ref: /schemas/types.yaml#/definitions/uint8
    description: |
      Bitmask of host interrupts between 0 and 7 (corresponding to PRUSS INTC
      output interrupts 2 through 9) that are not connected to the Arm interrupt
      controller or are shared and used by other devices or processors in the
      SoC. Define this property when any of 8 interrupts should not be handled
      by Arm interrupt controller.
        Eg: - AM437x and 66AK2G SoCs do not have "host_intr5" interrupt
              connected to MPU
            - AM65x and J721E SoCs have "host_intr5", "host_intr6" and
              "host_intr7" interrupts connected to MPU, and other ICSSG
              instances.

required:
  - compatible
  - reg
  - interrupts
  - interrupt-names
  - interrupt-controller
  - "#interrupt-cells"

additionalProperties: false

examples:
  - |
    /* AM33xx PRU-ICSS */
    pruss: pruss@0 {
        compatible = "ti,am3356-pruss";
        reg = <0x0 0x80000>;
        #address-cells = <1>;
        #size-cells = <1>;
        ranges;

        pruss_intc: interrupt-controller@20000 {
            compatible = "ti,pruss-intc";
            reg = <0x20000 0x2000>;
            interrupts = <20 21 22 23 24 25 26 27>;
            interrupt-names = "host_intr0", "host_intr1",
                              "host_intr2", "host_intr3",
                              "host_intr4", "host_intr5",
                              "host_intr6", "host_intr7";
            interrupt-controller;
            #interrupt-cells = <3>;
        };
    };

  - |

    /* AM4376 PRU-ICSS */
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    pruss@0 {
        compatible = "ti,am4376-pruss";
        reg = <0x0 0x40000>;
        #address-cells = <1>;
        #size-cells = <1>;
        ranges;

        interrupt-controller@20000 {
            compatible = "ti,pruss-intc";
            reg = <0x20000 0x2000>;
            interrupt-controller;
            #interrupt-cells = <3>;
            interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>,
                   <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>;
            interrupt-names = "host_intr0", "host_intr1",
                              "host_intr2", "host_intr3",
                              "host_intr4",
                              "host_intr6", "host_intr7";
            ti,irqs-reserved = /bits/ 8 <0x20>; /* BIT(5) */
        };
    };
