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