| # SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause | |
| %YAML 1.2 | |
| --- | |
| $id: http://devicetree.org/schemas/interrupt-controller/riscv,cpu-intc.yaml# | |
| $schema: http://devicetree.org/meta-schemas/core.yaml# | |
| title: RISC-V Hart-Level Interrupt Controller (HLIC) | |
| description: | |
| RISC-V cores include Control Status Registers (CSRs) which are local to | |
| each CPU core (HART in RISC-V terminology) and can be read or written by | |
| software. Some of these CSRs are used to control local interrupts connected | |
| to the core. Every interrupt is ultimately routed through a hart's HLIC | |
| before it interrupts that hart. | |
| The RISC-V supervisor ISA manual specifies three interrupt sources that are | |
| attached to every HLIC namely software interrupts, the timer interrupt, and | |
| external interrupts. Software interrupts are used to send IPIs between | |
| cores. The timer interrupt comes from an architecturally mandated real- | |
| time timer that is controlled via Supervisor Binary Interface (SBI) calls | |
| and CSR reads. External interrupts connect all other device interrupts to | |
| the HLIC, which are routed via the platform-level interrupt controller | |
| (PLIC). | |
| All RISC-V systems that conform to the supervisor ISA specification are | |
| required to have a HLIC with these three interrupt sources present. Since | |
| the interrupt map is defined by the ISA it's not listed in the HLIC's device | |
| tree entry, though external interrupt controllers (like the PLIC, for | |
| example) will need to define how their interrupts map to the relevant HLICs. | |
| This means a PLIC interrupt property will typically list the HLICs for all | |
| present HARTs in the system. | |
| maintainers: | |
| - Palmer Dabbelt <palmer@dabbelt.com> | |
| - Paul Walmsley <paul.walmsley@sifive.com> | |
| properties: | |
| compatible: | |
| oneOf: | |
| - items: | |
| - const: andestech,cpu-intc | |
| - const: riscv,cpu-intc | |
| - const: riscv,cpu-intc | |
| interrupt-controller: true | |
| '#interrupt-cells': | |
| const: 1 | |
| description: | | |
| The interrupt sources are defined by the RISC-V supervisor ISA manual, | |
| with only the following three interrupts being defined for | |
| supervisor mode: | |
| - Source 1 is the supervisor software interrupt, which can be sent by | |
| an SBI call and is reserved for use by software. | |
| - Source 5 is the supervisor timer interrupt, which can be configured | |
| by SBI calls and implements a one-shot timer. | |
| - Source 9 is the supervisor external interrupt, which chains to all | |
| other device interrupts. | |
| required: | |
| - compatible | |
| - '#interrupt-cells' | |
| - interrupt-controller | |
| additionalProperties: false | |
| examples: | |
| - | | |
| interrupt-controller { | |
| #interrupt-cells = <1>; | |
| compatible = "riscv,cpu-intc"; | |
| interrupt-controller; | |
| }; |