1a2e67072SMax Filippov#include "macros.inc" 2c09015ddSAnthony Liguori 3*9c988226SMax Filippov#define LSBIT(v) ((v) & -(v)) 4*9c988226SMax Filippov 5*9c988226SMax Filippov#define LEVEL_MASK(x) glue3(XCHAL_INTLEVEL, x, _MASK) 6*9c988226SMax Filippov#define LEVEL_SOFT_MASK(x) (LEVEL_MASK(x) & XCHAL_INTTYPE_MASK_SOFTWARE) 7*9c988226SMax Filippov 8*9c988226SMax Filippov#define L1_SOFT_MASK LEVEL_SOFT_MASK(1) 9*9c988226SMax Filippov#define L1_SOFT LSBIT(L1_SOFT_MASK) 10*9c988226SMax Filippov 11*9c988226SMax Filippov#if LEVEL_SOFT_MASK(2) 12*9c988226SMax Filippov#define HIGH_LEVEL_SOFT_MASK LEVEL_SOFT_MASK(2) 13*9c988226SMax Filippov#elif LEVEL_SOFT_MASK(3) 14*9c988226SMax Filippov#define HIGH_LEVEL_SOFT_MASK LEVEL_SOFT_MASK(3) 15*9c988226SMax Filippov#elif LEVEL_SOFT_MASK(4) 16*9c988226SMax Filippov#define HIGH_LEVEL_SOFT_MASK LEVEL_SOFT_MASK(4) 17*9c988226SMax Filippov#elif LEVEL_SOFT_MASK(5) 18*9c988226SMax Filippov#define HIGH_LEVEL_SOFT_MASK LEVEL_SOFT_MASK(5) 19*9c988226SMax Filippov#elif LEVEL_SOFT_MASK(6) 20*9c988226SMax Filippov#define HIGH_LEVEL_SOFT_MASK LEVEL_SOFT_MASK(6) 21*9c988226SMax Filippov#else 22*9c988226SMax Filippov#define HIGH_LEVEL_SOFT_MASK 0 23*9c988226SMax Filippov#endif 24*9c988226SMax Filippov 25*9c988226SMax Filippov#define HIGH_LEVEL_SOFT LSBIT(HIGH_LEVEL_SOFT_MASK) 26*9c988226SMax Filippov 27*9c988226SMax Filippov#if LEVEL_SOFT_MASK(2) 28*9c988226SMax Filippov#define HIGH_LEVEL_SOFT_LEVEL 2 29*9c988226SMax Filippov#elif LEVEL_SOFT_MASK(3) 30*9c988226SMax Filippov#define HIGH_LEVEL_SOFT_LEVEL 3 31*9c988226SMax Filippov#elif LEVEL_SOFT_MASK(4) 32*9c988226SMax Filippov#define HIGH_LEVEL_SOFT_LEVEL 4 33*9c988226SMax Filippov#elif LEVEL_SOFT_MASK(5) 34*9c988226SMax Filippov#define HIGH_LEVEL_SOFT_LEVEL 5 35*9c988226SMax Filippov#elif LEVEL_SOFT_MASK(6) 36*9c988226SMax Filippov#define HIGH_LEVEL_SOFT_LEVEL 6 37*9c988226SMax Filippov#else 38*9c988226SMax Filippov#define HIGH_LEVEL_SOFT_LEVEL 0 39*9c988226SMax Filippov#endif 408b912ff0SMax Filippov 41c09015ddSAnthony Liguoritest_suite interrupt 42c09015ddSAnthony Liguori 43*9c988226SMax Filippov#if XCHAL_HAVE_INTERRUPTS 44*9c988226SMax Filippov 45c09015ddSAnthony Liguori.macro clear_interrupts 46c09015ddSAnthony Liguori movi a2, 0 47c09015ddSAnthony Liguori wsr a2, intenable 48*9c988226SMax Filippov#if XCHAL_NUM_TIMERS 49c09015ddSAnthony Liguori wsr a2, ccompare0 50*9c988226SMax Filippov#endif 51*9c988226SMax Filippov#if XCHAL_NUM_TIMERS > 1 52c09015ddSAnthony Liguori wsr a2, ccompare1 53*9c988226SMax Filippov#endif 54*9c988226SMax Filippov#if XCHAL_NUM_TIMERS > 2 55c09015ddSAnthony Liguori wsr a2, ccompare2 56*9c988226SMax Filippov#endif 57c09015ddSAnthony Liguori esync 58c09015ddSAnthony Liguori rsr a2, interrupt 59c09015ddSAnthony Liguori wsr a2, intclear 60c09015ddSAnthony Liguori 61c09015ddSAnthony Liguori esync 62c09015ddSAnthony Liguori rsr a2, interrupt 63c09015ddSAnthony Liguori assert eqi, a2, 0 64c09015ddSAnthony Liguori.endm 65c09015ddSAnthony Liguori 66c09015ddSAnthony Liguori.macro check_l1 67c09015ddSAnthony Liguori rsr a2, ps 68c09015ddSAnthony Liguori movi a3, 0x1f /* EXCM | INTMASK */ 69c09015ddSAnthony Liguori and a2, a2, a3 70c09015ddSAnthony Liguori assert eqi, a2, 0x10 /* only EXCM is set for level-1 interrupt */ 71c09015ddSAnthony Liguori rsr a2, exccause 72c09015ddSAnthony Liguori assert eqi, a2, 4 73c09015ddSAnthony Liguori.endm 74c09015ddSAnthony Liguori 75c09015ddSAnthony Liguoritest rsil 76c09015ddSAnthony Liguori clear_interrupts 77c09015ddSAnthony Liguori 78c09015ddSAnthony Liguori rsr a2, ps 79c09015ddSAnthony Liguori rsil a3, 7 80c09015ddSAnthony Liguori rsr a4, ps 81c09015ddSAnthony Liguori assert eq, a2, a3 82c09015ddSAnthony Liguori movi a2, 0xf 83c09015ddSAnthony Liguori and a2, a4, a2 84c09015ddSAnthony Liguori assert eqi, a2, 7 85c09015ddSAnthony Liguori xor a3, a3, a4 86c09015ddSAnthony Liguori movi a2, 0xfffffff0 87c09015ddSAnthony Liguori and a2, a3, a2 88c09015ddSAnthony Liguori assert eqi, a2, 0 89c09015ddSAnthony Liguoritest_end 90c09015ddSAnthony Liguori 91*9c988226SMax Filippov#if L1_SOFT 92c09015ddSAnthony Liguoritest soft_disabled 93c09015ddSAnthony Liguori set_vector kernel, 1f 94c09015ddSAnthony Liguori clear_interrupts 95c09015ddSAnthony Liguori 96*9c988226SMax Filippov movi a2, L1_SOFT 97c09015ddSAnthony Liguori wsr a2, intset 98c09015ddSAnthony Liguori esync 99c09015ddSAnthony Liguori rsr a3, interrupt 1008b912ff0SMax Filippov movi a4, ~XCHAL_INTTYPE_MASK_TIMER 1018b912ff0SMax Filippov and a3, a3, a4 102c09015ddSAnthony Liguori assert eq, a2, a3 103c09015ddSAnthony Liguori wsr a2, intclear 104c09015ddSAnthony Liguori esync 105c09015ddSAnthony Liguori rsr a3, interrupt 1068b912ff0SMax Filippov and a3, a3, a4 107c09015ddSAnthony Liguori assert eqi, a3, 0 108c09015ddSAnthony Liguori j 2f 109c09015ddSAnthony Liguori1: 110c09015ddSAnthony Liguori test_fail 111c09015ddSAnthony Liguori2: 112c09015ddSAnthony Liguoritest_end 113c09015ddSAnthony Liguori 114c09015ddSAnthony Liguoritest soft_intenable 115c09015ddSAnthony Liguori set_vector kernel, 1f 116c09015ddSAnthony Liguori clear_interrupts 117c09015ddSAnthony Liguori 118*9c988226SMax Filippov movi a2, L1_SOFT 119c09015ddSAnthony Liguori wsr a2, intset 120c09015ddSAnthony Liguori esync 121c09015ddSAnthony Liguori rsr a3, interrupt 1228b912ff0SMax Filippov movi a4, ~XCHAL_INTTYPE_MASK_TIMER 1238b912ff0SMax Filippov and a3, a3, a4 124c09015ddSAnthony Liguori assert eq, a2, a3 125c09015ddSAnthony Liguori rsil a3, 0 126c09015ddSAnthony Liguori wsr a2, intenable 127c09015ddSAnthony Liguori esync 128c09015ddSAnthony Liguori test_fail 129c09015ddSAnthony Liguori1: 130c09015ddSAnthony Liguori check_l1 131c09015ddSAnthony Liguoritest_end 132c09015ddSAnthony Liguori 133c09015ddSAnthony Liguoritest soft_rsil 134c09015ddSAnthony Liguori set_vector kernel, 1f 135c09015ddSAnthony Liguori clear_interrupts 136c09015ddSAnthony Liguori 137*9c988226SMax Filippov movi a2, L1_SOFT 138c09015ddSAnthony Liguori wsr a2, intset 139c09015ddSAnthony Liguori esync 140c09015ddSAnthony Liguori rsr a3, interrupt 1418b912ff0SMax Filippov movi a4, ~XCHAL_INTTYPE_MASK_TIMER 1428b912ff0SMax Filippov and a3, a3, a4 143c09015ddSAnthony Liguori assert eq, a2, a3 144c09015ddSAnthony Liguori wsr a2, intenable 145c09015ddSAnthony Liguori rsil a3, 0 146c09015ddSAnthony Liguori esync 147c09015ddSAnthony Liguori test_fail 148c09015ddSAnthony Liguori1: 149c09015ddSAnthony Liguori check_l1 150c09015ddSAnthony Liguoritest_end 151c09015ddSAnthony Liguori 152c09015ddSAnthony Liguoritest soft_waiti 153c09015ddSAnthony Liguori set_vector kernel, 1f 154c09015ddSAnthony Liguori clear_interrupts 155c09015ddSAnthony Liguori 156*9c988226SMax Filippov movi a2, L1_SOFT 157c09015ddSAnthony Liguori wsr a2, intset 158c09015ddSAnthony Liguori esync 159c09015ddSAnthony Liguori rsr a3, interrupt 1608b912ff0SMax Filippov movi a4, ~XCHAL_INTTYPE_MASK_TIMER 1618b912ff0SMax Filippov and a3, a3, a4 162c09015ddSAnthony Liguori assert eq, a2, a3 163c09015ddSAnthony Liguori wsr a2, intenable 164c09015ddSAnthony Liguori waiti 0 165c09015ddSAnthony Liguori test_fail 166c09015ddSAnthony Liguori1: 167c09015ddSAnthony Liguori check_l1 168c09015ddSAnthony Liguoritest_end 169c09015ddSAnthony Liguori 170c09015ddSAnthony Liguoritest soft_user 171c09015ddSAnthony Liguori set_vector kernel, 1f 172c09015ddSAnthony Liguori set_vector user, 2f 173c09015ddSAnthony Liguori clear_interrupts 174c09015ddSAnthony Liguori 175*9c988226SMax Filippov movi a2, L1_SOFT 176c09015ddSAnthony Liguori wsr a2, intset 177c09015ddSAnthony Liguori esync 178c09015ddSAnthony Liguori rsr a3, interrupt 1798b912ff0SMax Filippov movi a4, ~XCHAL_INTTYPE_MASK_TIMER 1808b912ff0SMax Filippov and a3, a3, a4 181c09015ddSAnthony Liguori assert eq, a2, a3 182c09015ddSAnthony Liguori wsr a2, intenable 183c09015ddSAnthony Liguori 184c09015ddSAnthony Liguori rsr a2, ps 185c09015ddSAnthony Liguori movi a3, 0x20 186c09015ddSAnthony Liguori or a2, a2, a3 187c09015ddSAnthony Liguori wsr a2, ps 188c09015ddSAnthony Liguori waiti 0 189c09015ddSAnthony Liguori1: 190c09015ddSAnthony Liguori test_fail 191c09015ddSAnthony Liguori2: 192c09015ddSAnthony Liguori check_l1 193c09015ddSAnthony Liguoritest_end 194c09015ddSAnthony Liguori 195*9c988226SMax Filippov#if HIGH_LEVEL_SOFT 196c09015ddSAnthony Liguoritest soft_priority 197c09015ddSAnthony Liguori set_vector kernel, 1f 198*9c988226SMax Filippov set_vector glue(level, HIGH_LEVEL_SOFT_LEVEL), 2f 199c09015ddSAnthony Liguori clear_interrupts 200c09015ddSAnthony Liguori 201*9c988226SMax Filippov movi a2, L1_SOFT | HIGH_LEVEL_SOFT 202c09015ddSAnthony Liguori wsr a2, intenable 203c09015ddSAnthony Liguori rsil a3, 0 204c09015ddSAnthony Liguori esync 205c09015ddSAnthony Liguori wsr a2, intset 206c09015ddSAnthony Liguori esync 207c09015ddSAnthony Liguori1: 208c09015ddSAnthony Liguori test_fail 209c09015ddSAnthony Liguori2: 210c09015ddSAnthony Liguori rsr a2, ps 211c09015ddSAnthony Liguori movi a3, 0x1f /* EXCM | INTMASK */ 212c09015ddSAnthony Liguori and a2, a2, a3 213*9c988226SMax Filippov movi a3, 0x10 | HIGH_LEVEL_SOFT_LEVEL 214c09015ddSAnthony Liguori assert eq, a2, a3 /* EXCM and INTMASK are set 215c09015ddSAnthony Liguori for high-priority interrupt */ 216c09015ddSAnthony Liguoritest_end 217*9c988226SMax Filippov#endif 218*9c988226SMax Filippov#endif 219c09015ddSAnthony Liguori 220*9c988226SMax Filippov#if HIGH_LEVEL_SOFT 221c09015ddSAnthony Liguoritest eps_epc_rfi 222*9c988226SMax Filippov set_vector glue(level, HIGH_LEVEL_SOFT_LEVEL), 3f 223c09015ddSAnthony Liguori clear_interrupts 224c09015ddSAnthony Liguori reset_ps 225c09015ddSAnthony Liguori 226*9c988226SMax Filippov movi a2, L1_SOFT_MASK | HIGH_LEVEL_SOFT_MASK 227c09015ddSAnthony Liguori wsr a2, intenable 228c09015ddSAnthony Liguori rsil a3, 0 229c09015ddSAnthony Liguori rsr a3, ps 230c09015ddSAnthony Liguori esync 231c09015ddSAnthony Liguori wsr a2, intset 232c09015ddSAnthony Liguori1: 233c09015ddSAnthony Liguori esync 234c09015ddSAnthony Liguori2: 235c09015ddSAnthony Liguori test_fail 236c09015ddSAnthony Liguori3: 237*9c988226SMax Filippov rsr a2, glue(eps, HIGH_LEVEL_SOFT_LEVEL) 238c09015ddSAnthony Liguori assert eq, a2, a3 239*9c988226SMax Filippov rsr a2, glue(epc, HIGH_LEVEL_SOFT_LEVEL) 240c09015ddSAnthony Liguori movi a3, 1b 241c09015ddSAnthony Liguori assert ge, a2, a3 242c09015ddSAnthony Liguori movi a3, 2b 243c09015ddSAnthony Liguori assert ge, a3, a2 244c09015ddSAnthony Liguori movi a2, 4f 245*9c988226SMax Filippov wsr a2, glue(epc, HIGH_LEVEL_SOFT_LEVEL) 246*9c988226SMax Filippov movi a2, 0x40000 | HIGH_LEVEL_SOFT_LEVEL 247*9c988226SMax Filippov wsr a2, glue(eps, HIGH_LEVEL_SOFT_LEVEL) 248*9c988226SMax Filippov rfi HIGH_LEVEL_SOFT_LEVEL 249c09015ddSAnthony Liguori test_fail 250c09015ddSAnthony Liguori4: 251c09015ddSAnthony Liguori rsr a2, ps 252*9c988226SMax Filippov movi a3, 0x40000 | HIGH_LEVEL_SOFT_LEVEL 253c09015ddSAnthony Liguori assert eq, a2, a3 254c09015ddSAnthony Liguoritest_end 255*9c988226SMax Filippov#endif 256*9c988226SMax Filippov 257*9c988226SMax Filippov#endif 258c09015ddSAnthony Liguori 259c09015ddSAnthony Liguoritest_suite_end 260