18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci%YAML 1.2 38c2ecf20Sopenharmony_ci--- 48c2ecf20Sopenharmony_ci$id: http://devicetree.org/schemas/interrupt-controller/arm,gic.yaml# 58c2ecf20Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_cititle: ARM Generic Interrupt Controller v1 and v2 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_cimaintainers: 108c2ecf20Sopenharmony_ci - Marc Zyngier <marc.zyngier@arm.com> 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_cidescription: |+ 138c2ecf20Sopenharmony_ci ARM SMP cores are often associated with a GIC, providing per processor 148c2ecf20Sopenharmony_ci interrupts (PPI), shared processor interrupts (SPI) and software 158c2ecf20Sopenharmony_ci generated interrupts (SGI). 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci Primary GIC is attached directly to the CPU and typically has PPIs and SGIs. 188c2ecf20Sopenharmony_ci Secondary GICs are cascaded into the upward interrupt controller and do not 198c2ecf20Sopenharmony_ci have PPIs or SGIs. 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ciallOf: 228c2ecf20Sopenharmony_ci - $ref: /schemas/interrupt-controller.yaml# 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ciproperties: 258c2ecf20Sopenharmony_ci compatible: 268c2ecf20Sopenharmony_ci oneOf: 278c2ecf20Sopenharmony_ci - items: 288c2ecf20Sopenharmony_ci - enum: 298c2ecf20Sopenharmony_ci - arm,arm11mp-gic 308c2ecf20Sopenharmony_ci - arm,cortex-a15-gic 318c2ecf20Sopenharmony_ci - arm,cortex-a7-gic 328c2ecf20Sopenharmony_ci - arm,cortex-a5-gic 338c2ecf20Sopenharmony_ci - arm,cortex-a9-gic 348c2ecf20Sopenharmony_ci - arm,eb11mp-gic 358c2ecf20Sopenharmony_ci - arm,gic-400 368c2ecf20Sopenharmony_ci - arm,pl390 378c2ecf20Sopenharmony_ci - arm,tc11mp-gic 388c2ecf20Sopenharmony_ci - nvidia,tegra210-agic 398c2ecf20Sopenharmony_ci - qcom,msm-8660-qgic 408c2ecf20Sopenharmony_ci - qcom,msm-qgic2 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci - items: 438c2ecf20Sopenharmony_ci - const: arm,gic-400 448c2ecf20Sopenharmony_ci - enum: 458c2ecf20Sopenharmony_ci - arm,cortex-a15-gic 468c2ecf20Sopenharmony_ci - arm,cortex-a7-gic 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ci - items: 498c2ecf20Sopenharmony_ci - const: arm,arm1176jzf-devchip-gic 508c2ecf20Sopenharmony_ci - const: arm,arm11mp-gic 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ci - items: 538c2ecf20Sopenharmony_ci - const: brcm,brahma-b15-gic 548c2ecf20Sopenharmony_ci - const: arm,cortex-a15-gic 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci interrupt-controller: true 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ci "#address-cells": 598c2ecf20Sopenharmony_ci enum: [ 0, 1 ] 608c2ecf20Sopenharmony_ci "#size-cells": 618c2ecf20Sopenharmony_ci const: 1 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ci "#interrupt-cells": 648c2ecf20Sopenharmony_ci const: 3 658c2ecf20Sopenharmony_ci description: | 668c2ecf20Sopenharmony_ci The 1st cell is the interrupt type; 0 for SPI interrupts, 1 for PPI 678c2ecf20Sopenharmony_ci interrupts. 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci The 2nd cell contains the interrupt number for the interrupt type. 708c2ecf20Sopenharmony_ci SPI interrupts are in the range [0-987]. PPI interrupts are in the 718c2ecf20Sopenharmony_ci range [0-15]. 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ci The 3rd cell is the flags, encoded as follows: 748c2ecf20Sopenharmony_ci bits[3:0] trigger type and level flags. 758c2ecf20Sopenharmony_ci 1 = low-to-high edge triggered 768c2ecf20Sopenharmony_ci 2 = high-to-low edge triggered (invalid for SPIs) 778c2ecf20Sopenharmony_ci 4 = active high level-sensitive 788c2ecf20Sopenharmony_ci 8 = active low level-sensitive (invalid for SPIs). 798c2ecf20Sopenharmony_ci bits[15:8] PPI interrupt cpu mask. Each bit corresponds to each of 808c2ecf20Sopenharmony_ci the 8 possible cpus attached to the GIC. A bit set to '1' indicated 818c2ecf20Sopenharmony_ci the interrupt is wired to that CPU. Only valid for PPI interrupts. 828c2ecf20Sopenharmony_ci Also note that the configurability of PPI interrupts is IMPLEMENTATION 838c2ecf20Sopenharmony_ci DEFINED and as such not guaranteed to be present (most SoC available 848c2ecf20Sopenharmony_ci in 2014 seem to ignore the setting of this flag and use the hardware 858c2ecf20Sopenharmony_ci default value). 868c2ecf20Sopenharmony_ci 878c2ecf20Sopenharmony_ci reg: 888c2ecf20Sopenharmony_ci description: | 898c2ecf20Sopenharmony_ci Specifies base physical address(s) and size of the GIC registers. The 908c2ecf20Sopenharmony_ci first region is the GIC distributor register base and size. The 2nd region 918c2ecf20Sopenharmony_ci is the GIC cpu interface register base and size. 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_ci For GICv2 with virtualization extensions, additional regions are 948c2ecf20Sopenharmony_ci required for specifying the base physical address and size of the VGIC 958c2ecf20Sopenharmony_ci registers. The first additional region is the GIC virtual interface 968c2ecf20Sopenharmony_ci control register base and size. The 2nd additional region is the GIC 978c2ecf20Sopenharmony_ci virtual cpu interface register base and size. 988c2ecf20Sopenharmony_ci minItems: 2 998c2ecf20Sopenharmony_ci maxItems: 4 1008c2ecf20Sopenharmony_ci 1018c2ecf20Sopenharmony_ci ranges: true 1028c2ecf20Sopenharmony_ci 1038c2ecf20Sopenharmony_ci interrupts: 1048c2ecf20Sopenharmony_ci description: Interrupt source of the parent interrupt controller on 1058c2ecf20Sopenharmony_ci secondary GICs, or VGIC maintenance interrupt on primary GIC (see 1068c2ecf20Sopenharmony_ci below). 1078c2ecf20Sopenharmony_ci maxItems: 1 1088c2ecf20Sopenharmony_ci 1098c2ecf20Sopenharmony_ci cpu-offset: 1108c2ecf20Sopenharmony_ci description: per-cpu offset within the distributor and cpu interface 1118c2ecf20Sopenharmony_ci regions, used when the GIC doesn't have banked registers. The offset 1128c2ecf20Sopenharmony_ci is cpu-offset * cpu-nr. 1138c2ecf20Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 1148c2ecf20Sopenharmony_ci 1158c2ecf20Sopenharmony_ci clocks: 1168c2ecf20Sopenharmony_ci minItems: 1 1178c2ecf20Sopenharmony_ci maxItems: 2 1188c2ecf20Sopenharmony_ci 1198c2ecf20Sopenharmony_ci clock-names: 1208c2ecf20Sopenharmony_ci description: List of names for the GIC clock input(s). Valid clock names 1218c2ecf20Sopenharmony_ci depend on the GIC variant. 1228c2ecf20Sopenharmony_ci oneOf: 1238c2ecf20Sopenharmony_ci - const: ic_clk # for "arm,arm11mp-gic" 1248c2ecf20Sopenharmony_ci - const: PERIPHCLKEN # for "arm,cortex-a15-gic" 1258c2ecf20Sopenharmony_ci - items: # for "arm,cortex-a9-gic" 1268c2ecf20Sopenharmony_ci - const: PERIPHCLK 1278c2ecf20Sopenharmony_ci - const: PERIPHCLKEN 1288c2ecf20Sopenharmony_ci - const: clk # for "arm,gic-400" and "nvidia,tegra210" 1298c2ecf20Sopenharmony_ci - const: gclk #for "arm,pl390" 1308c2ecf20Sopenharmony_ci 1318c2ecf20Sopenharmony_ci power-domains: 1328c2ecf20Sopenharmony_ci maxItems: 1 1338c2ecf20Sopenharmony_ci 1348c2ecf20Sopenharmony_ci resets: 1358c2ecf20Sopenharmony_ci maxItems: 1 1368c2ecf20Sopenharmony_ci 1378c2ecf20Sopenharmony_cirequired: 1388c2ecf20Sopenharmony_ci - compatible 1398c2ecf20Sopenharmony_ci - reg 1408c2ecf20Sopenharmony_ci 1418c2ecf20Sopenharmony_cipatternProperties: 1428c2ecf20Sopenharmony_ci "^v2m@[0-9a-f]+$": 1438c2ecf20Sopenharmony_ci type: object 1448c2ecf20Sopenharmony_ci description: | 1458c2ecf20Sopenharmony_ci * GICv2m extension for MSI/MSI-x support (Optional) 1468c2ecf20Sopenharmony_ci 1478c2ecf20Sopenharmony_ci Certain revisions of GIC-400 supports MSI/MSI-x via V2M register frame(s). 1488c2ecf20Sopenharmony_ci This is enabled by specifying v2m sub-node(s). 1498c2ecf20Sopenharmony_ci 1508c2ecf20Sopenharmony_ci properties: 1518c2ecf20Sopenharmony_ci compatible: 1528c2ecf20Sopenharmony_ci const: arm,gic-v2m-frame 1538c2ecf20Sopenharmony_ci 1548c2ecf20Sopenharmony_ci msi-controller: true 1558c2ecf20Sopenharmony_ci 1568c2ecf20Sopenharmony_ci reg: 1578c2ecf20Sopenharmony_ci maxItems: 1 1588c2ecf20Sopenharmony_ci description: GICv2m MSI interface register base and size 1598c2ecf20Sopenharmony_ci 1608c2ecf20Sopenharmony_ci arm,msi-base-spi: 1618c2ecf20Sopenharmony_ci description: When the MSI_TYPER register contains an incorrect value, 1628c2ecf20Sopenharmony_ci this property should contain the SPI base of the MSI frame, overriding 1638c2ecf20Sopenharmony_ci the HW value. 1648c2ecf20Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 1658c2ecf20Sopenharmony_ci 1668c2ecf20Sopenharmony_ci arm,msi-num-spis: 1678c2ecf20Sopenharmony_ci description: When the MSI_TYPER register contains an incorrect value, 1688c2ecf20Sopenharmony_ci this property should contain the number of SPIs assigned to the 1698c2ecf20Sopenharmony_ci frame, overriding the HW value. 1708c2ecf20Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 1718c2ecf20Sopenharmony_ci 1728c2ecf20Sopenharmony_ci required: 1738c2ecf20Sopenharmony_ci - compatible 1748c2ecf20Sopenharmony_ci - msi-controller 1758c2ecf20Sopenharmony_ci - reg 1768c2ecf20Sopenharmony_ci 1778c2ecf20Sopenharmony_ci additionalProperties: false 1788c2ecf20Sopenharmony_ci 1798c2ecf20Sopenharmony_ciadditionalProperties: false 1808c2ecf20Sopenharmony_ci 1818c2ecf20Sopenharmony_ciexamples: 1828c2ecf20Sopenharmony_ci - | 1838c2ecf20Sopenharmony_ci // GICv1 1848c2ecf20Sopenharmony_ci intc: interrupt-controller@fff11000 { 1858c2ecf20Sopenharmony_ci compatible = "arm,cortex-a9-gic"; 1868c2ecf20Sopenharmony_ci #interrupt-cells = <3>; 1878c2ecf20Sopenharmony_ci #address-cells = <1>; 1888c2ecf20Sopenharmony_ci interrupt-controller; 1898c2ecf20Sopenharmony_ci reg = <0xfff11000 0x1000>, 1908c2ecf20Sopenharmony_ci <0xfff10100 0x100>; 1918c2ecf20Sopenharmony_ci }; 1928c2ecf20Sopenharmony_ci 1938c2ecf20Sopenharmony_ci - | 1948c2ecf20Sopenharmony_ci // GICv2 1958c2ecf20Sopenharmony_ci interrupt-controller@2c001000 { 1968c2ecf20Sopenharmony_ci compatible = "arm,cortex-a15-gic"; 1978c2ecf20Sopenharmony_ci #interrupt-cells = <3>; 1988c2ecf20Sopenharmony_ci interrupt-controller; 1998c2ecf20Sopenharmony_ci reg = <0x2c001000 0x1000>, 2008c2ecf20Sopenharmony_ci <0x2c002000 0x2000>, 2018c2ecf20Sopenharmony_ci <0x2c004000 0x2000>, 2028c2ecf20Sopenharmony_ci <0x2c006000 0x2000>; 2038c2ecf20Sopenharmony_ci interrupts = <1 9 0xf04>; 2048c2ecf20Sopenharmony_ci }; 2058c2ecf20Sopenharmony_ci 2068c2ecf20Sopenharmony_ci - | 2078c2ecf20Sopenharmony_ci // GICv2m extension for MSI/MSI-x support 2088c2ecf20Sopenharmony_ci interrupt-controller@e1101000 { 2098c2ecf20Sopenharmony_ci compatible = "arm,gic-400"; 2108c2ecf20Sopenharmony_ci #interrupt-cells = <3>; 2118c2ecf20Sopenharmony_ci #address-cells = <1>; 2128c2ecf20Sopenharmony_ci #size-cells = <1>; 2138c2ecf20Sopenharmony_ci interrupt-controller; 2148c2ecf20Sopenharmony_ci interrupts = <1 8 0xf04>; 2158c2ecf20Sopenharmony_ci ranges = <0 0xe1100000 0x100000>; 2168c2ecf20Sopenharmony_ci reg = <0xe1110000 0x01000>, 2178c2ecf20Sopenharmony_ci <0xe112f000 0x02000>, 2188c2ecf20Sopenharmony_ci <0xe1140000 0x10000>, 2198c2ecf20Sopenharmony_ci <0xe1160000 0x10000>; 2208c2ecf20Sopenharmony_ci 2218c2ecf20Sopenharmony_ci v2m0: v2m@80000 { 2228c2ecf20Sopenharmony_ci compatible = "arm,gic-v2m-frame"; 2238c2ecf20Sopenharmony_ci msi-controller; 2248c2ecf20Sopenharmony_ci reg = <0x80000 0x1000>; 2258c2ecf20Sopenharmony_ci }; 2268c2ecf20Sopenharmony_ci 2278c2ecf20Sopenharmony_ci //... 2288c2ecf20Sopenharmony_ci 2298c2ecf20Sopenharmony_ci v2mN: v2m@90000 { 2308c2ecf20Sopenharmony_ci compatible = "arm,gic-v2m-frame"; 2318c2ecf20Sopenharmony_ci msi-controller; 2328c2ecf20Sopenharmony_ci reg = <0x90000 0x1000>; 2338c2ecf20Sopenharmony_ci }; 2348c2ecf20Sopenharmony_ci }; 2358c2ecf20Sopenharmony_ci... 236