openrisc / mor1kx

mor1kx - an OpenRISC 1000 processor IP core
Other
490 stars 146 forks source link

IMMU issues when DMMU disabled #117

Closed stffrdhrn closed 3 years ago

stffrdhrn commented 3 years ago

In our or1k-tests suite the itlb_permission_test fails when the DMMU is disabled. This is reproduced in the github actions CI test suite (will commit soon).

The test case set's up some code and jumps to it expecting to generate page fault. But this may be wrong, there should be no page fault in supervisor mode.

Next in user more it tries to access the same code and expects a page fault again. There are several issues around page faults pointed out in the dtlb_permission_test too.

-------------------------------------------
itlb_permission_test set = 12
check 1 - page fault exec supervisor
report(0x0000053b);
report(0x00fae1ed);
exit(0x00000001);

Expected

-------------------------------------------
itlb_permission_test set = 12
check 1 - page fault exec supervisor
report(0x001f7357);
report(0x00418000);
check 2 - page fault exec user
-------------------------------------------
itlb_permission_test set = 13
check 1 - page fault exec supervisor
report(0x001f7357);
report(0x0041a000);
check 2 - page fault exec user
-------------------------------------------
...
stffrdhrn commented 3 years ago

This is fixed with the latest or1k-tests. https://github.com/openrisc/or1k-tests/commit/2be4a62d52440519bc2eec260b3b0f4f90ffe631

 fusesoc run --target mor1kx_tb  mor1kx-generic --elf_load /home/shorne/work/openrisc/or1k-t
ests/native/build/or1k/or1k-mmu  --feature_dmmu NONE --vcd

report(0x00098000);
-------------------------------------------
itlb_permission_test set = 10
check 1 - page fault exec supervisor
report(0x001f7357);
report(0x00414000);
-------------------------------------------
itlb_permission_test set = 11
check 1 - page fault exec supervisor
report(0x001f7357);
report(0x00416000);
-------------------------------------------
itlb_permission_test set = 12
check 1 - page fault exec supervisor
report(0x001f7357);
report(0x00418000);
-------------------------------------------
itlb_permission_test set = 10
check 1 - page fault exec user
report(0x001f7357);
report(0x00414000);
-------------------------------------------
itlb_permission_test set = 11
check 1 - page fault exec user
report(0x001f7357);
report(0x00416000);
-------------------------------------------
itlb_permission_test set = 12
check 1 - page fault exec user
report(0x001f7357);
report(0x00418000);
-------------------------------------------
report(0x8000000d);
exit(0x00000000);