Disable PLIC from DT

This commit is contained in:
Rodrigo Arias 2024-07-12 18:19:58 +02:00
parent 9a7b230b5b
commit bed3c7ba5c
2 changed files with 71 additions and 33 deletions

View File

@ -2399,3 +2399,41 @@ puts the hang place at some point in between the check and the `pr_info()` call.
If this is a problem on the OpenSBI side, we can bisect the code to find out If this is a problem on the OpenSBI side, we can bisect the code to find out
where the problem was introduced. But first, I would have to try OpenSBI 1.4 and where the problem was introduced. But first, I would have to try OpenSBI 1.4 and
ensure we can reproduce it. ensure we can reproduce it.
Okay so with OpenSBI 1.4 we have a hang in the same place.
Lets compare the domain regions:
With OpenSBI 1.4 `fpga/alveo_ox`:
Domain0 Region00 : 0x0000000040000000-0x0000000040000fff M: (I,R,W) S/U: (R,W)
Domain0 Region01 : 0x0000000080040000-0x000000008004ffff M: (R,W) S/U: ()
Domain0 Region02 : 0x0000000080000000-0x000000008003ffff M: (R,X) S/U: ()
Domain0 Region03 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X)
Domain0 Next Address : 0x0000000080200000
Domain0 Next Arg1 : 0x0000000080017000
With OpenSBI 1.4 `generic`:
Domain0 Region00 : 0x0000000040001000-0x0000000040001fff M: (I,R,W) S/U: (R,W)
Domain0 Region01 : 0x0000000080040000-0x000000008005ffff M: (R,W) S/U: ()
Domain0 Region02 : 0x0000000080000000-0x000000008003ffff M: (R,X) S/U: ()
Domain0 Region03 : 0x0000000040800000-0x0000000040bfffff M: (I,R,W) S/U: (R,W)
Domain0 Region04 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X)
Domain0 Next Address : 0x0000000080200000
Domain0 Next Arg1 : 0x0000000080100000
With OpenSBI 1.5 `generic`:
Domain0 Region00 : 0x0000000040001000-0x0000000040001fff M: (I,R,W) S/U: (R,W)
Domain0 Region01 : 0x0000000080040000-0x000000008005ffff M: (R,W) S/U: ()
Domain0 Region02 : 0x0000000080000000-0x000000008003ffff M: (R,X) S/U: ()
Domain0 Region03 : 0x0000000040800000-0x0000000040bfffff M: (I,R,W) S/U: (R,W)
Domain0 Region04 : 0x0000000000000000-0xffffffffffffffff M: () S/U: (R,W,X)
Domain0 Next Address : 0x0000000080200000
Domain0 Next Arg1 : 0x0000000080100000
So we have several changes.
First, the PLIC has a new memory map. Let's comment it out in the device tree,
and see what happens.

View File

@ -132,8 +132,8 @@
uart_testing: serial@40003000 { uart_testing: serial@40003000 {
compatible = "ns16550"; compatible = "ns16550";
reg = <0x0 0x40003000 0x0 0x1000>; reg = <0x0 0x40003000 0x0 0x1000>;
interrupts = <1>; /* Output interrupt 1 */ // interrupts = <1>; /* Output interrupt 1 */
interrupt-parent = <&PLIC>; // interrupt-parent = <&PLIC>;
reg-shift = <2>; reg-shift = <2>;
clock-frequency = <50000000>; clock-frequency = <50000000>;
current-speed = <115200>; current-speed = <115200>;
@ -184,37 +184,37 @@
/* Platform-Level Interrupt Controller: Delivers interrupts to /* Platform-Level Interrupt Controller: Delivers interrupts to
* HARTs. */ * HARTs. */
PLIC: plic@40800000 { // PLIC: plic@40800000 {
compatible = "riscv,plic0"; // compatible = "riscv,plic0";
interrupt-controller; /* Receives interrupts */ // interrupt-controller; /* Receives interrupts */
#address-cells = <0>; // #address-cells = <0>;
#interrupt-cells = <1>; // #interrupt-cells = <1>;
/* Sends interrupts to HART interrupt controllers */ // /* Sends interrupts to HART interrupt controllers */
//
/* // /*
* From: linux-6.6.1/arch/riscv/include/asm/csr.h // * From: linux-6.6.1/arch/riscv/include/asm/csr.h
* // *
* Interrupt causes (minus the high bit) // * Interrupt causes (minus the high bit)
* #define IRQ_S_SOFT 1 // * #define IRQ_S_SOFT 1
* #define IRQ_VS_SOFT 2 // * #define IRQ_VS_SOFT 2
* #define IRQ_M_SOFT 3 // * #define IRQ_M_SOFT 3
* #define IRQ_S_TIMER 5 // * #define IRQ_S_TIMER 5
* #define IRQ_VS_TIMER 6 // * #define IRQ_VS_TIMER 6
* #define IRQ_M_TIMER 7 // * #define IRQ_M_TIMER 7
* #define IRQ_S_EXT 9 // * #define IRQ_S_EXT 9
* #define IRQ_VS_EXT 10 // * #define IRQ_VS_EXT 10
* #define IRQ_M_EXT 11 // * #define IRQ_M_EXT 11
* #define IRQ_S_GEXT 12 // * #define IRQ_S_GEXT 12
* #define IRQ_PMU_OVF 13 // * #define IRQ_PMU_OVF 13
* #define IRQ_LOCAL_MAX (IRQ_PMU_OVF + 1) // * #define IRQ_LOCAL_MAX (IRQ_PMU_OVF + 1)
* #define IRQ_LOCAL_MASK GENMASK((IRQ_LOCAL_MAX - 1), 0) // * #define IRQ_LOCAL_MASK GENMASK((IRQ_LOCAL_MAX - 1), 0)
*/ // */
interrupts-extended = <&HLIC0 11>, <&HLIC0 9>; // interrupts-extended = <&HLIC0 11>, <&HLIC0 9>;
reg = < 0x0 0x40800000 0x0 0x00400000>; // reg = < 0x0 0x40800000 0x0 0x00400000>;
riscv,ndev = <3>; // riscv,ndev = <3>;
//riscv,max-priority = <0x7>; // //riscv,max-priority = <0x7>;
phandle = <0x3>; // phandle = <0x3>;
}; // };
/* Core Local Interruptor: It directly connects to the timer and /* Core Local Interruptor: It directly connects to the timer and
* inter-processor interrupt lines of various HARTs (or CPUs) so * inter-processor interrupt lines of various HARTs (or CPUs) so
* RISC-V per-HART (or per-CPU) local interrupt controller is * RISC-V per-HART (or per-CPU) local interrupt controller is