-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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>
- Loading branch information
Palmer Dabbelt
authored and
Palmer Dabbelt
committed
Aug 13, 2018
1 parent
4c42ae4
commit b67bc7c
Showing
1 changed file
with
44 additions
and
0 deletions.
There are no files selected for viewing
44 changes: 44 additions & 0 deletions
44
Documentation/devicetree/bindings/interrupt-controller/riscv,cpu-intc.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
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 | ||
controller 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> | ||
- 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 = "riscv,cpu-intc", "sifive,fu540-c000-cpu-intc"; | ||
interrupt-controller; | ||
}; | ||
}; |