Disable PLIC from DT
This commit is contained in:
parent
9a7b230b5b
commit
bed3c7ba5c
38
JOURNAL.md
38
JOURNAL.md
@ -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.
|
||||||
|
66
ox-plic.dts
66
ox-plic.dts
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user