Merge branch 'overlayfs-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszer...
[deliverable/linux.git] / arch / metag / include / asm / metag_regs.h
1 /*
2 * asm/metag_regs.h
3 *
4 * Copyright (C) 2000-2007, 2012 Imagination Technologies.
5 *
6 * This program is free software; you can redistribute it and/or modify it under
7 * the terms of the GNU General Public License version 2 as published by the
8 * Free Software Foundation.
9 *
10 * Various defines for Meta core (non memory-mapped) registers.
11 */
12
13 #ifndef _ASM_METAG_REGS_H_
14 #define _ASM_METAG_REGS_H_
15
16 /*
17 * CHIP Unit Identifiers and Valid/Global register number masks
18 * ------------------------------------------------------------
19 */
20 #define TXUCT_ID 0x0 /* Control unit regs */
21 #ifdef METAC_1_2
22 #define TXUCT_MASK 0xFF0FFFFF /* Valid regs 0..31 */
23 #else
24 #define TXUCT_MASK 0xFF1FFFFF /* Valid regs 0..31 */
25 #endif
26 #define TGUCT_MASK 0x00000000 /* No global regs */
27 #define TXUD0_ID 0x1 /* Data unit regs */
28 #define TXUD1_ID 0x2
29 #define TXUDX_MASK 0xFFFFFFFF /* Valid regs 0..31 */
30 #define TGUDX_MASK 0xFFFF0000 /* Global regs for base inst */
31 #define TXUDXDSP_MASK 0x0F0FFFFF /* Valid DSP regs */
32 #define TGUDXDSP_MASK 0x0E0E0000 /* Global DSP ACC regs */
33 #define TXUA0_ID 0x3 /* Address unit regs */
34 #define TXUA1_ID 0x4
35 #define TXUAX_MASK 0x0000FFFF /* Valid regs 0-15 */
36 #define TGUAX_MASK 0x0000FF00 /* Global regs 8-15 */
37 #define TXUPC_ID 0x5 /* PC registers */
38 #define TXUPC_MASK 0x00000003 /* Valid regs 0- 1 */
39 #define TGUPC_MASK 0x00000000 /* No global regs */
40 #define TXUPORT_ID 0x6 /* Ports are not registers */
41 #define TXUTR_ID 0x7
42 #define TXUTR_MASK 0x0000005F /* Valid regs 0-3,4,6 */
43 #define TGUTR_MASK 0x00000000 /* No global regs */
44 #ifdef METAC_2_1
45 #define TXUTT_ID 0x8
46 #define TXUTT_MASK 0x0000000F /* Valid regs 0-3 */
47 #define TGUTT_MASK 0x00000010 /* Global reg 4 */
48 #define TXUFP_ID 0x9 /* FPU regs */
49 #define TXUFP_MASK 0x0000FFFF /* Valid regs 0-15 */
50 #define TGUFP_MASK 0x00000000 /* No global regs */
51 #endif /* METAC_2_1 */
52
53 #ifdef METAC_1_2
54 #define TXUXX_MASKS { TXUCT_MASK, TXUDX_MASK, TXUDX_MASK, TXUAX_MASK, \
55 TXUAX_MASK, TXUPC_MASK, 0, TXUTR_MASK, \
56 0, 0, 0, 0, 0, 0, 0, 0 }
57 #define TGUXX_MASKS { TGUCT_MASK, TGUDX_MASK, TGUDX_MASK, TGUAX_MASK, \
58 TGUAX_MASK, TGUPC_MASK, 0, TGUTR_MASK, \
59 0, 0, 0, 0, 0, 0, 0, 0 }
60 #else /* METAC_1_2 */
61 #define TXUXX_MASKS { TXUCT_MASK, TXUDX_MASK, TXUDX_MASK, TXUAX_MASK, \
62 TXUAX_MASK, TXUPC_MASK, 0, TXUTR_MASK, \
63 TXUTT_MASK, TXUFP_MASK, 0, 0, \
64 0, 0, 0, 0 }
65 #define TGUXX_MASKS { TGUCT_MASK, TGUDX_MASK, TGUDX_MASK, TGUAX_MASK, \
66 TGUAX_MASK, TGUPC_MASK, 0, TGUTR_MASK, \
67 TGUTT_MASK, TGUFP_MASK, 0, 0, \
68 0, 0, 0, 0 }
69 #endif /* !METAC_1_2 */
70
71 #define TXUXXDSP_MASKS { 0, TXUDXDSP_MASK, TXUDXDSP_MASK, 0, 0, 0, 0, 0, \
72 0, 0, 0, 0, 0, 0, 0, 0 }
73 #define TGUXXDSP_MASKS { 0, TGUDXDSP_MASK, TGUDXDSP_MASK, 0, 0, 0, 0, 0, \
74 0, 0, 0, 0, 0, 0, 0, 0 }
75
76 /* -------------------------------------------------------------------------
77 ; DATA AND ADDRESS UNIT REGISTERS
78 ; -----------------------------------------------------------------------*/
79 /*
80 Thread local D0 registers
81 */
82 /* D0.0 ; Holds 32-bit result, can be used as scratch */
83 #define D0Re0 D0.0
84 /* D0.1 ; Used to pass Arg6_32 */
85 #define D0Ar6 D0.1
86 /* D0.2 ; Used to pass Arg4_32 */
87 #define D0Ar4 D0.2
88 /* D0.3 ; Used to pass Arg2_32 to a called routine (see D1.3 below) */
89 #define D0Ar2 D0.3
90 /* D0.4 ; Can be used as scratch; used to save A0FrP in entry sequences */
91 #define D0FrT D0.4
92 /* D0.5 ; C compiler assumes preservation, save with D1.5 if used */
93 /* D0.6 ; C compiler assumes preservation, save with D1.6 if used */
94 /* D0.7 ; C compiler assumes preservation, save with D1.7 if used */
95 /* D0.8 ; Use of D0.8 and above is not encouraged */
96 /* D0.9 */
97 /* D0.10 */
98 /* D0.11 */
99 /* D0.12 */
100 /* D0.13 */
101 /* D0.14 */
102 /* D0.15 */
103 /*
104 Thread local D1 registers
105 */
106 /* D1.0 ; Holds top 32-bits of 64-bit result, can be used as scratch */
107 #define D1Re0 D1.0
108 /* D1.1 ; Used to pass Arg5_32 */
109 #define D1Ar5 D1.1
110 /* D1.2 ; Used to pass Arg3_32 */
111 #define D1Ar3 D1.2
112 /* D1.3 ; Used to pass Arg1_32 (first 32-bit argument) to a called routine */
113 #define D1Ar1 D1.3
114 /* D1.4 ; Used for Return Pointer, save during entry with A0FrP (via D0.4) */
115 #define D1RtP D1.4
116 /* D1.5 ; C compiler assumes preservation, save if used */
117 /* D1.6 ; C compiler assumes preservation, save if used */
118 /* D1.7 ; C compiler assumes preservation, save if used */
119 /* D1.8 ; Use of D1.8 and above is not encouraged */
120 /* D1.9 */
121 /* D1.10 */
122 /* D1.11 */
123 /* D1.12 */
124 /* D1.13 */
125 /* D1.14 */
126 /* D1.15 */
127 /*
128 Thread local A0 registers
129 */
130 /* A0.0 ; Primary stack pointer */
131 #define A0StP A0.0
132 /* A0.1 ; Used as local frame pointer in C, save if used (via D0.4) */
133 #define A0FrP A0.1
134 /* A0.2 */
135 /* A0.3 */
136 /* A0.4 ; Use of A0.4 and above is not encouraged */
137 /* A0.5 */
138 /* A0.6 */
139 /* A0.7 */
140 /*
141 Thread local A1 registers
142 */
143 /* A1.0 ; Global static chain pointer - do not modify */
144 #define A1GbP A1.0
145 /* A1.1 ; Local static chain pointer in C, can be used as scratch */
146 #define A1LbP A1.1
147 /* A1.2 */
148 /* A1.3 */
149 /* A1.4 ; Use of A1.4 and above is not encouraged */
150 /* A1.5 */
151 /* A1.6 */
152 /* A1.7 */
153 #ifdef METAC_2_1
154 /* Renameable registers for use with Fast Interrupts */
155 /* The interrupt stack pointer (usually a global register) */
156 #define A0IStP A0IReg
157 /* The interrupt global pointer (usually a global register) */
158 #define A1IGbP A1IReg
159 #endif
160 /*
161 Further registers may be globally allocated via linkage/loading tools,
162 normally they are not used.
163 */
164 /*-------------------------------------------------------------------------
165 ; STACK STRUCTURE and CALLING CONVENTION
166 ; -----------------------------------------------------------------------*/
167 /*
168 ; Calling convention indicates that the following is the state of the
169 ; stack frame at the start of a routine-
170 ;
171 ; Arg9_32 [A0StP+#-12]
172 ; Arg8_32 [A0StP+#- 8]
173 ; Arg7_32 [A0StP+#- 4]
174 ; A0StP->
175 ;
176 ; Registers D1.3, D0.3, ..., to D0.1 are used to pass Arg1_32 to Arg6_32
177 ; respectively. If a routine needs to store them on the stack in order
178 ; to make sub-calls or because of the general complexity of the routine it
179 ; is best to dump these registers immediately at the start of a routine
180 ; using a MSETL or SETL instruction-
181 ;
182 ; MSETL [A0StP],D0Ar6,D0Ar4,D0Ar2; Only dump arguments expected
183 ;or SETL [A0StP+#8++],D0Ar2 ; Up to two 32-bit args expected
184 ;
185 ; For non-leaf routines it is always necessary to save and restore at least
186 ; the return address value D1RtP on the stack. Also by convention if the
187 ; frame is saved then a new A0FrP value must be set-up. So for non-leaf
188 ; routines at this point both these registers must be saved onto the stack
189 ; using a SETL instruction and the new A0FrP value is then set-up-
190 ;
191 ; MOV D0FrT,A0FrP
192 ; ADD A0FrP,A0StP,#0
193 ; SETL [A0StP+#8++],D0FrT,D1RtP
194 ;
195 ; Registers D0.5, D1.5, to D1.7 are assumed to be preserved across calls so
196 ; a SETL or MSETL instruction can be used to save the current state
197 ; of these registers if they are modified by the current routine-
198 ;
199 ; MSETL [A0StP],D0.5,D0.6,D0.7 ; Only save registers modified
200 ;or SETL [A0StP+#8++],D0.5 ; Only D0.5 and/or D1.5 modified
201 ;
202 ; All of the above sequences can be combined into one maximal case-
203 ;
204 ; MOV D0FrT,A0FrP ; Save and calculate new frame pointer
205 ; ADD A0FrP,A0StP,#(ARS)
206 ; MSETL [A0StP],D0Ar6,D0Ar4,D0Ar2,D0FrT,D0.5,D0.6,D0.7
207 ;
208 ; Having completed the above sequence the only remaining task on routine
209 ; entry is to reserve any local and outgoing argment storage space on the
210 ; stack. This instruction may be omitted if the size of this region is zero-
211 ;
212 ; ADD A0StP,A0StP,#(LCS)
213 ;
214 ; LCS is the first example use of one of a number of standard local defined
215 ; values that can be created to make assembler code more readable and
216 ; potentially more robust-
217 ;
218 ; #define ARS 0x18 ; Register arg bytes saved on stack
219 ; #define FRS 0x20 ; Frame save area size in bytes
220 ; #define LCS 0x00 ; Locals and Outgoing arg size
221 ; #define ARO (LCS+FRS) ; Stack offset to access args
222 ;
223 ; All of the above defines should be undefined (#undef) at the end of each
224 ; routine to avoid accidental use in the next routine.
225 ;
226 ; Given all of the above the following stack structure is expected during
227 ; the body of a routine if all args passed in registers are saved during
228 ; entry-
229 ;
230 ; ; 'Incoming args area'
231 ; Arg10_32 [A0StP+#-((10*4)+ARO)] Arg9_32 [A0StP+#-(( 9*4)+ARO)]
232 ; Arg8_32 [A0StP+#-(( 8*4)+ARO)] Arg7_32 [A0StP+#-(( 7*4)+ARO)]
233 ;--- Call point
234 ; D0Ar6= Arg6_32 [A0StP+#-(( 6*4)+ARO)] D1Ar5=Arg5_32 [A0StP+#-(( 5*4)+ARO)]
235 ; D0Ar4= Arg4_32 [A0StP+#-(( 4*4)+ARO)] D1Ar3=Arg3_32 [A0StP+#-(( 3*4)+ARO)]
236 ; D0Ar2= Arg2_32 [A0StP+#-(( 2*4)+ARO)] D1Ar2=Arg1_32 [A0StP+#-(( 1*4)+ARO)]
237 ; ; 'Frame area'
238 ; A0FrP-> D0FrT, D1RtP,
239 ; D0.5, D1.5,
240 ; D0.6, D1.6,
241 ; D0.7, D1.7,
242 ; ; 'Locals area'
243 ; Loc0_32 [A0StP+# (( 0*4)-LCS)], Loc1_32 [A0StP+# (( 1*4)-LCS)]
244 ; .... other locals
245 ; Locn_32 [A0StP+# (( n*4)-LCS)]
246 ; ; 'Outgoing args area'
247 ; Outm_32 [A0StP+#- ( m*4)] .... other outgoing args
248 ; Out8_32 [A0StP+#- ( 1*4)] Out7_32 [A0StP+#- ( 1*4)]
249 ; A0StP-> (Out1_32-Out6_32 in regs D1Ar1-D0Ar6)
250 ;
251 ; The exit sequence for a non-leaf routine can use the frame pointer created
252 ; in the entry sequence to optimise the recovery of the full state-
253 ;
254 ; MGETL D0FrT,D0.5,D0.6,D0.7,[A0FrP]
255 ; SUB A0StP,A0FrP,#(ARS+FRS)
256 ; MOV A0FrP,D0FrT
257 ; MOV PC,D1RtP
258 ;
259 ; Having described the most complex non-leaf case above, it is worth noting
260 ; that if a routine is a leaf and does not use any of the caller-preserved
261 ; state. The routine can be implemented as-
262 ;
263 ; ADD A0StP,A0StP,#LCS
264 ; .... body of routine
265 ; SUB A0StP,A0StP,#LCS
266 ; MOV PC,D1RtP
267 ;
268 ; The stack adjustments can also be omitted if no local storage is required.
269 ;
270 ; Another exit sequence structure is more applicable if for a leaf routine
271 ; with no local frame pointer saved/generated in which the call saved
272 ; registers need to be saved and restored-
273 ;
274 ; MSETL [A0StP],D0.5,D0.6,D0.7 ; Hence FRS is 0x18, ARS is 0x00
275 ; ADD A0StP,A0StP,#LCS
276 ; .... body of routine
277 ; GETL D0.5,D1.5,[A0StP+#((0*8)-(FRS+LCS))]
278 ; GETL D0.6,D1.6,[A0StP+#((1*8)-(FRS+LCS))]
279 ; GETL D0.7,D1.7,[A0StP+#((2*8)-(FRS+LCS))]
280 ; SUB A0StP,A0StP,#(ARS+FRS+LCS)
281 ; MOV PC,D1RtP
282 ;
283 ; Lastly, to support profiling assembler code should use a fixed entry/exit
284 ; sequence if the trigger define _GMON_ASM is defined-
285 ;
286 ; #ifndef _GMON_ASM
287 ; ... optimised entry code
288 ; #else
289 ; ; Profiling entry case
290 ; MOV D0FrT,A0FrP ; Save and calculate new frame pointer
291 ; ADD A0FrP,A0StP,#(ARS)
292 ; MSETL [A0StP],...,D0FrT,... or SETL [A0FrP],D0FrT,D1RtP
293 ; CALLR D0FrT,_mcount_wrapper
294 ; #endif
295 ; ... body of routine
296 ; #ifndef _GMON_ASM
297 ; ... optimised exit code
298 ; #else
299 ; ; Profiling exit case
300 ; MGETL D0FrT,...,[A0FrP] or GETL D0FrT,D1RtP,[A0FrP++]
301 ; SUB A0StP,A0FrP,#(ARS+FRS)
302 ; MOV A0FrP,D0FrT
303 ; MOV PC,D1RtP
304 ; #endif
305
306
307 ; -------------------------------------------------------------------------
308 ; CONTROL UNIT REGISTERS
309 ; -------------------------------------------------------------------------
310 ;
311 ; See the assembler guide, hardware documentation, or the field values
312 ; defined below for some details of the use of these registers.
313 */
314 #define TXENABLE CT.0 /* Need to define bit-field values in these */
315 #define TXMODE CT.1
316 #define TXSTATUS CT.2 /* DEFAULT 0x00020000 */
317 #define TXRPT CT.3
318 #define TXTIMER CT.4
319 #define TXL1START CT.5
320 #define TXL1END CT.6
321 #define TXL1COUNT CT.7
322 #define TXL2START CT.8
323 #define TXL2END CT.9
324 #define TXL2COUNT CT.10
325 #define TXBPOBITS CT.11
326 #define TXMRSIZE CT.12
327 #define TXTIMERI CT.13
328 #define TXDRCTRL CT.14 /* DEFAULT 0x0XXXF0F0 */
329 #define TXDRSIZE CT.15
330 #define TXCATCH0 CT.16
331 #define TXCATCH1 CT.17
332 #define TXCATCH2 CT.18
333 #define TXCATCH3 CT.19
334
335 #ifdef METAC_2_1
336 #define TXDEFR CT.20
337 #define TXCPRS CT.21
338 #endif
339
340 #define TXINTERN0 CT.23
341 #define TXAMAREG0 CT.24
342 #define TXAMAREG1 CT.25
343 #define TXAMAREG2 CT.26
344 #define TXAMAREG3 CT.27
345 #define TXDIVTIME CT.28 /* DEFAULT 0x00000001 */
346 #define TXPRIVEXT CT.29 /* DEFAULT 0x003B0000 */
347 #define TXTACTCYC CT.30
348 #define TXIDLECYC CT.31
349
350 /*****************************************************************************
351 * CONTROL UNIT REGISTER BITS
352 ****************************************************************************/
353 /*
354 * The following registers and where appropriate the sub-fields of those
355 * registers are defined for pervasive use in controlling program flow.
356 */
357
358 /*
359 * TXENABLE register fields - only the thread id is routinely useful
360 */
361 #define TXENABLE_REGNUM 0
362 #define TXENABLE_THREAD_BITS 0x00000700
363 #define TXENABLE_THREAD_S 8
364 #define TXENABLE_REV_STEP_BITS 0x000000F0
365 #define TXENABLE_REV_STEP_S 4
366
367 /*
368 * TXMODE register - controls extensions of the instruction set
369 */
370 #define TXMODE_REGNUM 1
371 #define TXMODE_DEFAULT 0 /* All fields default to zero */
372
373 /*
374 * TXSTATUS register - contains a couple of stable bits that can be used
375 * to determine the privilege processing level and interrupt
376 * processing level of the current thread.
377 */
378 #define TXSTATUS_REGNUM 2
379 #define TXSTATUS_PSTAT_BIT 0x00020000 /* -> Privilege active */
380 #define TXSTATUS_PSTAT_S 17
381 #define TXSTATUS_ISTAT_BIT 0x00010000 /* -> In interrupt state */
382 #define TXSTATUS_ISTAT_S 16
383
384 /*
385 * These are all relatively boring registers, mostly full 32-bit
386 */
387 #define TXRPT_REGNUM 3 /* Repeat counter for XFR... instructions */
388 #define TXTIMER_REGNUM 4 /* Timer-- causes timer trigger on overflow */
389 #define TXL1START_REGNUM 5 /* Hardware Loop 1 Start-PC/End-PC/Count */
390 #define TXL1END_REGNUM 6
391 #define TXL1COUNT_REGNUM 7
392 #define TXL2START_REGNUM 8 /* Hardware Loop 2 Start-PC/End-PC/Count */
393 #define TXL2END_REGNUM 9
394 #define TXL2COUNT_REGNUM 10
395 #define TXBPOBITS_REGNUM 11 /* Branch predict override bits - tune perf */
396 #define TXTIMERI_REGNUM 13 /* Timer-- time based interrupt trigger */
397
398 /*
399 * TXDIVTIME register is routinely read to calculate the time-base for
400 * the TXTIMER register.
401 */
402 #define TXDIVTIME_REGNUM 28
403 #define TXDIVTIME_DIV_BITS 0x000000FF
404 #define TXDIVTIME_DIV_S 0
405 #define TXDIVTIME_DIV_MIN 0x00000001 /* Maximum resolution */
406 #define TXDIVTIME_DIV_MAX 0x00000100 /* 1/1 -> 1/256 resolution */
407 #define TXDIVTIME_BASE_HZ 1000000 /* Timers run at 1Mhz @1/1 */
408
409 /*
410 * TXPRIVEXT register can be consulted to decide if write access to a
411 * part of the threads register set is not permitted when in
412 * unprivileged mode (PSTAT == 0).
413 */
414 #define TXPRIVEXT_REGNUM 29
415 #define TXPRIVEXT_COPRO_BITS 0xFF000000 /* Co-processor 0-7 */
416 #define TXPRIVEXT_COPRO_S 24
417 #ifndef METAC_1_2
418 #define TXPRIVEXT_TXTIMER_BIT 0x00080000 /* TXTIMER priv */
419 #define TXPRIVEXT_TRACE_BIT 0x00040000 /* TTEXEC|TTCTRL|GTEXEC */
420 #endif
421 #define TXPRIVEXT_TXTRIGGER_BIT 0x00020000 /* TXSTAT|TXMASK|TXPOLL */
422 #define TXPRIVEXT_TXGBLCREG_BIT 0x00010000 /* Global common regs */
423 #define TXPRIVEXT_CBPRIV_BIT 0x00008000 /* Mem i/f dump priv */
424 #define TXPRIVEXT_ILOCK_BIT 0x00004000 /* LOCK inst priv */
425 #define TXPRIVEXT_TXITACCYC_BIT 0x00002000 /* TXIDLECYC|TXTACTCYC */
426 #define TXPRIVEXT_TXDIVTIME_BIT 0x00001000 /* TXDIVTIME priv */
427 #define TXPRIVEXT_TXAMAREGX_BIT 0x00000800 /* TXAMAREGX priv */
428 #define TXPRIVEXT_TXTIMERI_BIT 0x00000400 /* TXTIMERI priv */
429 #define TXPRIVEXT_TXSTATUS_BIT 0x00000200 /* TXSTATUS priv */
430 #define TXPRIVEXT_TXDISABLE_BIT 0x00000100 /* TXENABLE priv */
431 #ifndef METAC_1_2
432 #define TXPRIVEXT_MINIMON_BIT 0x00000080 /* Enable Minim features */
433 #define TXPRIVEXT_OLDBCCON_BIT 0x00000020 /* Restore Static predictions */
434 #define TXPRIVEXT_ALIGNREW_BIT 0x00000010 /* Align & precise checks */
435 #endif
436 #define TXPRIVEXT_KEEPPRI_BIT 0x00000008 /* Use AMA_Priority if ISTAT=1*/
437 #define TXPRIVEXT_TXTOGGLEI_BIT 0x00000001 /* TX.....I priv */
438
439 /*
440 * TXTACTCYC register - counts instructions issued for this thread
441 */
442 #define TXTACTCYC_REGNUM 30
443 #define TXTACTCYC_COUNT_MASK 0x00FFFFFF
444
445 /*
446 * TXIDLECYC register - counts idle cycles
447 */
448 #define TXIDLECYC_REGNUM 31
449 #define TXIDLECYC_COUNT_MASK 0x00FFFFFF
450
451 /*****************************************************************************
452 * DSP EXTENSIONS
453 ****************************************************************************/
454 /*
455 * The following values relate to fields and controls that only a program
456 * using the DSP extensions of the META instruction set need to know.
457 */
458
459
460 #ifndef METAC_1_2
461 /*
462 * Allow co-processor hardware to replace the read pipeline data source in
463 * appropriate cases.
464 */
465 #define TXMODE_RDCPEN_BIT 0x00800000
466 #endif
467
468 /*
469 * Address unit addressing modes
470 */
471 #define TXMODE_A1ADDR_BITS 0x00007000
472 #define TXMODE_A1ADDR_S 12
473 #define TXMODE_A0ADDR_BITS 0x00000700
474 #define TXMODE_A0ADDR_S 8
475 #define TXMODE_AXADDR_MODULO 3
476 #define TXMODE_AXADDR_REVB 4
477 #define TXMODE_AXADDR_REVW 5
478 #define TXMODE_AXADDR_REVD 6
479 #define TXMODE_AXADDR_REVL 7
480
481 /*
482 * Data unit OverScale select (default 0 -> normal, 1 -> top 16 bits)
483 */
484 #define TXMODE_DXOVERSCALE_BIT 0x00000080
485
486 /*
487 * Data unit MX mode select (default 0 -> MX16, 1 -> MX8)
488 */
489 #define TXMODE_M8_BIT 0x00000040
490
491 /*
492 * Data unit accumulator saturation point (default -> 40 bit accumulator)
493 */
494 #define TXMODE_DXACCSAT_BIT 0x00000020 /* Set for 32-bit accumulator */
495
496 /*
497 * Data unit accumulator saturation enable (default 0 -> no saturation)
498 */
499 #define TXMODE_DXSAT_BIT 0x00000010
500
501 /*
502 * Data unit master rounding control (default 0 -> normal, 1 -> convergent)
503 */
504 #define TXMODE_DXROUNDING_BIT 0x00000008
505
506 /*
507 * Data unit product shift for fractional arithmetic (default off)
508 */
509 #define TXMODE_DXPRODSHIFT_BIT 0x00000004
510
511 /*
512 * Select the arithmetic mode (multiply mostly) for both data units
513 */
514 #define TXMODE_DXARITH_BITS 0x00000003
515 #define TXMODE_DXARITH_32 3
516 #define TXMODE_DXARITH_32H 2
517 #define TXMODE_DXARITH_S16 1
518 #define TXMODE_DXARITH_16 0
519
520 /*
521 * TXMRSIZE register value only relevant when DSP modulo addressing active
522 */
523 #define TXMRSIZE_REGNUM 12
524 #define TXMRSIZE_MIN 0x0002 /* 0, 1 -> normal addressing logic */
525 #define TXMRSIZE_MAX 0xFFFF
526
527 /*
528 * TXDRCTRL register can be used to detect the actaul size of the DSP RAM
529 * partitions allocated to this thread.
530 */
531 #define TXDRCTRL_REGNUM 14
532 #define TXDRCTRL_SINESIZE_BITS 0x0F000000
533 #define TXDRCTRL_SINESIZE_S 24
534 #define TXDRCTRL_RAMSZPOW_BITS 0x001F0000 /* Limit = (1<<RAMSZPOW)-1 */
535 #define TXDRCTRL_RAMSZPOW_S 16
536 #define TXDRCTRL_D1RSZAND_BITS 0x0000F000 /* Mask top 4 bits - D1 */
537 #define TXDRCTRL_D1RSZAND_S 12
538 #define TXDRCTRL_D0RSZAND_BITS 0x000000F0 /* Mask top 4 bits - D0 */
539 #define TXDRCTRL_D0RSZAND_S 4
540 /* Given extracted RAMSZPOW and DnRSZAND fields this returns the size */
541 #define TXDRCTRL_DXSIZE(Pow, AndBits) \
542 ((((~(AndBits)) & 0x0f) + 1) << ((Pow)-4))
543
544 /*
545 * TXDRSIZE register provides modulo addressing options for each DSP RAM
546 */
547 #define TXDRSIZE_REGNUM 15
548 #define TXDRSIZE_R1MOD_BITS 0xFFFF0000
549 #define TXDRSIZE_R1MOD_S 16
550 #define TXDRSIZE_R0MOD_BITS 0x0000FFFF
551 #define TXDRSIZE_R0MOD_S 0
552
553 #define TXDRSIZE_RBRAD_SCALE_BITS 0x70000000
554 #define TXDRSIZE_RBRAD_SCALE_S 28
555 #define TXDRSIZE_RBMODSIZE_BITS 0x0FFF0000
556 #define TXDRSIZE_RBMODSIZE_S 16
557 #define TXDRSIZE_RARAD_SCALE_BITS 0x00007000
558 #define TXDRSIZE_RARAD_SCALE_S 12
559 #define TXDRSIZE_RAMODSIZE_BITS 0x00000FFF
560 #define TXDRSIZE_RAMODSIZE_S 0
561
562 /*****************************************************************************
563 * DEFERRED and BUS ERROR EXTENSION
564 ****************************************************************************/
565
566 /*
567 * TXDEFR register - Deferred exception control
568 */
569 #define TXDEFR_REGNUM 20
570 #define TXDEFR_DEFAULT 0 /* All fields default to zero */
571
572 /*
573 * Bus error state is a multi-bit positive/negative event notification from
574 * the bus infrastructure.
575 */
576 #define TXDEFR_BUS_ERR_BIT 0x80000000 /* Set if error (LSB STATE) */
577 #define TXDEFR_BUS_ERRI_BIT 0x40000000 /* Fetch returned error */
578 #define TXDEFR_BUS_STATE_BITS 0x3F000000 /* Bus event/state data */
579 #define TXDEFR_BUS_STATE_S 24
580 #define TXDEFR_BUS_TRIG_BIT 0x00800000 /* Set when bus error seen */
581
582 /*
583 * Bus events are collected by background code in a deferred manner unless
584 * selected to trigger an extended interrupt HALT trigger when they occur.
585 */
586 #define TXDEFR_BUS_ICTRL_BIT 0x00000080 /* Enable interrupt trigger */
587
588 /*
589 * CHIP Automatic Mips Allocation control registers
590 * ------------------------------------------------
591 */
592
593 /* CT Bank AMA Registers */
594 #define TXAMAREG0_REGNUM 24
595 #ifdef METAC_1_2
596 #define TXAMAREG0_CTRL_BITS 0x07000000
597 #else /* METAC_1_2 */
598 #define TXAMAREG0_RCOFF_BIT 0x08000000
599 #define TXAMAREG0_DLINEHLT_BIT 0x04000000
600 #define TXAMAREG0_DLINEDIS_BIT 0x02000000
601 #define TXAMAREG0_CYCSTRICT_BIT 0x01000000
602 #define TXAMAREG0_CTRL_BITS (TXAMAREG0_RCOFF_BIT | \
603 TXAMAREG0_DLINEHLT_BIT | \
604 TXAMAREG0_DLINEDIS_BIT | \
605 TXAMAREG0_CYCSTRICT_BIT)
606 #endif /* !METAC_1_2 */
607 #define TXAMAREG0_CTRL_S 24
608 #define TXAMAREG0_MDM_BIT 0x00400000
609 #define TXAMAREG0_MPF_BIT 0x00200000
610 #define TXAMAREG0_MPE_BIT 0x00100000
611 #define TXAMAREG0_MASK_BITS (TXAMAREG0_MDM_BIT | \
612 TXAMAREG0_MPF_BIT | \
613 TXAMAREG0_MPE_BIT)
614 #define TXAMAREG0_MASK_S 20
615 #define TXAMAREG0_SDM_BIT 0x00040000
616 #define TXAMAREG0_SPF_BIT 0x00020000
617 #define TXAMAREG0_SPE_BIT 0x00010000
618 #define TXAMAREG0_STATUS_BITS (TXAMAREG0_SDM_BIT | \
619 TXAMAREG0_SPF_BIT | \
620 TXAMAREG0_SPE_BIT)
621 #define TXAMAREG0_STATUS_S 16
622 #define TXAMAREG0_PRIORITY_BITS 0x0000FF00
623 #define TXAMAREG0_PRIORITY_S 8
624 #define TXAMAREG0_BVALUE_BITS 0x000000FF
625 #define TXAMAREG0_BVALUE_S 0
626
627 #define TXAMAREG1_REGNUM 25
628 #define TXAMAREG1_DELAYC_BITS 0x07FFFFFF
629 #define TXAMAREG1_DELAYC_S 0
630
631 #define TXAMAREG2_REGNUM 26
632 #ifdef METAC_1_2
633 #define TXAMAREG2_DLINEC_BITS 0x00FFFFFF
634 #define TXAMAREG2_DLINEC_S 0
635 #else /* METAC_1_2 */
636 #define TXAMAREG2_IRQPRIORITY_BIT 0xFF000000
637 #define TXAMAREG2_IRQPRIORITY_S 24
638 #define TXAMAREG2_DLINEC_BITS 0x00FFFFF0
639 #define TXAMAREG2_DLINEC_S 4
640 #endif /* !METAC_1_2 */
641
642 #define TXAMAREG3_REGNUM 27
643 #define TXAMAREG2_AMABLOCK_BIT 0x00080000
644 #define TXAMAREG2_AMAC_BITS 0x0000FFFF
645 #define TXAMAREG2_AMAC_S 0
646
647 /*****************************************************************************
648 * FPU EXTENSIONS
649 ****************************************************************************/
650 /*
651 * The following registers only exist in FPU enabled cores.
652 */
653
654 /*
655 * TXMODE register - FPU rounding mode control/status fields
656 */
657 #define TXMODE_FPURMODE_BITS 0x00030000
658 #define TXMODE_FPURMODE_S 16
659 #define TXMODE_FPURMODEWRITE_BIT 0x00040000 /* Set to change FPURMODE */
660
661 /*
662 * TXDEFR register - FPU exception handling/state is a significant source
663 * of deferrable errors. Run-time S/W can move handling to interrupt level
664 * using DEFR instruction to collect state.
665 */
666 #define TXDEFR_FPE_FE_BITS 0x003F0000 /* Set by FPU_FE events */
667 #define TXDEFR_FPE_FE_S 16
668
669 #define TXDEFR_FPE_INEXACT_FE_BIT 0x010000
670 #define TXDEFR_FPE_UNDERFLOW_FE_BIT 0x020000
671 #define TXDEFR_FPE_OVERFLOW_FE_BIT 0x040000
672 #define TXDEFR_FPE_DIVBYZERO_FE_BIT 0x080000
673 #define TXDEFR_FPE_INVALID_FE_BIT 0x100000
674 #define TXDEFR_FPE_DENORMAL_FE_BIT 0x200000
675
676 #define TXDEFR_FPE_ICTRL_BITS 0x000003F /* Route to interrupts */
677 #define TXDEFR_FPE_ICTRL_S 0
678
679 #define TXDEFR_FPE_INEXACT_ICTRL_BIT 0x01
680 #define TXDEFR_FPE_UNDERFLOW_ICTRL_BIT 0x02
681 #define TXDEFR_FPE_OVERFLOW_ICTRL_BIT 0x04
682 #define TXDEFR_FPE_DIVBYZERO_ICTRL_BIT 0x08
683 #define TXDEFR_FPE_INVALID_ICTRL_BIT 0x10
684 #define TXDEFR_FPE_DENORMAL_ICTRL_BIT 0x20
685
686 /*
687 * DETAILED FPU RELATED VALUES
688 * ---------------------------
689 */
690
691 /*
692 * Rounding mode field in TXMODE can hold a number of logical values
693 */
694 #define METAG_FPURMODE_TONEAREST 0x0 /* Default */
695 #define METAG_FPURMODE_TOWARDZERO 0x1
696 #define METAG_FPURMODE_UPWARD 0x2
697 #define METAG_FPURMODE_DOWNWARD 0x3
698
699 /*
700 * In order to set the TXMODE register field that controls the rounding mode
701 * an extra bit must be set in the value written versus that read in order
702 * to gate writes to the rounding mode field. This allows other non-FPU code
703 * to modify TXMODE without knowledge of the FPU units presence and not
704 * influence the FPU rounding mode. This macro adds the required bit so new
705 * rounding modes are accepted.
706 */
707 #define TXMODE_FPURMODE_SET(FPURMode) \
708 (TXMODE_FPURMODEWRITE_BIT + ((FPURMode)<<TXMODE_FPURMODE_S))
709
710 /*
711 * To successfully restore TXMODE to zero at the end of the function the
712 * following value (rather than zero) must be used.
713 */
714 #define TXMODE_FPURMODE_RESET (TXMODE_FPURMODEWRITE_BIT)
715
716 /*
717 * In TXSTATUS a special bit exists to indicate if FPU H/W has been accessed
718 * since it was last reset.
719 */
720 #define TXSTATUS_FPACTIVE_BIT 0x01000000
721
722 /*
723 * Exception state (see TXDEFR_FPU_FE_*) and enabling (for interrupt
724 * level processing (see TXDEFR_FPU_ICTRL_*) are controlled by similar
725 * bit mask locations within each field.
726 */
727 #define METAG_FPU_FE_INEXACT 0x01
728 #define METAG_FPU_FE_UNDERFLOW 0x02
729 #define METAG_FPU_FE_OVERFLOW 0x04
730 #define METAG_FPU_FE_DIVBYZERO 0x08
731 #define METAG_FPU_FE_INVALID 0x10
732 #define METAG_FPU_FE_DENORMAL 0x20
733 #define METAG_FPU_FE_ALL_EXCEPT (METAG_FPU_FE_INEXACT | \
734 METAG_FPU_FE_UNDERFLOW | \
735 METAG_FPU_FE_OVERFLOW | \
736 METAG_FPU_FE_DIVBYZERO | \
737 METAG_FPU_FE_INVALID | \
738 METAG_FPU_FE_DENORMAL)
739
740 /*****************************************************************************
741 * THREAD CONTROL, ERROR, OR INTERRUPT STATE EXTENSIONS
742 ****************************************************************************/
743 /*
744 * The following values are only relevant to code that externally controls
745 * threads, handles errors/interrupts, and/or set-up interrupt/error handlers
746 * for subsequent use.
747 */
748
749 /*
750 * TXENABLE register fields - only ENABLE_BIT is potentially read/write
751 */
752 #define TXENABLE_MAJOR_REV_BITS 0xFF000000
753 #define TXENABLE_MAJOR_REV_S 24
754 #define TXENABLE_MINOR_REV_BITS 0x00FF0000
755 #define TXENABLE_MINOR_REV_S 16
756 #define TXENABLE_CLASS_BITS 0x0000F000
757 #define TXENABLE_CLASS_S 12
758 #define TXENABLE_CLASS_DSP 0x0 /* -> DSP Thread */
759 #define TXENABLE_CLASS_LDSP 0x8 /* -> DSP LITE Thread */
760 #define TXENABLE_CLASS_GP 0xC /* -> General Purpose Thread */
761 #define TXENABLE_CLASSALT_LFPU 0x2 /* Set to indicate LITE FPU */
762 #define TXENABLE_CLASSALT_FPUR8 0x1 /* Set to indicate 8xFPU regs */
763 #define TXENABLE_MTXARCH_BIT 0x00000800
764 #define TXENABLE_STEP_REV_BITS 0x000000F0
765 #define TXENABLE_STEP_REV_S 4
766 #define TXENABLE_STOPPED_BIT 0x00000004 /* TXOFF due to ENABLE->0 */
767 #define TXENABLE_OFF_BIT 0x00000002 /* Thread is in off state */
768 #define TXENABLE_ENABLE_BIT 0x00000001 /* Set if running */
769
770 /*
771 * TXSTATUS register - used by external/internal interrupt/error handler
772 */
773 #define TXSTATUS_CB1MARKER_BIT 0x00800000 /* -> int level mem state */
774 #define TXSTATUS_CBMARKER_BIT 0x00400000 /* -> mem i/f state dumped */
775 #define TXSTATUS_MEM_FAULT_BITS 0x00300000
776 #define TXSTATUS_MEM_FAULT_S 20
777 #define TXSTATUS_MEMFAULT_NONE 0x0 /* -> No memory fault */
778 #define TXSTATUS_MEMFAULT_GEN 0x1 /* -> General fault */
779 #define TXSTATUS_MEMFAULT_PF 0x2 /* -> Page fault */
780 #define TXSTATUS_MEMFAULT_RO 0x3 /* -> Read only fault */
781 #define TXSTATUS_MAJOR_HALT_BITS 0x000C0000
782 #define TXSTATUS_MAJOR_HALT_S 18
783 #define TXSTATUS_MAJHALT_TRAP 0x0 /* -> SWITCH inst used */
784 #define TXSTATUS_MAJHALT_INST 0x1 /* -> Unknown inst or fetch */
785 #define TXSTATUS_MAJHALT_PRIV 0x2 /* -> Internal privilege */
786 #define TXSTATUS_MAJHALT_MEM 0x3 /* -> Memory i/f fault */
787 #define TXSTATUS_L_STEP_BITS 0x00000800 /* -> Progress of L oper */
788 #define TXSTATUS_LSM_STEP_BITS 0x00000700 /* -> Progress of L/S mult */
789 #define TXSTATUS_LSM_STEP_S 8
790 #define TXSTATUS_FLAG_BITS 0x0000001F /* -> All the flags */
791 #define TXSTATUS_SCC_BIT 0x00000010 /* -> Split-16 flags ... */
792 #define TXSTATUS_SCF_LZ_BIT 0x00000008 /* -> Split-16 Low Z flag */
793 #define TXSTATUS_SCF_HZ_BIT 0x00000004 /* -> Split-16 High Z flag */
794 #define TXSTATUS_SCF_HC_BIT 0x00000002 /* -> Split-16 High C flag */
795 #define TXSTATUS_SCF_LC_BIT 0x00000001 /* -> Split-16 Low C flag */
796 #define TXSTATUS_CF_Z_BIT 0x00000008 /* -> Condition Z flag */
797 #define TXSTATUS_CF_N_BIT 0x00000004 /* -> Condition N flag */
798 #define TXSTATUS_CF_O_BIT 0x00000002 /* -> Condition O flag */
799 #define TXSTATUS_CF_C_BIT 0x00000001 /* -> Condition C flag */
800
801 /*
802 * TXCATCH0-3 register contents may store information on a memory operation
803 * that has failed if the bit TXSTATUS_CBMARKER_BIT is set.
804 */
805 #define TXCATCH0_REGNUM 16
806 #define TXCATCH1_REGNUM 17
807 #define TXCATCH1_ADDR_BITS 0xFFFFFFFF /* TXCATCH1 is Addr 0-31 */
808 #define TXCATCH1_ADDR_S 0
809 #define TXCATCH2_REGNUM 18
810 #define TXCATCH2_DATA0_BITS 0xFFFFFFFF /* TXCATCH2 is Data 0-31 */
811 #define TXCATCH2_DATA0_S 0
812 #define TXCATCH3_REGNUM 19
813 #define TXCATCH3_DATA1_BITS 0xFFFFFFFF /* TXCATCH3 is Data 32-63 */
814 #define TXCATCH3_DATA1_S 0
815
816 /*
817 * Detailed catch state information
818 * --------------------------------
819 */
820
821 /* Contents of TXCATCH0 register */
822 #define TXCATCH0_LDRXX_BITS 0xF8000000 /* Load destination reg 0-31 */
823 #define TXCATCH0_LDRXX_S 27
824 #define TXCATCH0_LDDST_BITS 0x07FF0000 /* Load destination bits */
825 #define TXCATCH0_LDDST_S 16
826 #define TXCATCH0_LDDST_D1DSP 0x400 /* One bit set if it's a LOAD */
827 #define TXCATCH0_LDDST_D0DSP 0x200
828 #define TXCATCH0_LDDST_TMPLT 0x100
829 #define TXCATCH0_LDDST_TR 0x080
830 #ifdef METAC_2_1
831 #define TXCATCH0_LDDST_FPU 0x040
832 #endif
833 #define TXCATCH0_LDDST_PC 0x020
834 #define TXCATCH0_LDDST_A1 0x010
835 #define TXCATCH0_LDDST_A0 0x008
836 #define TXCATCH0_LDDST_D1 0x004
837 #define TXCATCH0_LDDST_D0 0x002
838 #define TXCATCH0_LDDST_CT 0x001
839 #ifdef METAC_2_1
840 #define TXCATCH0_WATCHSTOP_BIT 0x00004000 /* Set if Data Watch set fault */
841 #endif
842 #define TXCATCH0_WATCHS_BIT 0x00004000 /* Set if Data Watch set fault */
843 #define TXCATCH0_WATCH1_BIT 0x00002000 /* Set if Data Watch 1 matches */
844 #define TXCATCH0_WATCH0_BIT 0x00001000 /* Set if Data Watch 0 matches */
845 #define TXCATCH0_FAULT_BITS 0x00000C00 /* See TXSTATUS_MEMFAULT_* */
846 #define TXCATCH0_FAULT_S 10
847 #define TXCATCH0_PRIV_BIT 0x00000200 /* Privilege of transaction */
848 #define TXCATCH0_READ_BIT 0x00000100 /* Set for Read or Load cases */
849
850 #ifdef METAC_2_1
851 /* LNKGET Marker bit in TXCATCH0 */
852 #define TXCATCH0_LNKGET_MARKER_BIT 0x00000008
853 #define TXCATCH0_PREPROC_BIT 0x00000004
854 #endif
855
856 /* Loads are indicated by one of the LDDST bits being set */
857 #define TXCATCH0_LDM16_BIT 0x00000004 /* Load M16 flag */
858 #define TXCATCH0_LDL2L1_BITS 0x00000003 /* Load data size L2,L1 */
859 #define TXCATCH0_LDL2L1_S 0
860
861 /* Reads are indicated by the READ bit being set without LDDST bits */
862 #define TXCATCH0_RAXX_BITS 0x0000001F /* RAXX issue port for read */
863 #define TXCATCH0_RAXX_S 0
864
865 /* Write operations are all that remain if READ bit is not set */
866 #define TXCATCH0_WMASK_BITS 0x000000FF /* Write byte lane mask */
867 #define TXCATCH0_WMASK_S 0
868
869 #ifdef METAC_2_1
870
871 /* When a FPU exception is signalled then FPUSPEC == FPUSPEC_TAG */
872 #define TXCATCH0_FPURDREG_BITS 0xF8000000
873 #define TXCATCH0_FPURDREG_S 27
874 #define TXCATCH0_FPUR1REG_BITS 0x07C00000
875 #define TXCATCH0_FPUR1REG_S 22
876 #define TXCATCH0_FPUSPEC_BITS 0x000F0000
877 #define TXCATCH0_FPUSPEC_S 16
878 #define TXCATCH0_FPUSPEC_TAG 0xF
879 #define TXCATCH0_FPUINSTA_BIT 0x00001000
880 #define TXCATCH0_FPUINSTQ_BIT 0x00000800
881 #define TXCATCH0_FPUINSTZ_BIT 0x00000400
882 #define TXCATCH0_FPUINSTN_BIT 0x00000200
883 #define TXCATCH0_FPUINSTO3O_BIT 0x00000100
884 #define TXCATCH0_FPUWIDTH_BITS 0x000000C0
885 #define TXCATCH0_FPUWIDTH_S 6
886 #define TXCATCH0_FPUWIDTH_FLOAT 0
887 #define TXCATCH0_FPUWIDTH_DOUBLE 1
888 #define TXCATCH0_FPUWIDTH_PAIRED 2
889 #define TXCATCH0_FPUOPENC_BITS 0x0000003F
890 #define TXCATCH0_FPUOPENC_S 0
891 #define TXCATCH0_FPUOPENC_ADD 0 /* rop1=Rs1, rop3=Rs2 */
892 #define TXCATCH0_FPUOPENC_SUB 1 /* rop1=Rs1, rop3=Rs2 */
893 #define TXCATCH0_FPUOPENC_MUL 2 /* rop1=Rs1, rop2=Rs2 */
894 #define TXCATCH0_FPUOPENC_ATOI 3 /* rop3=Rs */
895 #define TXCATCH0_FPUOPENC_ATOX 4 /* rop3=Rs, uses #Imm */
896 #define TXCATCH0_FPUOPENC_ITOA 5 /* rop3=Rs */
897 #define TXCATCH0_FPUOPENC_XTOA 6 /* rop3=Rs, uses #Imm */
898 #define TXCATCH0_FPUOPENC_ATOH 7 /* rop2=Rs */
899 #define TXCATCH0_FPUOPENC_HTOA 8 /* rop2=Rs */
900 #define TXCATCH0_FPUOPENC_DTOF 9 /* rop3=Rs */
901 #define TXCATCH0_FPUOPENC_FTOD 10 /* rop3=Rs */
902 #define TXCATCH0_FPUOPENC_DTOL 11 /* rop3=Rs */
903 #define TXCATCH0_FPUOPENC_LTOD 12 /* rop3=Rs */
904 #define TXCATCH0_FPUOPENC_DTOXL 13 /* rop3=Rs, uses #imm */
905 #define TXCATCH0_FPUOPENC_XLTOD 14 /* rop3=Rs, uses #imm */
906 #define TXCATCH0_FPUOPENC_CMP 15 /* rop1=Rs1, rop2=Rs2 */
907 #define TXCATCH0_FPUOPENC_MIN 16 /* rop1=Rs1, rop2=Rs2 */
908 #define TXCATCH0_FPUOPENC_MAX 17 /* rop1=Rs1, rop2=Rs2 */
909 #define TXCATCH0_FPUOPENC_ADDRE 18 /* rop1=Rs1, rop3=Rs2 */
910 #define TXCATCH0_FPUOPENC_SUBRE 19 /* rop1=Rs1, rop3=Rs2 */
911 #define TXCATCH0_FPUOPENC_MULRE 20 /* rop1=Rs1, rop2=Rs2 */
912 #define TXCATCH0_FPUOPENC_MXA 21 /* rop1=Rs1, rop2=Rs2, rop3=Rs3*/
913 #define TXCATCH0_FPUOPENC_MXAS 22 /* rop1=Rs1, rop2=Rs2, rop3=Rs3*/
914 #define TXCATCH0_FPUOPENC_MAR 23 /* rop1=Rs1, rop2=Rs2 */
915 #define TXCATCH0_FPUOPENC_MARS 24 /* rop1=Rs1, rop2=Rs2 */
916 #define TXCATCH0_FPUOPENC_MUZ 25 /* rop1=Rs1, rop2=Rs2, rop3=Rs3*/
917 #define TXCATCH0_FPUOPENC_MUZS 26 /* rop1=Rs1, rop2=Rs2, rop3=Rs3*/
918 #define TXCATCH0_FPUOPENC_RCP 27 /* rop2=Rs */
919 #define TXCATCH0_FPUOPENC_RSQ 28 /* rop2=Rs */
920
921 /* For floating point exceptions TXCATCH1 is used to carry extra data */
922 #define TXCATCH1_FPUR2REG_BITS 0xF8000000
923 #define TXCATCH1_FPUR2REG_S 27
924 #define TXCATCH1_FPUR3REG_BITS 0x07C00000 /* Undefined if O3O set */
925 #define TXCATCH1_FPUR3REG_S 22
926 #define TXCATCH1_FPUIMM16_BITS 0x0000FFFF
927 #define TXCATCH1_FPUIMM16_S 0
928
929 #endif /* METAC_2_1 */
930
931 /*
932 * TXDIVTIME register used to hold the partial base address of memory i/f
933 * state dump area. Now deprecated.
934 */
935 #define TXDIVTIME_CBBASE_MASK 0x03FFFE00
936 #define TXDIVTIME_CBBASE_LINBASE 0x80000000
937 #define TXDIVTIME_CBBASE_LINBOFF 0x00000000 /* BGnd state */
938 #define TXDIVTIME_CBBASE_LINIOFF 0x00000100 /* Int state */
939
940 /*
941 * TXDIVTIME register used to indicate if the read pipeline was dirty when a
942 * thread was interrupted, halted, or generated an exception. It is invalid
943 * to attempt to issue a further pipeline read address while the read
944 * pipeline is in the dirty state.
945 */
946 #define TXDIVTIME_RPDIRTY_BIT 0x80000000
947
948 /*
949 * Further bits in the TXDIVTIME register allow interrupt handling code to
950 * short-cut the discovery the most significant bit last read from TXSTATI.
951 *
952 * This is the bit number of the trigger line that a low level interrupt
953 * handler should acknowledge and then perhaps the index of a corresponding
954 * handler function.
955 */
956 #define TXDIVTIME_IRQENC_BITS 0x0F000000
957 #define TXDIVTIME_IRQENC_S 24
958
959 /*
960 * If TXDIVTIME_RPVALID_BIT is set the read pipeline contained significant
961 * information when the thread was interrupted|halted|exceptioned. Each slot
962 * containing data is indicated by a one bit in the corresponding
963 * TXDIVTIME_RPMASK_BITS bit (least significance bit relates to first
964 * location in read pipeline - most likely to have the 1 state). Empty slots
965 * contain zeroes with no interlock applied on reads if RPDIRTY is currently
966 * set with RPMASK itself being read-only state.
967 */
968 #define TXDIVTIME_RPMASK_BITS 0x003F0000 /* -> Full (1) Empty (0) */
969 #define TXDIVTIME_RPMASK_S 16
970
971 /*
972 * TXPRIVEXT register can be used to single step thread execution and
973 * enforce synchronous memory i/f address checking for debugging purposes.
974 */
975 #define TXPRIVEXT_TXSTEP_BIT 0x00000004
976 #define TXPRIVEXT_MEMCHECK_BIT 0x00000002
977
978 /*
979 * TXINTERNx registers holds internal state information for H/W debugging only
980 */
981 #define TXINTERN0_REGNUM 23
982 #define TXINTERN0_LOCK2_BITS 0xF0000000
983 #define TXINTERN0_LOCK2_S 28
984 #define TXINTERN0_LOCK1_BITS 0x0F000000
985 #define TXINTERN0_LOCK1_S 24
986 #define TXINTERN0_TIFDF_BITS 0x0000F000
987 #define TXINTERN0_TIFDF_S 12
988 #define TXINTERN0_TIFIB_BITS 0x00000F00
989 #define TXINTERN0_TIFIB_S 8
990 #define TXINTERN0_TIFAF_BITS 0x000000F0
991 #define TXINTERN0_TIFAF_S 4
992 #define TXINTERN0_MSTATE_BITS 0x0000000F
993 #define TXINTERN0_MSTATE_S 0
994
995 /*
996 * TXSTAT, TXMASK, TXPOLL, TXSTATI, TXMASKI, TXPOLLI registers from trigger
997 * bank all have similar contents (upper kick count bits not in MASK regs)
998 */
999 #define TXSTAT_REGNUM 0
1000 #define TXSTAT_TIMER_BIT 0x00000001
1001 #define TXSTAT_TIMER_S 0
1002 #define TXSTAT_KICK_BIT 0x00000002
1003 #define TXSTAT_KICK_S 1
1004 #define TXSTAT_DEFER_BIT 0x00000008
1005 #define TXSTAT_DEFER_S 3
1006 #define TXSTAT_EXTTRIG_BITS 0x0000FFF0
1007 #define TXSTAT_EXTTRIG_S 4
1008 #define TXSTAT_FPE_BITS 0x003F0000
1009 #define TXSTAT_FPE_S 16
1010 #define TXSTAT_FPE_DENORMAL_BIT 0x00200000
1011 #define TXSTAT_FPE_DENORMAL_S 21
1012 #define TXSTAT_FPE_INVALID_BIT 0x00100000
1013 #define TXSTAT_FPE_INVALID_S 20
1014 #define TXSTAT_FPE_DIVBYZERO_BIT 0x00080000
1015 #define TXSTAT_FPE_DIVBYZERO_S 19
1016 #define TXSTAT_FPE_OVERFLOW_BIT 0x00040000
1017 #define TXSTAT_FPE_OVERFLOW_S 18
1018 #define TXSTAT_FPE_UNDERFLOW_BIT 0x00020000
1019 #define TXSTAT_FPE_UNDERFLOW_S 17
1020 #define TXSTAT_FPE_INEXACT_BIT 0x00010000
1021 #define TXSTAT_FPE_INEXACT_S 16
1022 #define TXSTAT_BUSERR_BIT 0x00800000 /* Set if bus error/ack state */
1023 #define TXSTAT_BUSERR_S 23
1024 #define TXSTAT_BUSSTATE_BITS 0xFF000000 /* Read only */
1025 #define TXSTAT_BUSSTATE_S 24
1026 #define TXSTAT_KICKCNT_BITS 0xFFFF0000
1027 #define TXSTAT_KICKCNT_S 16
1028 #define TXMASK_REGNUM 1
1029 #define TXSTATI_REGNUM 2
1030 #define TXSTATI_BGNDHALT_BIT 0x00000004
1031 #define TXMASKI_REGNUM 3
1032 #define TXPOLL_REGNUM 4
1033 #define TXPOLLI_REGNUM 6
1034
1035 /*
1036 * TXDRCTRL register can be used to partition the DSP RAM space available to
1037 * this thread at startup. This is achieved by offsetting the region allocated
1038 * to each thread.
1039 */
1040 #define TXDRCTRL_D1PARTOR_BITS 0x00000F00 /* OR's into top 4 bits */
1041 #define TXDRCTRL_D1PARTOR_S 8
1042 #define TXDRCTRL_D0PARTOR_BITS 0x0000000F /* OR's into top 4 bits */
1043 #define TXDRCTRL_D0PARTOR_S 0
1044 /* Given extracted Pow and Or fields this is threads base within DSP RAM */
1045 #define TXDRCTRL_DXBASE(Pow, Or) ((Or)<<((Pow)-4))
1046
1047 /*****************************************************************************
1048 * RUN TIME TRACE CONTROL REGISTERS
1049 ****************************************************************************/
1050 /*
1051 * The following values are only relevant to code that implements run-time
1052 * trace features within the META Core
1053 */
1054 #define TTEXEC TT.0
1055 #define TTCTRL TT.1
1056 #define TTMARK TT.2
1057 #define TTREC TT.3
1058 #define GTEXEC TT.4
1059
1060 #define TTEXEC_REGNUM 0
1061 #define TTEXEC_EXTTRIGAND_BITS 0x7F000000
1062 #define TTEXEC_EXTTRIGAND_S 24
1063 #define TTEXEC_EXTTRIGEN_BIT 0x00008000
1064 #define TTEXEC_EXTTRIGMATCH_BITS 0x00007F00
1065 #define TTEXEC_EXTTRIGMATCH_S 8
1066 #define TTEXEC_TCMODE_BITS 0x00000003
1067 #define TTEXEC_TCMODE_S 0
1068
1069 #define TTCTRL_REGNUM 1
1070 #define TTCTRL_TRACETT_BITS 0x00008000
1071 #define TTCTRL_TRACETT_S 15
1072 #define TTCTRL_TRACEALL_BITS 0x00002000
1073 #define TTCTRL_TRACEALL_S 13
1074 #ifdef METAC_2_1
1075 #define TTCTRL_TRACEALLTAG_BITS 0x00000400
1076 #define TTCTRL_TRACEALLTAG_S 10
1077 #endif /* METAC_2_1 */
1078 #define TTCTRL_TRACETAG_BITS 0x00000200
1079 #define TTCTRL_TRACETAG_S 9
1080 #define TTCTRL_TRACETTPC_BITS 0x00000080
1081 #define TTCTRL_TRACETTPC_S 7
1082 #define TTCTRL_TRACEMPC_BITS 0x00000020
1083 #define TTCTRL_TRACEMPC_S 5
1084 #define TTCTRL_TRACEEN_BITS 0x00000008
1085 #define TTCTRL_TRACEEN_S 3
1086 #define TTCTRL_TRACEEN1_BITS 0x00000004
1087 #define TTCTRL_TRACEEN1_S 2
1088 #define TTCTRL_TRACEPC_BITS 0x00000002
1089 #define TTCTRL_TRACEPC_S 1
1090
1091 #ifdef METAC_2_1
1092 #define TTMARK_REGNUM 2
1093 #define TTMARK_BITS 0xFFFFFFFF
1094 #define TTMARK_S 0x0
1095
1096 #define TTREC_REGNUM 3
1097 #define TTREC_BITS 0xFFFFFFFFFFFFFFFF
1098 #define TTREC_S 0x0
1099 #endif /* METAC_2_1 */
1100
1101 #define GTEXEC_REGNUM 4
1102 #define GTEXEC_DCRUN_BITS 0x80000000
1103 #define GTEXEC_DCRUN_S 31
1104 #define GTEXEC_ICMODE_BITS 0x0C000000
1105 #define GTEXEC_ICMODE_S 26
1106 #define GTEXEC_TCMODE_BITS 0x03000000
1107 #define GTEXEC_TCMODE_S 24
1108 #define GTEXEC_PERF1CMODE_BITS 0x00040000
1109 #define GTEXEC_PERF1CMODE_S 18
1110 #define GTEXEC_PERF0CMODE_BITS 0x00010000
1111 #define GTEXEC_PERF0CMODE_S 16
1112 #define GTEXEC_REFMSEL_BITS 0x0000F000
1113 #define GTEXEC_REFMSEL_S 12
1114 #define GTEXEC_METRICTH_BITS 0x000003FF
1115 #define GTEXEC_METRICTH_S 0
1116
1117 #ifdef METAC_2_1
1118 /*
1119 * Clock Control registers
1120 * -----------------------
1121 */
1122 #define TXCLKCTRL_REGNUM 22
1123
1124 /*
1125 * Default setting is with clocks always on (DEFON), turning all clocks off
1126 * can only be done from external devices (OFF), enabling automatic clock
1127 * gating will allow clocks to stop as units fall idle.
1128 */
1129 #define TXCLKCTRL_ALL_OFF 0x02222222
1130 #define TXCLKCTRL_ALL_DEFON 0x01111111
1131 #define TXCLKCTRL_ALL_AUTO 0x02222222
1132
1133 /*
1134 * Individual fields control caches, floating point and main data/addr units
1135 */
1136 #define TXCLKCTRL_CLOCKIC_BITS 0x03000000
1137 #define TXCLKCTRL_CLOCKIC_S 24
1138 #define TXCLKCTRL_CLOCKDC_BITS 0x00300000
1139 #define TXCLKCTRL_CLOCKDC_S 20
1140 #define TXCLKCTRL_CLOCKFP_BITS 0x00030000
1141 #define TXCLKCTRL_CLOCKFP_S 16
1142 #define TXCLKCTRL_CLOCKD1_BITS 0x00003000
1143 #define TXCLKCTRL_CLOCKD1_S 12
1144 #define TXCLKCTRL_CLOCKD0_BITS 0x00000300
1145 #define TXCLKCTRL_CLOCKD0_S 8
1146 #define TXCLKCTRL_CLOCKA1_BITS 0x00000030
1147 #define TXCLKCTRL_CLOCKA1_S 4
1148 #define TXCLKCTRL_CLOCKA0_BITS 0x00000003
1149 #define TXCLKCTRL_CLOCKA0_S 0
1150
1151 /*
1152 * Individual settings for each field are common
1153 */
1154 #define TXCLKCTRL_CLOCKxx_OFF 0
1155 #define TXCLKCTRL_CLOCKxx_DEFON 1
1156 #define TXCLKCTRL_CLOCKxx_AUTO 2
1157
1158 #endif /* METAC_2_1 */
1159
1160 #ifdef METAC_2_1
1161 /*
1162 * Fast interrupt new bits
1163 * ------------------------------------
1164 */
1165 #define TXSTATUS_IPTOGGLE_BIT 0x80000000 /* Prev PToggle of TXPRIVEXT */
1166 #define TXSTATUS_ISTATE_BIT 0x40000000 /* IState bit */
1167 #define TXSTATUS_IWAIT_BIT 0x20000000 /* wait indefinitely in decision step*/
1168 #define TXSTATUS_IEXCEPT_BIT 0x10000000 /* Indicate an exception occurred */
1169 #define TXSTATUS_IRPCOUNT_BITS 0x0E000000 /* Number of 'dirty' date entries*/
1170 #define TXSTATUS_IRPCOUNT_S 25
1171 #define TXSTATUS_IRQSTAT_BITS 0x0000F000 /* IRQEnc bits, trigger or interrupts */
1172 #define TXSTATUS_IRQSTAT_S 12
1173 #define TXSTATUS_LNKSETOK_BIT 0x00000020 /* LNKSetOK bit, successful LNKSET */
1174
1175 /* New fields in TXDE for fast interrupt system */
1176 #define TXDIVTIME_IACTIVE_BIT 0x00008000 /* Enable new interrupt system */
1177 #define TXDIVTIME_INONEST_BIT 0x00004000 /* Gate nested interrupt */
1178 #define TXDIVTIME_IREGIDXGATE_BIT 0x00002000 /* gate of the IRegIdex field */
1179 #define TXDIVTIME_IREGIDX_BITS 0x00001E00 /* Index of A0.0/1 replaces */
1180 #define TXDIVTIME_IREGIDX_S 9
1181 #define TXDIVTIME_NOST_BIT 0x00000100 /* disable superthreading bit */
1182 #endif
1183
1184 #endif /* _ASM_METAG_REGS_H_ */
This page took 0.100702 seconds and 5 git commands to generate.