xref: /netbsd-src/external/gpl3/gdb/dist/sim/testsuite/bfin/c_interr_pending.S (revision 4b169a6ba595ae283ca507b26b15fdff40495b1c)
1//Original:/proj/frio/dv/testcases/core/c_interr_pending/c_interr_pending.dsp
2// Spec Reference: CLI STI interrupt on HW TIMER to disable interrupt
3# mach: bfin
4# sim: --environment operating
5
6#include "test.h"
7.include "testutils.inc"
8start
9
10//
11// Include Files
12//
13
14include(std.inc)
15include(selfcheck.inc)
16
17// Defines
18
19#ifndef TCNTL
20#define TCNTL            0xFFE03000
21#endif
22#ifndef TPERIOD
23#define TPERIOD          0xFFE03004
24#endif
25#ifndef TSCALE
26#define TSCALE           0xFFE03008
27#endif
28#ifndef TCOUNT
29#define TCOUNT           0xFFE0300c
30#endif
31#ifndef EVT
32#define EVT              0xFFE02000
33#endif
34#ifndef EVT15
35#define EVT15            0xFFE0203c
36#endif
37#ifndef EVT_OVERRIDE
38#define EVT_OVERRIDE     0xFFE02100
39#endif
40#ifndef ITABLE
41#define ITABLE           0x000FF000
42#endif
43#ifndef PROGRAM_STACK
44#define PROGRAM_STACK    0x000FF100
45#endif
46#ifndef STACKSIZE
47#define STACKSIZE        0x00000300
48#endif
49
50// Boot code
51
52 BOOT :
53INIT_R_REGS(0);                             // Initialize Dregs
54INIT_P_REGS(0);                             // Initialize Pregs
55
56     // CHECK_INIT(p5,   0x00BFFFFC);
57     // CHECK_INIT(p5,   0xE0000000);
58include(symtable.inc)
59CHECK_INIT_DEF(p5);
60
61LD32(sp, 0x000FF200);
62LD32(p0, EVT);              // Setup Event Vectors and Handlers
63
64LD32_LABEL(r0, EHANDLE);    // Emulation Handler (Int0)
65        [ P0 ++ ] = R0;
66
67LD32_LABEL(r0, RHANDLE);    // Reset Handler (Int1)
68        [ P0 ++ ] = R0;
69
70LD32_LABEL(r0, NHANDLE);    // NMI Handler (Int2)
71        [ P0 ++ ] = R0;
72
73LD32_LABEL(r0, XHANDLE);    // Exception Handler (Int3)
74        [ P0 ++ ] = R0;
75
76        [ P0 ++ ] = R0;                // IVT4 not used
77
78LD32_LABEL(r0, HWHANDLE);   // HW Error Handler (Int5)
79        [ P0 ++ ] = R0;
80
81LD32_LABEL(r0, THANDLE);    // Timer Handler (Int6)
82        [ P0 ++ ] = R0;
83
84LD32_LABEL(r0, I7HANDLE);   // IVG7 Handler
85        [ P0 ++ ] = R0;
86
87LD32_LABEL(r0, I8HANDLE);   // IVG8 Handler
88        [ P0 ++ ] = R0;
89
90LD32_LABEL(r0, I9HANDLE);   // IVG9 Handler
91        [ P0 ++ ] = R0;
92
93LD32_LABEL(r0, I10HANDLE);  // IVG10 Handler
94        [ P0 ++ ] = R0;
95
96LD32_LABEL(r0, I11HANDLE);  // IVG11 Handler
97        [ P0 ++ ] = R0;
98
99LD32_LABEL(r0, I12HANDLE);  // IVG12 Handler
100        [ P0 ++ ] = R0;
101
102LD32_LABEL(r0, I13HANDLE);  // IVG13 Handler
103        [ P0 ++ ] = R0;
104
105LD32_LABEL(r0, I14HANDLE);  // IVG14 Handler
106        [ P0 ++ ] = R0;
107
108LD32_LABEL(r0, I15HANDLE);  // IVG15 Handler
109        [ P0 ++ ] = R0;
110
111LD32(p0, EVT_OVERRIDE);
112        R0 = 0;
113        [ P0 ++ ] = R0;
114        R0 = -1;     // Change this to mask interrupts (*)
115        [ P0 ] = R0;   // IMASK
116
117LD32_LABEL(p1, START);
118
119LD32(p0, EVT15);
120        [ P0 ] = P1;   // IVG15 (General) handler (Int 15) load with start
121CSYNC;
122RAISE 15;    // after we RTI, INT 15 should be taken
123
124LD32_LABEL(r7, START);
125RETI = r7;
126NOP;        // Workaround for Bug 217
127RTI;
128NOP;
129NOP;
130NOP;
131NOP;
132NOP;
133NOP;
134NOP;
135NOP;
136DUMMY:
137	  NOP;
138NOP;
139NOP;
140NOP;
141NOP;
142NOP;
143NOP;
144NOP;
145NOP;
146NOP;
147
148//.code 0x200
149 START :
150        P1 = 0x0;
151        R7 = 0x0;
152        R6 = 0x1;
153        [ -- SP ] = RETI;        // Enable Nested Interrupts
154
155CLI R1;                                           // stop interrupt
156WR_MMR(TCNTL,   0x00000001, p0, r0);        // Turn ON TMPWR (active state)
157WR_MMR(TPERIOD, 0x00000050, p0, r0);
158WR_MMR(TCOUNT,  0x00000013, p0, r0);
159WR_MMR(TSCALE,  0x00000000, p0, r0);
160CSYNC;
161        // Read the contents of the Timer
162
163RD_MMR(TPERIOD, p0, r2);
164CHECKREG(r2,    0x00000050);
165
166//      RD_MMR(TCOUNT, p0, r3);
167//      CHECKREG(r3, 0x00000013);// fsim -ro useChecker=regtrace -seed 8b8db910
168
169
170WR_MMR(TCNTL,   0x00000003, p0, r0);        // enable Timer (TMPWR, TMREN)
171CSYNC;
172
173RD_MMR(TPERIOD, p0, r4);
174CHECKREG(r4,    0x00000050);
175
176//      RD_MMR(TCNTL, p0, r5);
177//      CHECKREG(r5,    0x0000000B);                // INTERRUPT did happen
178
179WR_MMR(TCNTL,   0x00000000, p0, r0);        // Turn OFF Timer
180CSYNC;
181NOP;
182WR_MMR(TCNTL,   0x00000001, p0, r0);        // Turn ON Timer Power
183WR_MMR(TPERIOD, 0x00000015, p0, r0);
184WR_MMR(TCOUNT,  0x00000013, p0, r0);
185WR_MMR(TSCALE,  0x00000002, p0, r0);
186WR_MMR(TCNTL,   0x00000007, p0, r0);        // Turn ON Timer (TAUTORLD=1)
187CSYNC;
188NOP;
189NOP;
190NOP;
191NOP;
192NOP;
193NOP;
194NOP;
195NOP;
196NOP;
197NOP;
198NOP;
199NOP;
200NOP;
201NOP;
202NOP;
203JUMP.S label4;
204        R4.L = 0x1111;                             // Will be killed
205        R4.H = 0x1111;                             // Will be killed
206NOP;
207NOP;
208NOP;
209label5: R5.H = 0x7777;
210        R5.L = 0x7888;
211JUMP.S label6;
212        R5.L = 0x1111;                             // Will be killed
213        R5.H = 0x1111;                             // Will be killed
214NOP;
215NOP;
216NOP;
217NOP;
218NOP;
219NOP;
220label4: R4.H = 0x5555;
221        R4.L = 0x6666;
222NOP;
223JUMP.S label5;
224        R5.L = 0x2222;     // Will be killed
225        R5.H = 0x2222;     // Will be killed
226NOP;
227NOP;
228NOP;
229NOP;
230label6: R3.H = 0x7999;
231        R3.L = 0x7aaa;
232NOP;
233NOP;
234NOP;
235NOP;
236NOP;
237NOP;
238NOP;
239                                                    // With auto reload
240        // Read the contents of the Timer
241RAISE 7;
242RD_MMR(TPERIOD, p0, r2);
243CHECKREG(r2,    0x00000015);
244
245CHECKREG(p1,    0x00000000);    // no interrupt being serviced
246CHECKREG(r7,    0x00000000);    // no interrupt being serviced
247WR_MMR(TCNTL,   0x00000000, p0, r0);        // Turn OFF Timer
248CSYNC;
249STI R1;
250NOP; NOP; NOP;
251CHECKREG(r7,    0x00000001);    // interrupt being serviced
252CHECKREG(p1,    0x00000001);    // interrupt being serviced
253NOP;
254
255
256
257
258
259dbg_pass;        // Call Endtest Macro
260
261
262
263//*********************************************************************
264//
265// Handlers for Events
266//
267//.code ITABLE
268
269EHANDLE:            // Emulation Handler 0
270RTE;
271
272RHANDLE:            // Reset Handler 1
273RTI;
274
275NHANDLE:            // NMI Handler 2
276RTN;
277
278XHANDLE:            // Exception Handler 3
279RTX;
280
281HWHANDLE:           // HW Error Handler 5
282RTI;
283
284THANDLE:            // Timer Handler 6
285        R7 = R7 + R6;
286RTI;
287
288I7HANDLE:           // IVG 7 Handler
289        P1 += 1;
290
291RTI;
292
293I8HANDLE:           // IVG 8 Handler
294RTI;
295
296I9HANDLE:           // IVG 9 Handler
297RTI;
298
299I10HANDLE:          // IVG 10 Handler
300RTI;
301
302I11HANDLE:          // IVG 11 Handler
303RTI;
304
305I12HANDLE:          // IVG 12 Handler
306RTI;
307
308I13HANDLE:          // IVG 13 Handler
309RTI;
310
311I14HANDLE:          // IVG 14 Handler
312RTI;
313
314I15HANDLE:          // IVG 15 Handler
315        R5 = RETI;
316        P0 = R5;
317JUMP ( P0 );
318RTI;
319
320.section MEM_DATA_ADDR_1,"aw"
321
322.space (STACKSIZE);
323STACK:
324NOP;NOP;NOP;NOP;NOP;NOP;NOP; // needed for icache bug
325