# 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:
  $nodename:
    pattern: "^interrupt-controller@[0-9a-f]+$"

  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 and AM64x 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.
            - AM64x SoCs have all the 8 host interrupts connected to various
              other SoC entities

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-pruss1";
        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) */
        };
    };
