|
|
1.1 ! root 1: .include "macros.inc" ! 2: ! 3: test_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: ! 20: test 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 ! 56: test_end ! 57: ! 58: test itlb_miss ! 59: set_vector kernel, 1f ! 60: ! 61: movi a3, 0x00100000 ! 62: jx a3 ! 63: test_fail ! 64: 1: ! 65: rsr a2, excvaddr ! 66: assert eq, a2, a3 ! 67: rsr a2, exccause ! 68: movi a3, 16 ! 69: assert eq, a2, a3 ! 70: test_end ! 71: ! 72: test dtlb_miss ! 73: set_vector kernel, 1f ! 74: ! 75: movi a3, 0x00100000 ! 76: l8ui a2, a3, 0 ! 77: test_fail ! 78: 1: ! 79: rsr a2, excvaddr ! 80: assert eq, a2, a3 ! 81: rsr a2, exccause ! 82: movi a3, 24 ! 83: assert eq, a2, a3 ! 84: test_end ! 85: ! 86: test 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 ! 95: 1: ! 96: rsr a2, exccause ! 97: movi a3, 17 ! 98: assert eq, a2, a3 ! 99: test_end ! 100: ! 101: test 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 ! 112: 1: ! 113: rsr a2, exccause ! 114: movi a3, 25 ! 115: assert eq, a2, a3 ! 116: test_end ! 117: ! 118: test inst_fetch_privilege ! 119: set_vector kernel, 3f ! 120: ! 121: movi a2, 0x4004f ! 122: wsr a2, ps ! 123: 1: ! 124: isync ! 125: nop ! 126: 2: ! 127: test_fail ! 128: 3: ! 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 ! 143: test_end ! 144: ! 145: test 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 ! 168: 10: ! 169: wsr a2, ps ! 170: isync ! 171: 1: ! 172: l8ui a2, a3, 0 ! 173: test_fail ! 174: 2: ! 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 ! 188: test_end ! 189: ! 190: test 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 */ ! 202: 1: ! 203: l32e a2, a3, -4 /* ring used */ ! 204: test_fail ! 205: 2: ! 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 ! 218: test_end ! 219: ! 220: test 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 ! 240: 10: ! 241: nop ! 242: test_fail ! 243: 2: ! 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 ! 251: test_end ! 252: ! 253: test 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 ! 260: 1: ! 261: l8ui a2, a3, 0 ! 262: test_fail ! 263: 2: ! 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 ! 272: test_end ! 273: ! 274: test 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 ! 282: 1: ! 283: s8i a2, a3, 0 ! 284: test_fail ! 285: 2: ! 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 ! 294: test_end ! 295: ! 296: test 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 ! 316: test_end ! 317: ! 318: test_suite_end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.