.include "macros.inc" test_suite mmu .purgem test .macro test name movi a2, 0x00000004 idtlb a2 movi a2, 0x00100004 idtlb a2 movi a2, 0x00200004 idtlb a2 movi a2, 0x00300004 idtlb a2 movi a2, 0x00000007 idtlb a2 .endm test tlb_group movi a2, 0x04000002 /* PPN */ movi a3, 0x01200004 /* VPN */ wdtlb a2, a3 witlb a2, a3 movi a3, 0x00200004 rdtlb0 a1, a3 ritlb0 a2, a3 movi a3, 0x01000001 assert eq, a1, a3 assert eq, a2, a3 movi a3, 0x00200004 rdtlb1 a1, a3 ritlb1 a2, a3 movi a3, 0x04000002 assert eq, a1, a3 assert eq, a2, a3 movi a3, 0x01234567 pdtlb a1, a3 pitlb a2, a3 movi a3, 0x01234014 assert eq, a1, a3 movi a3, 0x0123400c assert eq, a2, a3 movi a3, 0x00200004 idtlb a3 iitlb a3 movi a3, 0x01234567 pdtlb a1, a3 pitlb a2, a3 movi a3, 0x00000010 and a1, a1, a3 assert eqi, a1, 0 movi a3, 0x00000008 and a2, a2, a3 assert eqi, a2, 0 test_end test itlb_miss set_vector kernel, 1f movi a3, 0x00100000 jx a3 test_fail 1: rsr a2, excvaddr assert eq, a2, a3 rsr a2, exccause movi a3, 16 assert eq, a2, a3 test_end test dtlb_miss set_vector kernel, 1f movi a3, 0x00100000 l8ui a2, a3, 0 test_fail 1: rsr a2, excvaddr assert eq, a2, a3 rsr a2, exccause movi a3, 24 assert eq, a2, a3 test_end test itlb_multi_hit set_vector kernel, 1f movi a2, 0x04000002 /* PPN */ movi a3, 0xf0000004 /* VPN */ witlb a2, a3 movi a3, 0xf0000000 pitlb a2, a3 test_fail 1: rsr a2, exccause movi a3, 17 assert eq, a2, a3 test_end test dtlb_multi_hit set_vector kernel, 1f movi a2, 0x04000002 /* PPN */ movi a3, 0x01200004 /* VPN */ wdtlb a2, a3 movi a3, 0x01200007 /* VPN */ wdtlb a2, a3 movi a3, 0x01200000 pdtlb a2, a3 test_fail 1: rsr a2, exccause movi a3, 25 assert eq, a2, a3 test_end test inst_fetch_privilege set_vector kernel, 3f movi a2, 0x4004f wsr a2, ps 1: isync nop 2: test_fail 3: movi a1, 1b rsr a2, excvaddr rsr a3, epc1 assert ge, a2, a1 assert ge, a3, a1 movi a1, 2b assert lt, a2, a1 assert lt, a3, a1 rsr a2, exccause movi a3, 18 assert eq, a2, a3 rsr a2, ps movi a3, 0x4005f assert eq, a2, a3 test_end test load_store_privilege set_vector kernel, 2f movi a3, 10f pitlb a3, a3 ritlb1 a2, a3 movi a1, 0x10 or a2, a2, a1 movi a1, 0x000ff000 and a3, a3, a1 movi a1, 4 or a3, a3, a1 witlb a2, a3 movi a3, 10f movi a1, 0x000fffff and a1, a3, a1 movi a2, 0x04000003 /* PPN */ movi a3, 0x01200004 /* VPN */ wdtlb a2, a3 movi a3, 0x01200001 movi a2, 0x4004f jx a1 10: wsr a2, ps isync 1: l8ui a2, a3, 0 test_fail 2: rsr a2, excvaddr assert eq, a2, a3 rsr a2, epc1 movi a3, 1b movi a1, 0x000fffff and a3, a3, a1 assert eq, a2, a3 rsr a2, exccause movi a3, 26 assert eq, a2, a3 rsr a2, ps movi a3, 0x4005f assert eq, a2, a3 test_end test cring_load_store_privilege set_vector kernel, 0 set_vector double, 2f movi a2, 0x04000003 /* PPN */ movi a3, 0x01200004 /* VPN */ wdtlb a2, a3 movi a3, 0x01200004 movi a2, 0x4005f /* ring 1 + excm => cring == 0 */ wsr a2, ps isync l8ui a2, a3, 0 /* cring used */ 1: l32e a2, a3, -4 /* ring used */ test_fail 2: rsr a2, excvaddr addi a2, a2, 4 assert eq, a2, a3 rsr a2, depc movi a3, 1b assert eq, a2, a3 rsr a2, exccause movi a3, 26 assert eq, a2, a3 rsr a2, ps movi a3, 0x4005f assert eq, a2, a3 test_end test inst_fetch_prohibited set_vector kernel, 2f movi a3, 10f pitlb a3, a3 ritlb1 a2, a3 movi a1, 0xfffff000 and a2, a2, a1 movi a1, 0x4 or a2, a2, a1 movi a1, 0x000ff000 and a3, a3, a1 movi a1, 4 or a3, a3, a1 witlb a2, a3 movi a3, 10f movi a1, 0x000fffff and a1, a3, a1 jx a1 .align 4 10: nop test_fail 2: rsr a2, excvaddr assert eq, a2, a1 rsr a2, epc1 assert eq, a2, a1 rsr a2, exccause movi a3, 20 assert eq, a2, a3 test_end test load_prohibited set_vector kernel, 2f movi a2, 0x0400000c /* PPN */ movi a3, 0x01200004 /* VPN */ wdtlb a2, a3 movi a3, 0x01200002 1: l8ui a2, a3, 0 test_fail 2: rsr a2, excvaddr assert eq, a2, a3 rsr a2, epc1 movi a3, 1b assert eq, a2, a3 rsr a2, exccause movi a3, 28 assert eq, a2, a3 test_end test store_prohibited set_vector kernel, 2f movi a2, 0x04000001 /* PPN */ movi a3, 0x01200004 /* VPN */ wdtlb a2, a3 movi a3, 0x01200003 l8ui a2, a3, 0 1: s8i a2, a3, 0 test_fail 2: rsr a2, excvaddr assert eq, a2, a3 rsr a2, epc1 movi a3, 1b assert eq, a2, a3 rsr a2, exccause movi a3, 29 assert eq, a2, a3 test_end test dtlb_autoload set_vector kernel, 0 movi a2, 0xd4000000 wsr a2, ptevaddr movi a3, 0x00001013 s32i a3, a2, 4 pdtlb a2, a3 movi a1, 0x10 and a1, a1, a2 assert eqi, a1, 0 l8ui a1, a3, 0 pdtlb a2, a3 movi a1, 0xfffff010 and a1, a1, a2 movi a3, 0x00001010 assert eq, a1, a3 movi a1, 0xf and a1, a1, a2 assert lti, a1, 4 test_end test_suite_end