-
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.
Merge tag 'riscv-for-linus-4.19-mw0' of git://git.kernel.org/pub/scm/…
…linux/kernel/git/palmer/riscv-linux Pull RISC-V updates from Palmer Dabbelt: "This contains some major improvements to the RISC-V port, including the necessary interrupt controller and timer support to actually make it to userspace. Support for three devices has been added: - the ISA-mandated timers on RISC-V systems. - the ISA-mandated first-level interrupt controller on RISC-V systems, which is handled as part of our core arch code because it's very small and tightly tied to the ISA. - SiFive's platform-level interrupt controller, which talks to the actual devices. In addition to these new devices, there are a handful of cleanups all over the RISC-V tree: - build fixes for various configurations: * A fix to the vDSO build's makefile so it respects CFLAGS. * The addition of __lshrti3, a libgcc derived function necessary for some 32-bit configurations. * !SMP && PERF_EVENTS - Cleanups to the arch code to remove the remnants of old versions of the drivers that were just properly submitted. * Some dead code from the timer driver, most of which wasn't ever even compiled. * Cleanups of some interrupt #defines, which are now local to the interrupt handling code. - Fixes to ptrace(), which while not being sufficient to fully make GDB work are at least sufficient to get simple GDB tasks to work. - Early printk support via RISC-V's architecturally mandated SBI console device. - A fix to our early debug trap handler to ensure it's always aligned. These patches have all been through a fairly extensive review process, but as this enables a whole pile of functionality (ie, userspace) I'm confident we'll need to submit a few more patches. The only concrete issues I know about are the sys_riscv_flush_icache patches, but as I managed to screw those up on Friday I figured it'd be best to let them bake another week. This tag boots a Fedora root filesystem on QEMU's master branch for me, and before this morning's rebase (from 4.18-rc8 to 4.18) it booted on the HiFive Unleashed. Thanks to Christoph Hellwig and the other guys at WD for getting the new drivers in shape!" * tag 'riscv-for-linus-4.19-mw0' of git://git.kernel.org/pub/scm/linux/kernel/git/palmer/riscv-linux: dt-bindings: interrupt-controller: SiFive Plaform Level Interrupt Controller dt-bindings: interrupt-controller: RISC-V local interrupt controller RISC-V: Fix !CONFIG_SMP compilation error irqchip: add a SiFive PLIC driver RISC-V: Add the directive for alignment of stvec's value clocksource: new RISC-V SBI timer driver RISC-V: implement low-level interrupt handling RISC-V: add a definition for the SIE SEIE bit RISC-V: remove INTERRUPT_CAUSE_* defines from asm/irq.h RISC-V: simplify software interrupt / IPI code RISC-V: remove timer leftovers RISC-V: Add early printk support via the SBI console RISC-V: Don't increment sepc after breakpoint. RISC-V: implement __lshrti3. RISC-V: Use KBUILD_CFLAGS instead of KCFLAGS when building the vDSO
- Loading branch information
Showing
27 changed files
with
625 additions
and
59 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; | ||
}; | ||
}; |
58 changes: 58 additions & 0 deletions
58
Documentation/devicetree/bindings/interrupt-controller/sifive,plic-1.0.0.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,58 @@ | ||
SiFive Platform-Level Interrupt Controller (PLIC) | ||
------------------------------------------------- | ||
|
||
SiFive SOCs include an implementation of the Platform-Level Interrupt Controller | ||
(PLIC) high-level specification in the RISC-V Privileged Architecture | ||
specification. The PLIC connects all external interrupts in the system to all | ||
hart contexts in the system, via the external interrupt source in each hart. | ||
|
||
A hart context is a privilege mode in a hardware execution thread. For example, | ||
in an 4 core system with 2-way SMT, you have 8 harts and probably at least two | ||
privilege modes per hart; machine mode and supervisor mode. | ||
|
||
Each interrupt can be enabled on per-context basis. Any context can claim | ||
a pending enabled interrupt and then release it once it has been handled. | ||
|
||
Each interrupt has a configurable priority. Higher priority interrupts are | ||
serviced first. Each context can specify a priority threshold. Interrupts | ||
with priority below this threshold will not cause the PLIC to raise its | ||
interrupt line leading to the context. | ||
|
||
While the PLIC supports both edge-triggered and level-triggered interrupts, | ||
interrupt handlers are oblivious to this distinction and therefore it is not | ||
specified in the PLIC device-tree binding. | ||
|
||
While the RISC-V ISA doesn't specify a memory layout for the PLIC, the | ||
"sifive,plic-1.0.0" device is a concrete implementation of the PLIC that | ||
contains a specific memory layout, which is documented in chapter 8 of the | ||
SiFive U5 Coreplex Series Manual <https://static.dev.sifive.com/U54-MC-RVCoreIP.pdf>. | ||
|
||
Required properties: | ||
- compatible : "sifive,plic-1.0.0" and a string identifying the actual | ||
detailed implementation in case that specific bugs need to be worked around. | ||
- #address-cells : should be <0> or more. | ||
- #interrupt-cells : should be <1> or more. | ||
- interrupt-controller : Identifies the node as an interrupt controller. | ||
- reg : Should contain 1 register range (address and length). | ||
- interrupts-extended : Specifies which contexts are connected to the PLIC, | ||
with "-1" specifying that a context is not present. Each node pointed | ||
to should be a riscv,cpu-intc node, which has a riscv node as parent. | ||
- riscv,ndev: Specifies how many external interrupts are supported by | ||
this controller. | ||
|
||
Example: | ||
|
||
plic: interrupt-controller@c000000 { | ||
#address-cells = <0>; | ||
#interrupt-cells = <1>; | ||
compatible = "sifive,plic-1.0.0", "sifive,fu540-c000-plic"; | ||
interrupt-controller; | ||
interrupts-extended = < | ||
&cpu0-intc 11 | ||
&cpu1-intc 11 &cpu1-intc 9 | ||
&cpu2-intc 11 &cpu2-intc 9 | ||
&cpu3-intc 11 &cpu3-intc 9 | ||
&cpu4-intc 11 &cpu4-intc 9>; | ||
reg = <0xc000000 0x4000000>; | ||
riscv,ndev = <10>; | ||
}; |
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
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 |
---|---|---|
|
@@ -76,3 +76,4 @@ CONFIG_ROOT_NFS=y | |
CONFIG_CRYPTO_USER_API_HASH=y | ||
CONFIG_MODULES=y | ||
CONFIG_MODULE_UNLOAD=y | ||
CONFIG_SIFIVE_PLIC=y |
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
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
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
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
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
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
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
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
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
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
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
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
Oops, something went wrong.