1.include "macros.inc" 2 3test_suite mmu 4 5.purgem test 6 7.macro test name 8 movi a2, 0x00000004 9 idtlb a2 10 movi a2, 0x00100004 11 idtlb a2 12 movi a2, 0x00200004 13 idtlb a2 14 movi a2, 0x00300004 15 idtlb a2 16 movi a2, 0x00000007 17 idtlb a2 18.endm 19 20test tlb_group 21 movi a2, 0x04000002 /* PPN */ 22 movi a3, 0x01200004 /* VPN */ 23 wdtlb a2, a3 24 witlb a2, a3 25 movi a3, 0x00200004 26 rdtlb0 a1, a3 27 ritlb0 a2, a3 28 movi a3, 0x01000001 29 assert eq, a1, a3 30 assert eq, a2, a3 31 movi a3, 0x00200004 32 rdtlb1 a1, a3 33 ritlb1 a2, a3 34 movi a3, 0x04000002 35 assert eq, a1, a3 36 assert eq, a2, a3 37 movi a3, 0x01234567 38 pdtlb a1, a3 39 pitlb a2, a3 40 movi a3, 0x01234014 41 assert eq, a1, a3 42 movi a3, 0x0123400c 43 assert eq, a2, a3 44 movi a3, 0x00200004 45 idtlb a3 46 iitlb a3 47 movi a3, 0x01234567 48 pdtlb a1, a3 49 pitlb a2, a3 50 movi a3, 0x00000010 51 and a1, a1, a3 52 assert eqi, a1, 0 53 movi a3, 0x00000008 54 and a2, a2, a3 55 assert eqi, a2, 0 56test_end 57 58test itlb_miss 59 set_vector kernel, 1f 60 61 movi a3, 0x00100000 62 jx a3 63 test_fail 641: 65 rsr a2, excvaddr 66 assert eq, a2, a3 67 rsr a2, exccause 68 movi a3, 16 69 assert eq, a2, a3 70test_end 71 72test dtlb_miss 73 set_vector kernel, 1f 74 75 movi a3, 0x00100000 76 l8ui a2, a3, 0 77 test_fail 781: 79 rsr a2, excvaddr 80 assert eq, a2, a3 81 rsr a2, exccause 82 movi a3, 24 83 assert eq, a2, a3 84test_end 85 86test itlb_multi_hit 87 set_vector kernel, 1f 88 89 movi a2, 0x04000002 /* PPN */ 90 movi a3, 0xf0000004 /* VPN */ 91 witlb a2, a3 92 movi a3, 0xf0000000 93 pitlb a2, a3 94 test_fail 951: 96 rsr a2, exccause 97 movi a3, 17 98 assert eq, a2, a3 99test_end 100 101test dtlb_multi_hit 102 set_vector kernel, 1f 103 104 movi a2, 0x04000002 /* PPN */ 105 movi a3, 0x01200004 /* VPN */ 106 wdtlb a2, a3 107 movi a3, 0x01200007 /* VPN */ 108 wdtlb a2, a3 109 movi a3, 0x01200000 110 pdtlb a2, a3 111 test_fail 1121: 113 rsr a2, exccause 114 movi a3, 25 115 assert eq, a2, a3 116test_end 117 118test inst_fetch_privilege 119 set_vector kernel, 3f 120 121 movi a2, 0x4004f 122 wsr a2, ps 1231: 124 isync 125 nop 1262: 127 test_fail 1283: 129 movi a1, 1b 130 rsr a2, excvaddr 131 rsr a3, epc1 132 assert ge, a2, a1 133 assert ge, a3, a1 134 movi a1, 2b 135 assert lt, a2, a1 136 assert lt, a3, a1 137 rsr a2, exccause 138 movi a3, 18 139 assert eq, a2, a3 140 rsr a2, ps 141 movi a3, 0x4005f 142 assert eq, a2, a3 143test_end 144 145test load_store_privilege 146 set_vector kernel, 2f 147 148 movi a3, 10f 149 pitlb a3, a3 150 ritlb1 a2, a3 151 movi a1, 0x10 152 or a2, a2, a1 153 movi a1, 0x000ff000 154 and a3, a3, a1 155 movi a1, 4 156 or a3, a3, a1 157 witlb a2, a3 158 movi a3, 10f 159 movi a1, 0x000fffff 160 and a1, a3, a1 161 162 movi a2, 0x04000003 /* PPN */ 163 movi a3, 0x01200004 /* VPN */ 164 wdtlb a2, a3 165 movi a3, 0x01200001 166 movi a2, 0x4004f 167 jx a1 16810: 169 wsr a2, ps 170 isync 1711: 172 l8ui a2, a3, 0 173 test_fail 1742: 175 rsr a2, excvaddr 176 assert eq, a2, a3 177 rsr a2, epc1 178 movi a3, 1b 179 movi a1, 0x000fffff 180 and a3, a3, a1 181 assert eq, a2, a3 182 rsr a2, exccause 183 movi a3, 26 184 assert eq, a2, a3 185 rsr a2, ps 186 movi a3, 0x4005f 187 assert eq, a2, a3 188test_end 189 190test cring_load_store_privilege 191 set_vector kernel, 0 192 set_vector double, 2f 193 194 movi a2, 0x04000003 /* PPN */ 195 movi a3, 0x01200004 /* VPN */ 196 wdtlb a2, a3 197 movi a3, 0x01200004 198 movi a2, 0x4005f /* ring 1 + excm => cring == 0 */ 199 wsr a2, ps 200 isync 201 l8ui a2, a3, 0 /* cring used */ 2021: 203 l32e a2, a3, -4 /* ring used */ 204 test_fail 2052: 206 rsr a2, excvaddr 207 addi a2, a2, 4 208 assert eq, a2, a3 209 rsr a2, depc 210 movi a3, 1b 211 assert eq, a2, a3 212 rsr a2, exccause 213 movi a3, 26 214 assert eq, a2, a3 215 rsr a2, ps 216 movi a3, 0x4005f 217 assert eq, a2, a3 218test_end 219 220test inst_fetch_prohibited 221 set_vector kernel, 2f 222 223 movi a3, 10f 224 pitlb a3, a3 225 ritlb1 a2, a3 226 movi a1, 0xfffff000 227 and a2, a2, a1 228 movi a1, 0x4 229 or a2, a2, a1 230 movi a1, 0x000ff000 231 and a3, a3, a1 232 movi a1, 4 233 or a3, a3, a1 234 witlb a2, a3 235 movi a3, 10f 236 movi a1, 0x000fffff 237 and a1, a3, a1 238 jx a1 239 .align 4 24010: 241 nop 242 test_fail 2432: 244 rsr a2, excvaddr 245 assert eq, a2, a1 246 rsr a2, epc1 247 assert eq, a2, a1 248 rsr a2, exccause 249 movi a3, 20 250 assert eq, a2, a3 251test_end 252 253test load_prohibited 254 set_vector kernel, 2f 255 256 movi a2, 0x0400000c /* PPN */ 257 movi a3, 0x01200004 /* VPN */ 258 wdtlb a2, a3 259 movi a3, 0x01200002 2601: 261 l8ui a2, a3, 0 262 test_fail 2632: 264 rsr a2, excvaddr 265 assert eq, a2, a3 266 rsr a2, epc1 267 movi a3, 1b 268 assert eq, a2, a3 269 rsr a2, exccause 270 movi a3, 28 271 assert eq, a2, a3 272test_end 273 274test store_prohibited 275 set_vector kernel, 2f 276 277 movi a2, 0x04000001 /* PPN */ 278 movi a3, 0x01200004 /* VPN */ 279 wdtlb a2, a3 280 movi a3, 0x01200003 281 l8ui a2, a3, 0 2821: 283 s8i a2, a3, 0 284 test_fail 2852: 286 rsr a2, excvaddr 287 assert eq, a2, a3 288 rsr a2, epc1 289 movi a3, 1b 290 assert eq, a2, a3 291 rsr a2, exccause 292 movi a3, 29 293 assert eq, a2, a3 294test_end 295 296test dtlb_autoload 297 set_vector kernel, 0 298 299 movi a2, 0xd4000000 300 wsr a2, ptevaddr 301 movi a3, 0x00001013 302 s32i a3, a2, 4 303 pdtlb a2, a3 304 movi a1, 0x10 305 and a1, a1, a2 306 assert eqi, a1, 0 307 l8ui a1, a3, 0 308 pdtlb a2, a3 309 movi a1, 0xfffff010 310 and a1, a1, a2 311 movi a3, 0x00001010 312 assert eq, a1, a3 313 movi a1, 0xf 314 and a1, a1, a2 315 assert lti, a1, 4 316test_end 317 318test_suite_end 319