1#include "macros.inc" 2 3test_suite break 4 5#if XCHAL_HAVE_DEBUG 6 7#define debug_level XCHAL_DEBUGLEVEL 8#define debug_vector glue(level, XCHAL_DEBUGLEVEL) 9#define EPC_DEBUG glue(epc, XCHAL_DEBUGLEVEL) 10 11test break 12 set_vector debug_vector, 0 13 rsil a2, debug_level 14 _break 0, 0 15 16 set_vector debug_vector, 2f 17 rsil a2, debug_level - 1 181: 19 _break 0, 0 20 test_fail 212: 22 rsr a2, ps 23 movi a3, 0x1f 24 and a2, a2, a3 25 movi a3, 0x10 | debug_level 26 assert eq, a2, a3 27 rsr a2, EPC_DEBUG 28 movi a3, 1b 29 assert eq, a2, a3 30 rsr a2, debugcause 31 movi a3, 0x8 32 assert eq, a2, a3 33test_end 34 35test breakn 36 set_vector debug_vector, 0 37 rsil a2, debug_level 38 _break.n 0 39 40 set_vector debug_vector, 2f 41 rsil a2, debug_level - 1 421: 43 _break.n 0 44 test_fail 452: 46 rsr a2, ps 47 movi a3, 0x1f 48 and a2, a2, a3 49 movi a3, 0x10 | debug_level 50 assert eq, a2, a3 51 rsr a2, EPC_DEBUG 52 movi a3, 1b 53 assert eq, a2, a3 54 rsr a2, debugcause 55 movi a3, 0x10 56 assert eq, a2, a3 57test_end 58 59#if XCHAL_NUM_IBREAK 60test ibreak 61 set_vector debug_vector, 0 62 rsil a2, debug_level 63 movi a2, 1f 64 wsr a2, ibreaka0 65 movi a2, 1 66 wsr a2, ibreakenable 67 isync 681: 69 rsil a2, debug_level - 1 70 movi a2, 1f 71 wsr a2, ibreaka0 72 movi a2, 0 73 wsr a2, ibreakenable 74 isync 751: 76 set_vector debug_vector, 2f 77 movi a2, 1f 78 wsr a2, ibreaka0 79 movi a2, 1 80 wsr a2, ibreakenable 81 isync 821: 83 test_fail 842: 85 rsr a2, ps 86 movi a3, 0x1f 87 and a2, a2, a3 88 movi a3, 0x10 | debug_level 89 assert eq, a2, a3 90 rsr a2, EPC_DEBUG 91 movi a3, 1b 92 assert eq, a2, a3 93 rsr a2, debugcause 94 movi a3, 0x2 95 assert eq, a2, a3 96test_end 97 98test ibreak_remove 99 set_vector debug_vector, 3f 100 rsil a2, debug_level - 1 101 movi a2, 2f 102 wsr a2, ibreaka0 103 movi a3, 1 1041: 105 wsr a3, ibreakenable 106 isync 1072: 108 beqz a3, 4f 109 test_fail 1103: 111 assert eqi, a3, 1 112 rsr a2, ps 113 movi a3, 0x1f 114 and a2, a2, a3 115 movi a3, 0x10 | debug_level 116 assert eq, a2, a3 117 rsr a2, EPC_DEBUG 118 movi a3, 2b 119 assert eq, a2, a3 120 rsr a2, debugcause 121 movi a3, 0x2 122 assert eq, a2, a3 123 124 movi a2, 0x40000 125 wsr a2, ps 126 isync 127 movi a3, 0 128 j 1b 1294: 130test_end 131 132test ibreak_priority 133 set_vector debug_vector, 2f 134 rsil a2, debug_level - 1 135 movi a2, 1f 136 wsr a2, ibreaka0 137 movi a2, 1 138 wsr a2, ibreakenable 139 isync 1401: 141 break 0, 0 142 test_fail 1432: 144 rsr a2, debugcause 145 movi a3, 0x2 146 assert eq, a2, a3 147test_end 148#endif 149 150test icount 151 set_vector debug_vector, 2f 152 rsil a2, debug_level - 1 153 movi a2, -2 154 wsr a2, icount 155 movi a2, 1 156 wsr a2, icountlevel 157 isync 158 rsil a2, 0 159 nop 1601: 161 break 0, 0 162 test_fail 1632: 164 movi a2, 0 165 wsr a2, icountlevel 166 rsr a2, EPC_DEBUG 167 movi a3, 1b 168 assert eq, a2, a3 169 rsr a2, debugcause 170 movi a3, 0x1 171 assert eq, a2, a3 172test_end 173 174.macro check_dbreak dr 175 rsr a2, EPC_DEBUG 176 movi a3, 1b 177 assert eq, a2, a3 178 rsr a2, debugcause 179 movi a3, 0x4 | (\dr << 8) 180 assert eq, a2, a3 181 movi a2, 0 182 wsr a2, dbreakc\dr 183.endm 184 185.macro dbreak_test dr, ctl, break, access, op 186 set_vector debug_vector, 2f 187 rsil a2, debug_level - 1 188 movi a2, \ctl 189 wsr a2, dbreakc\dr 190 movi a2, \break 191 wsr a2, dbreaka\dr 192 movi a2, \access 193 isync 1941: 195 \op a3, a2, 0 196 test_fail 1972: 198 check_dbreak \dr 199 reset_ps 200.endm 201 202#if XCHAL_NUM_DBREAK 203test dbreak_exact 204 dbreak_test 0, 0x4000003f, 0xd000007f, 0xd000007f, l8ui 205 dbreak_test 1, 0x4000003e, 0xd000007e, 0xd000007e, l16ui 206 dbreak_test 0, 0x4000003c, 0xd000007c, 0xd000007c, l32i 207 208 dbreak_test 1, 0x8000003f, 0xd000007f, 0xd000007f, s8i 209 dbreak_test 0, 0x8000003e, 0xd000007e, 0xd000007e, s16i 210 dbreak_test 1, 0x8000003c, 0xd000007c, 0xd000007c, s32i 211test_end 212 213test dbreak_overlap 214 dbreak_test 0, 0x4000003f, 0xd000007d, 0xd000007c, l16ui 215 dbreak_test 1, 0x4000003f, 0xd000007d, 0xd000007c, l32i 216 217 dbreak_test 0, 0x4000003e, 0xd000007e, 0xd000007f, l8ui 218 dbreak_test 1, 0x4000003e, 0xd000007e, 0xd000007c, l32i 219 220 dbreak_test 0, 0x4000003c, 0xd000007c, 0xd000007d, l8ui 221 dbreak_test 1, 0x4000003c, 0xd000007c, 0xd000007c, l16ui 222 223 dbreak_test 0, 0x40000038, 0xd0000078, 0xd000007b, l8ui 224 dbreak_test 1, 0x40000038, 0xd0000078, 0xd000007a, l16ui 225 dbreak_test 0, 0x40000038, 0xd0000078, 0xd000007c, l32i 226 227 dbreak_test 1, 0x40000030, 0xd0000070, 0xd0000075, l8ui 228 dbreak_test 0, 0x40000030, 0xd0000070, 0xd0000076, l16ui 229 dbreak_test 1, 0x40000030, 0xd0000070, 0xd0000078, l32i 230 231 dbreak_test 0, 0x40000020, 0xd0000060, 0xd000006f, l8ui 232 dbreak_test 1, 0x40000020, 0xd0000060, 0xd0000070, l16ui 233 dbreak_test 0, 0x40000020, 0xd0000060, 0xd0000074, l32i 234 235 236 dbreak_test 0, 0x8000003f, 0xd000007d, 0xd000007c, s16i 237 dbreak_test 1, 0x8000003f, 0xd000007d, 0xd000007c, s32i 238 239 dbreak_test 0, 0x8000003e, 0xd000007e, 0xd000007f, s8i 240 dbreak_test 1, 0x8000003e, 0xd000007e, 0xd000007c, s32i 241 242 dbreak_test 0, 0x8000003c, 0xd000007c, 0xd000007d, s8i 243 dbreak_test 1, 0x8000003c, 0xd000007c, 0xd000007c, s16i 244 245 dbreak_test 0, 0x80000038, 0xd0000078, 0xd000007b, s8i 246 dbreak_test 1, 0x80000038, 0xd0000078, 0xd000007a, s16i 247 dbreak_test 0, 0x80000038, 0xd0000078, 0xd000007c, s32i 248 249 dbreak_test 1, 0x80000030, 0xd0000070, 0xd0000075, s8i 250 dbreak_test 0, 0x80000030, 0xd0000070, 0xd0000076, s16i 251 dbreak_test 1, 0x80000030, 0xd0000070, 0xd0000078, s32i 252 253 dbreak_test 0, 0x80000020, 0xd0000060, 0xd000006f, s8i 254 dbreak_test 1, 0x80000020, 0xd0000060, 0xd0000070, s16i 255 dbreak_test 0, 0x80000020, 0xd0000060, 0xd0000074, s32i 256test_end 257 258test dbreak_invalid 259 dbreak_test 0, 0x40000030, 0xd0000071, 0xd0000070, l16ui 260 dbreak_test 1, 0x40000035, 0xd0000072, 0xd0000070, l32i 261test_end 262#endif 263 264#endif 265 266test_suite_end 267