Add problems with the PLIC to the journal
This commit is contained in:
parent
272fd211b2
commit
b075d6fa2a
121
JOURNAL.md
121
JOURNAL.md
@ -3914,3 +3914,124 @@ frequency is:
|
|||||||
|
|
||||||
Assuming that it actually works well. Let's try that and see if we can have a
|
Assuming that it actually works well. Let's try that and see if we can have a
|
||||||
more realistic reading for the CLINT interrupt frequency.
|
more realistic reading for the CLINT interrupt frequency.
|
||||||
|
|
||||||
|
Something is going on with the plictool:
|
||||||
|
|
||||||
|
~ # plictool
|
||||||
|
plic=0x40800000 nsources=1024 ncontexts=15872
|
||||||
|
src=1 pend=1 prio=1 ctx=1 thre=0 <--- zero
|
||||||
|
src=2 pend=0 prio=1
|
||||||
|
src=3 pend=0 prio=1
|
||||||
|
src=4 pend=1 prio=1
|
||||||
|
src=33 pend=0 prio=0 ctx=1 thre=2
|
||||||
|
~ # plictool
|
||||||
|
plic=0x40800000 nsources=1024 ncontexts=15872
|
||||||
|
src=1 pend=1 prio=1 ctx=1 thre=2 <--- now changed to 2???
|
||||||
|
src=2 pend=0 prio=1
|
||||||
|
src=3 pend=0 prio=1
|
||||||
|
src=4 pend=1 prio=1
|
||||||
|
src=33 pend=0 prio=0 ctx=1 thre=2
|
||||||
|
|
||||||
|
Either the register is changing its value on its own, or the tool is causing it.
|
||||||
|
|
||||||
|
Let's revert the threshold to 0, but writing to the threshold address, should be
|
||||||
|
at 0x40a01000.
|
||||||
|
|
||||||
|
~ # devmem 0x40a01000
|
||||||
|
0x00000002
|
||||||
|
~ # devmem 0x40a01000
|
||||||
|
0x00000002
|
||||||
|
~ # devmem 0x40a01000
|
||||||
|
0x00000002
|
||||||
|
~ # devmem 0x40a01000 8 0
|
||||||
|
~ # devmem 0x40a01000
|
||||||
|
0x00000000
|
||||||
|
~ # devmem 0x40a01000
|
||||||
|
0x00000000
|
||||||
|
~ # devmem 0x40a01000
|
||||||
|
0x00000000
|
||||||
|
~ # plictool -c 2 -s 5 <-- limiting the sources and contexts
|
||||||
|
plic=0x40800000 nsources=5 ncontexts=2
|
||||||
|
src=1 pend=1 prio=1 ctx=1 thre=0 <-- good
|
||||||
|
src=2 pend=0 prio=1
|
||||||
|
src=3 pend=0 prio=1
|
||||||
|
src=4 pend=1 prio=1
|
||||||
|
~ # plictool -c 2 -s 5
|
||||||
|
plic=0x40800000 nsources=5 ncontexts=2
|
||||||
|
src=1 pend=1 prio=1 ctx=1 thre=0
|
||||||
|
src=2 pend=0 prio=1
|
||||||
|
src=3 pend=0 prio=1
|
||||||
|
src=4 pend=1 prio=1
|
||||||
|
~ # plictool -c 2 -s 5
|
||||||
|
plic=0x40800000 nsources=5 ncontexts=2
|
||||||
|
src=1 pend=1 prio=1 ctx=1 thre=0 <--- stable
|
||||||
|
src=2 pend=0 prio=1
|
||||||
|
src=3 pend=0 prio=1
|
||||||
|
src=4 pend=1 prio=1
|
||||||
|
~ # cat /proc/interrupts
|
||||||
|
CPU0
|
||||||
|
1: 1 SiFive PLIC 1 Edge ttyS1
|
||||||
|
5: 195413 RISC-V INTC 5 Edge riscv-timer
|
||||||
|
~ # cat /proc/int^Crupts
|
||||||
|
|
||||||
|
~ # echo a > /dev/ttyS1
|
||||||
|
~ # cat /proc/interrupts
|
||||||
|
CPU0
|
||||||
|
1: 1 SiFive PLIC 1 Edge ttyS1
|
||||||
|
5: 197102 RISC-V INTC 5 Edge riscv-timer
|
||||||
|
~ # plictool -c 2 -s 5
|
||||||
|
plic=0x40800000 nsources=5 ncontexts=2
|
||||||
|
src=1 pend=1 <--- wtf prio=1 ctx=1 thre=0
|
||||||
|
src=2 pend=0 prio=1
|
||||||
|
src=3 pend=0 prio=1
|
||||||
|
src=4 pend=1 prio=1
|
||||||
|
~ # devmem 0x40a01004
|
||||||
|
0x00000000 <--- the claim register continues to give 0 instead of 1
|
||||||
|
~ # devmem 0x40a01004
|
||||||
|
0x00000000
|
||||||
|
~ # devmem 0x40a01004
|
||||||
|
0x00000000
|
||||||
|
~ # devmem 0x40a01004
|
||||||
|
0x00000000
|
||||||
|
~ # devmem 0x40a01004
|
||||||
|
0x00000000
|
||||||
|
~ # devmem 0x40a01004 8 5 <-- try writing 5
|
||||||
|
~ # devmem 0x40a01004
|
||||||
|
0x00000000 <--- no change
|
||||||
|
~ # devmem 0x40a01004
|
||||||
|
0x00000000
|
||||||
|
~ # devmem 0x40a01004
|
||||||
|
0x00000000
|
||||||
|
~ # devmem 0x40a01004
|
||||||
|
0x00000000
|
||||||
|
~ # devmem 0x40a01004 8 1 <-- try with 1
|
||||||
|
~ # devmem 0x40a01004
|
||||||
|
0x00000000
|
||||||
|
~ # devmem 0x40a01004
|
||||||
|
0x00000000
|
||||||
|
~ # devmem 0x40a01004
|
||||||
|
0x00000000
|
||||||
|
~ # plictool -c 2 -s 5
|
||||||
|
plic=0x40800000 nsources=5 ncontexts=2
|
||||||
|
src=1 pend=0 <--- now it is gone prio=1 ctx=1 thre=0
|
||||||
|
src=2 pend=0 prio=1
|
||||||
|
src=3 pend=0 prio=1
|
||||||
|
src=4 pend=1 prio=1
|
||||||
|
~ # cat /proc/interrupts
|
||||||
|
CPU0
|
||||||
|
1: 3 <-- and we have >1 SiFive PLIC 1 Edge ttyS1
|
||||||
|
5: 213775 RISC-V INTC 5 Edge riscv-timer
|
||||||
|
~ # echo a > /dev/ttyS1
|
||||||
|
~ # cat /proc/interrupts
|
||||||
|
CPU0
|
||||||
|
1: 3 <--- stuck again SiFive PLIC 1 Edge ttyS1
|
||||||
|
5: 214551 RISC-V INTC 5 Edge riscv-timer
|
||||||
|
~ # plictool -c 2 -s 5
|
||||||
|
plic=0x40800000 nsources=5 ncontexts=2
|
||||||
|
src=1 pend=1 prio=1 ctx=1 thre=1 <--- again set to 1
|
||||||
|
src=2 pend=0 prio=1
|
||||||
|
src=3 pend=0 prio=1
|
||||||
|
src=4 pend=1 prio=1
|
||||||
|
|
||||||
|
Clearly something is not working well in the PLIC.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user