12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- RISC-V Hart-Level Interrupt Controller (HLIC)
- ---------------------------------------------
- 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: 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.
- Required properties:
- - compatible : "riscv,cpu-intc"
- - #interrupt-cells : should be <1>. 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.
- - interrupt-controller : Identifies the node as an interrupt controller
- Furthermore, this interrupt-controller MUST be embedded inside the cpu
- definition of the hart whose CSRs control these local interrupts.
- An example device tree entry for a HLIC is show below.
- cpu1: cpu@1 {
- compatible = "riscv";
- ...
- cpu1-intc: interrupt-controller {
- #interrupt-cells = <1>;
- compatible = "sifive,fu540-c000-cpu-intc", "riscv,cpu-intc";
- interrupt-controller;
- };
- };
|