1 # Blackfin testcase for the CEC
3 # sim: --environment operating
5 .include "testutils.inc"
16 CLI R1; // inhibit events during MMR writes
18 loadsym sp, USTACK; // setup the user stack pointer
19 usp = sp; // and frame pointer
21 loadsym sp, KSTACK; // setup the stack pointer
22 fp = sp; // and frame pointer
25 loadsym r0, EHANDLE; // Emulation Handler (Int0)
28 loadsym r0, RHANDLE; // Reset Handler (Int1)
31 loadsym r0, NHANDLE; // NMI Handler (Int2)
34 loadsym r0, XHANDLE; // Exception Handler (Int3)
37 [p0++] = r0; // EVT4 not used global Interr Enable (INT4)
39 loadsym r0, HWHANDLE; // HW Error Handler (Int5)
42 loadsym r0, THANDLE; // Timer Handler (Int6)
45 loadsym r0, I7HANDLE; // IVG7 Handler
48 loadsym r0, I8HANDLE; // IVG8 Handler
51 loadsym r0, I9HANDLE; // IVG9 Handler
54 loadsym r0, I10HANDLE;// IVG10 Handler
57 loadsym r0, I11HANDLE;// IVG11 Handler
60 loadsym r0, I12HANDLE;// IVG12 Handler
63 loadsym r0, I13HANDLE;// IVG13 Handler
66 loadsym r0, I14HANDLE;// IVG14 Handler
69 loadsym r0, I15HANDLE;// IVG15 Handler
72 imm32 p0, 0xFFE02100 // EVT_OVERRIDE
76 r1 = -1; // Change this to mask interrupts (*)
77 csync; // wait for MMR writes to finish
78 sti r1; // sync and reenable events (implicit write to IMASK)
82 // ckeck that sti allows the lower 5 bits of imask to be written
89 LT0 = r0; // set loop counters to something deterministic
96 ASTAT = r0; // reset other internal regs
98 RETS = r0; // prevent X's breaking LINK instruction
100 // The following code sets up the test for running in USER mode
102 loadsym r0, STARTUSER;// One gets to user mode by doing a
103 // ReturnFromInterrupt (RTI)
104 RETI = r0; // We need to load the return address
106 // Comment the following line for a USER Mode test
108 JUMP STARTSUP; // jump to code start for SUPERVISOR mode
115 imm32 p0, (0xFFE02000 + 4 * 15);
117 CLI R1; // inhibit events during write to MMR
118 [p0] = p1; // IVG15 (General) handler (Int 15) load with start
119 csync; // wait for it
120 sti r1; // reenable events with proper imask
122 RAISE 15; // after we RTI, INT 15 should be taken
130 LINK 0; // change for how much stack frame space you need.
134 // *********************************************************************
138 // COMMENT the following line for USER MODE tests
139 [--sp] = RETI; // enable interrupts in supervisor mode
141 // **** YOUR CODE GOES HERE ****
143 // wrt-rd EVT0: 0 bits, rw=0 = 0xFFE02000
144 imm32 p0, 0xFFE02000;
148 // wrt-rd EVT1: 32 bits, rw=0 = 0xFFE02004
149 imm32 p0, 0xFFE02004;
153 // wrt-rd EVT2 = 0xFFE02008
158 // wrt-rd EVT3 = 0xFFE0200C
163 // wrt-rd EVT4 = 0xFFE02010
168 // wrt-rd EVT5 = 0xFFE02014
173 // wrt-rd EVT6 = 0xFFE02018
178 // wrt-rd EVT7 = 0xFFE0201C
183 // wrt-rd EVT8 = 0xFFE02020
188 // wrt-rd EVT9 = 0xFFE02024
193 // wrt-rd EVT10 = 0xFFE02028
198 // wrt-rd EVT11 = 0xFFE0202C
203 // wrt-rd EVT12 = 0xFFE02030
208 // wrt-rd EVT13 = 0xFFE02034
213 // wrt-rd EVT14 = 0xFFE02038
218 // wrt-rd EVT15 = 0xFFE0203C
223 // wrt-rd EVT_OVERRIDE:9 bits = 0xFFE02100
228 // wrt-rd IMASK: 16 bits = 0xFFE02104
233 // wrt-rd IPEND: 16 bits, rw=0 = 0xFFE02108
240 // wrt-rd ILAT: 16 bits, rw=0 = 0xFFE0210C
257 CHECKREG r2, 0xE1DE5D1C;
261 CHECKREG r3, 0x9CC20332;
269 imm32 p0, 0xFFE02020 /* EVT8 */
271 CHECKREG r0, 0x00000000;
272 //CHECKREG(r1, 0x00000000); /// mismatch = 00
273 CHECKREG r2, 0xE1DE5D1C;
274 CHECKREG r3, 0x9CC20332;
275 CHECKREG r4, 0x55552345;
276 CHECKREG r5, 0x66663456;
277 CHECKREG r6, 0x77774567;
278 CHECKREG r7, 0x88885678;
280 imm32 p0, 0xFFE02024 /* EVT9 */
282 imm32 p0, 0xFFE02028 /* EVT10 */
284 imm32 p0, 0xFFE0202C /* EVT11 */
286 imm32 p0, 0xFFE02030 /* EVT12 */
288 imm32 p0, 0xFFE02034 /* EVT13 */
290 imm32 p0, 0xFFE02038 /* EVT14 */
292 imm32 p0, 0xFFE0203C /* EVT15 */
294 CHECKREG r0, 0x99996789;
295 CHECKREG r1, 0xaaaa1234;
296 CHECKREG r2, 0xBBBBABC6;
297 CHECKREG r3, 0xCCCCABC6;
298 CHECKREG r4, 0xDDDDABC6;
299 CHECKREG r5, 0xEEEEABC6;
300 CHECKREG r6, 0xFFFFABC6;
302 imm32 p0, 0xFFE02100 /* EVT_OVERRIDE */
304 imm32 p0, 0xFFE02104 /* IMASK */
306 imm32 p0, 0xFFE02108 /* IPEND */
308 imm32 p0, 0xFFE0210C /* ILAT */
310 CHECKREG r0, 0x000001ff;
311 CHECKREG r1, 0x00000fff; /* XXX: original had 0xfe0 ?? */
312 CHECKREG r2, 0x00008000;
313 CHECKREG r3, 0x00003000;
317 // *********************************************************************
320 // Handlers for Events
323 EHANDLE: // Emulation Handler 0
326 RHANDLE: // Reset Handler 1
329 NHANDLE: // NMI Handler 2
333 XHANDLE: // Exception Handler 3
337 HWHANDLE: // HW Error Handler 5
341 THANDLE: // Timer Handler 6
345 I7HANDLE: // IVG 7 Handler
349 I8HANDLE: // IVG 8 Handler
353 I9HANDLE: // IVG 9 Handler
357 I10HANDLE: // IVG 10 Handler
361 I11HANDLE: // IVG 11 Handler
365 I12HANDLE: // IVG 12 Handler
369 I13HANDLE: // IVG 13 Handler
373 I14HANDLE: // IVG 14 Handler
377 I15HANDLE: // IVG 15 Handler
381 nop;nop;nop;nop;nop;nop;nop; // needed for icache bug
388 // Stack Segments (Both Kernel and User)