Skip to content

Commit b67bc7c

Browse files
dt-bindings: interrupt-controller: RISC-V local interrupt controller
Add documentation on the RISC-V local interrupt controller, which is a per-hart interrupt controller that manages all interrupts entering a RISC-V hart. This interrupt controller is present on all RISC-V systems. Signed-off-by: Palmer Dabbelt <palmer@dabbelt.com> [hch: minor cleanups] Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Palmer Dabbelt <palmer@sifive.com>
1 parent 4c42ae4 commit b67bc7c

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
RISC-V Hart-Level Interrupt Controller (HLIC)
2+
---------------------------------------------
3+
4+
RISC-V cores include Control Status Registers (CSRs) which are local to each
5+
CPU core (HART in RISC-V terminology) and can be read or written by software.
6+
Some of these CSRs are used to control local interrupts connected to the core.
7+
Every interrupt is ultimately routed through a hart's HLIC before it
8+
interrupts that hart.
9+
10+
The RISC-V supervisor ISA manual specifies three interrupt sources that are
11+
attached to every HLIC: software interrupts, the timer interrupt, and external
12+
interrupts. Software interrupts are used to send IPIs between cores. The
13+
timer interrupt comes from an architecturally mandated real-time timer that is
14+
controller via Supervisor Binary Interface (SBI) calls and CSR reads. External
15+
interrupts connect all other device interrupts to the HLIC, which are routed
16+
via the platform-level interrupt controller (PLIC).
17+
18+
All RISC-V systems that conform to the supervisor ISA specification are
19+
required to have a HLIC with these three interrupt sources present. Since the
20+
interrupt map is defined by the ISA it's not listed in the HLIC's device tree
21+
entry, though external interrupt controllers (like the PLIC, for example) will
22+
need to define how their interrupts map to the relevant HLICs. This means
23+
a PLIC interrupt property will typically list the HLICs for all present HARTs
24+
in the system.
25+
26+
Required properties:
27+
- compatible : "riscv,cpu-intc"
28+
- #interrupt-cells : should be <1>
29+
- interrupt-controller : Identifies the node as an interrupt controller
30+
31+
Furthermore, this interrupt-controller MUST be embedded inside the cpu
32+
definition of the hart whose CSRs control these local interrupts.
33+
34+
An example device tree entry for a HLIC is show below.
35+
36+
cpu1: cpu@1 {
37+
compatible = "riscv";
38+
...
39+
cpu1-intc: interrupt-controller {
40+
#interrupt-cells = <1>;
41+
compatible = "riscv,cpu-intc", "sifive,fu540-c000-cpu-intc";
42+
interrupt-controller;
43+
};
44+
};

0 commit comments

Comments
 (0)