本项止转自github官方arduino-esp32 传在这里仅为阅读源码方便
projectuser
2019-07-05 50148ccffe21ff54262064ec9f2245900eaf18aa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
/* xdm-regs.h  -  Common register and related definitions for the XDM
                  (Xtensa Debug Module) */
 
/* Copyright (c) 2011-2012 Tensilica Inc.
 
   Permission is hereby granted, free of charge, to any person obtaining
   a copy of this software and associated documentation files (the
   "Software"), to deal in the Software without restriction, including
   without limitation the rights to use, copy, modify, merge, publish,
   distribute, sublicense, and/or sell copies of the Software, and to
   permit persons to whom the Software is furnished to do so, subject to
   the following conditions:
 
   The above copyright notice and this permission notice shall be included
   in all copies or substantial portions of the Software.
 
   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
   IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
   CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
   TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
   SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  */
 
 
#ifndef _XDM_REGS_H_
#define _XDM_REGS_H_
 
/*  NOTE:  This header file is included by C, assembler, and other sources.
    So any C-specific or asm-specific content must be appropriately #ifdef'd.  */
 
 
/*
 *  XDM registers can be accessed using APB, ERI, or JTAG (via NAR).
 *  Address offsets for APB and ERI are the same, and for JTAG
 *  is different (due to the limited 7-bit NAR addressing).
 *
 *  Here, we first provide the constants as APB / ERI address offsets.
 *  This is necessary for assembler code (which accesses XDM via ERI),
 *  because complex conversion macros between the two address maps
 *  don't work in the assembler.
 *  Conversion macros are used to convert these to/from JTAG (NAR),
 *  addresses, for software using JTAG.
 */
/* FIXME: maybe provide only MISC+CS registers here, and leave specific
   subsystem registers in separate headers? eg. for TRAX, PERF, OCD */
 
/*       XDM_....             ERI addr  [NAR addr] Description...... */
 
/*  TRAX  */
#define  XDM_TRAX_ID        0x0000    /*[0x00] ID */
#define  XDM_TRAX_CONTROL     0x0004    /*[0x01] Control */
#define  XDM_TRAX_STATUS    0x0008    /*[0x02] Status */
#define  XDM_TRAX_DATA        0x000C    /*[0x03] Data */
#define  XDM_TRAX_ADDRESS    0x0010    /*[0x04] Address */
#define  XDM_TRAX_TRIGGER    0x0014    /*[0x05] Stop PC */
#define  XDM_TRAX_MATCH        0x0018    /*[0x06] Stop PC Range */
#define  XDM_TRAX_DELAY        0x001C    /*[0x07] Post Stop Trigger Capture Size */
#define  XDM_TRAX_STARTADDR    0x0020    /*[0x08] Trace Memory Start */
#define  XDM_TRAX_ENDADDR    0x0024    /*[0x09] Trace Memory End */
#define  XDM_TRAX_DEBUGPC    0x003C    /*[0x0F] Debug PC */
#define  XDM_TRAX_P4CHANGE    0x0040    /*[0x10] X */
#define  XDM_TRAX_TIME0        0x0040    /*[0x10] First Time Register */
#define  XDM_TRAX_P4REV        0x0044    /*[0x11] X */
#define  XDM_TRAX_TIME1        0x0044    /*[0x11] Second Time Register */
#define  XDM_TRAX_P4DATE    0x0048    /*[0x12] X */
#define  XDM_TRAX_INTTIME_MAX    0x0048 /*[0x12] maximal Value of Timestamp IntTime */
#define  XDM_TRAX_P4TIME    0x004C    /*[0x13] X */
#define  XDM_TRAX_PDSTATUS    0x0050    /*[0x14] Sample of PDebugStatus */
#define  XDM_TRAX_PDDATA    0x0054    /*[0x15] Sample of PDebugData */
#define  XDM_TRAX_STOP_PC    0x0058    /*[0x16] X */
#define  XDM_TRAX_STOP_ICNT    0x005C    /*[0x16] X */
#define  XDM_TRAX_MSG_STATUS    0x0060    /*[0x17] X */
#define  XDM_TRAX_FSM_STATUS    0x0064    /*[0x18] X */
#define  XDM_TRAX_IB_STATUS    0x0068    /*[0x19] X */
#define  XDM_TRAX_STOPCNT    0x006C    /*[0x1A] X */
 
/*  Performance Monitoring Counters  */
#define  XDM_PERF_PMG        0x1000    /*[0x20] perf. mon. global control register */
#define  XDM_PERF_INTPC        0x1010    /*[0x24] perf. mon. interrupt PC */
#define  XDM_PERF_PM0        0x1080    /*[0x28] perf. mon. counter 0 value */
#define  XDM_PERF_PM1        0x1084    /*[0x29] perf. mon. counter 1 value */
#define  XDM_PERF_PM2        0x1088    /*[0x2A] perf. mon. counter 2 value */
#define  XDM_PERF_PM3        0x108C    /*[0x2B] perf. mon. counter 3 value */
#define  XDM_PERF_PM4        0x1090    /*[0x2C] perf. mon. counter 4 value */
#define  XDM_PERF_PM5        0x1094    /*[0x2D] perf. mon. counter 5 value */
#define  XDM_PERF_PM6        0x1098    /*[0x2E] perf. mon. counter 6 value */
#define  XDM_PERF_PM7        0x109C    /*[0x2F] perf. mon. counter 7 value */
#define  XDM_PERF_PM(n)        (0x1080+((n)<<2)) /* perfmon cnt n=0..7 value */
#define  XDM_PERF_PMCTRL0    0x1100    /*[0x30] perf. mon. counter 0 control */
#define  XDM_PERF_PMCTRL1    0x1104    /*[0x31] perf. mon. counter 1 control */
#define  XDM_PERF_PMCTRL2    0x1108    /*[0x32] perf. mon. counter 2 control */
#define  XDM_PERF_PMCTRL3    0x110C    /*[0x33] perf. mon. counter 3 control */
#define  XDM_PERF_PMCTRL4    0x1110    /*[0x34] perf. mon. counter 4 control */
#define  XDM_PERF_PMCTRL5    0x1114    /*[0x35] perf. mon. counter 5 control */
#define  XDM_PERF_PMCTRL6    0x1118    /*[0x36] perf. mon. counter 6 control */
#define  XDM_PERF_PMCTRL7    0x111C    /*[0x37] perf. mon. counter 7 control */
#define  XDM_PERF_PMCTRL(n)    (0x1100+((n)<<2)) /* perfmon cnt n=0..7 control */
#define  XDM_PERF_PMSTAT0    0x1180    /*[0x38] perf. mon. counter 0 status */
#define  XDM_PERF_PMSTAT1    0x1184    /*[0x39] perf. mon. counter 1 status */
#define  XDM_PERF_PMSTAT2    0x1188    /*[0x3A] perf. mon. counter 2 status */
#define  XDM_PERF_PMSTAT3    0x118C    /*[0x3B] perf. mon. counter 3 status */
#define  XDM_PERF_PMSTAT4    0x1190    /*[0x3C] perf. mon. counter 4 status */
#define  XDM_PERF_PMSTAT5    0x1194    /*[0x3D] perf. mon. counter 5 status */
#define  XDM_PERF_PMSTAT6    0x1198    /*[0x3E] perf. mon. counter 6 status */
#define  XDM_PERF_PMSTAT7    0x119C    /*[0x3F] perf. mon. counter 7 status */
#define  XDM_PERF_PMSTAT(n)    (0x1180+((n)<<2)) /* perfmon cnt n=0..7 status */
 
/*  On-Chip-Debug (OCD)  */
#define  XDM_OCD_ID        0x2000    /*[0x40] ID register */
#define  XDM_OCD_DCR_CLR    0x2008    /*[0x42] Debug Control reg clear */
#define  XDM_OCD_DCR_SET    0x200C    /*[0x43] Debug Control reg set */
#define  XDM_OCD_DSR        0x2010    /*[0x44] Debug Status reg */
#define  XDM_OCD_DDR        0x2014    /*[0x45] Debug Data reg */
#define  XDM_OCD_DDREXEC    0x2018    /*[0x46] Debug Data reg + execute-DIR */
#define  XDM_OCD_DIR0EXEC    0x201C    /*[0x47] Debug Instruction reg, word 0 + execute-DIR */
#define  XDM_OCD_DIR0        0x2020    /*[0x48] Debug Instruction reg, word 1 */
#define  XDM_OCD_DIR1        0x2024    /*[0x49] Debug Instruction reg, word 2 */
#define  XDM_OCD_DIR2        0x2028    /*[0x4A] Debug Instruction reg, word 3 */
#define  XDM_OCD_DIR3        0x202C    /*[0x49] Debug Instruction reg, word 4 */
#define  XDM_OCD_DIR4        0x2030    /*[0x4C] Debug Instruction reg, word 5 */
#define  XDM_OCD_DIR5        0x2034    /*[0x4D] Debug Instruction reg, word 5 */
#define  XDM_OCD_DIR6        0x2038    /*[0x4E] Debug Instruction reg, word 6 */
#define  XDM_OCD_DIR7        0x203C    /*[0x4F] Debug Instruction reg, word 7 */
 
/*  Miscellaneous Registers  */
#define  XDM_MISC_PWRCTL    0x3020    /*[0x58] Power and Reset Control */
#define  XDM_MISC_PWRSTAT    0x3024    /*[0x59] Power and Reset Status */
#define  XDM_MISC_ERISTAT    0x3028    /*[0x5A] ERI Transaction Status */
#define  XDM_MISC_DATETIME    0x3034    /*[0x5D] [INTERNAL] Timestamps of build */
#define  XDM_MISC_UBID        0x3038    /*[0x5E] [INTERNAL] Build Unique ID */
#define  XDM_MISC_CID        0x303C    /*[0x5F] [INTERNAL] Customer ID */
 
/*  CoreSight compatibility  */
#define  XDM_CS_ITCTRL        0x3F00    /*[0x60] InTegration Mode control reg */
#define  XDM_CS_CLAIMSET    0x3FA0    /*[0x68] Claim Tag Set reg */
#define  XDM_CS_CLAIMCLR    0x3FA4    /*[0x69] Claim Tag Clear reg */
#define  XDM_CS_LOCK_ACCESS    0x3FB0    /*[0x6B] Lock Access (writing 0xC5ACCE55 unlocks) */
#define  XDM_CS_LOCK_STATUS    0x3FB4    /*[0x6D] Lock Status */
#define  XDM_CS_AUTH_STATUS    0x3FB8    /*[0x6E] Authentication Status */
#define  XDM_CS_DEV_ID        0x3FC8    /*[0x72] Device ID */
#define  XDM_CS_DEV_TYPE    0x3FCC    /*[0x73] Device Type */
#define  XDM_CS_PER_ID4        0x3FD0    /*[0x74] Peripheral ID reg byte 4 */
#define  XDM_CS_PER_ID5        0x3FD4    /*[0x75] Peripheral ID reg byte 5 */
#define  XDM_CS_PER_ID6        0x3FD8    /*[0x76] Peripheral ID reg byte 6 */
#define  XDM_CS_PER_ID7        0x3FDC    /*[0x77] Peripheral ID reg byte 7 */
#define  XDM_CS_PER_ID0        0x3FE0    /*[0x78] Peripheral ID reg byte 0 */
#define  XDM_CS_PER_ID1        0x3FE4    /*[0x79] Peripheral ID reg byte 1 */
#define  XDM_CS_PER_ID2        0x3FE8    /*[0x7A] Peripheral ID reg byte 2 */
#define  XDM_CS_PER_ID3        0x3FEC    /*[0x7B] Peripheral ID reg byte 3 */
#define  XDM_CS_COMP_ID0    0x3FF0    /*[0x7C] Component ID reg byte 0 */
#define  XDM_CS_COMP_ID1    0x3FF4    /*[0x7D] Component ID reg byte 1 */
#define  XDM_CS_COMP_ID2    0x3FF8    /*[0x7E] Component ID reg byte 2 */
#define  XDM_CS_COMP_ID3    0x3FFC    /*[0x7F] Component ID reg byte 3 */
 
#define CS_PER_ID0    0x00000003
#define CS_PER_ID1    0x00000021
#define CS_PER_ID2    0x0000000f
#define CS_PER_ID3    0x00000000
#define CS_PER_ID4    0x00000024
 
#define CS_COMP_ID0    0x0000000d
#define CS_COMP_ID1    0x00000090
#define CS_COMP_ID2    0x00000005
#define CS_COMP_ID3    0x000000b1
 
#define CS_DEV_TYPE    0x00000015
 
#define XTENSA_IDCODE    0x120034e5    // FIXME (upper bits not spec. out but BE is !)
#define XTENSA_MFC_ID    (XTENSA_IDCODE & 0xFFF)
#define CS_DEV_ID    XTENSA_IDCODE
 
#define NXS_OCD_REG(val)  ((val >= 0x40) && (val <= 0x5F))
#define NXS_TRAX_REG(val)  val <= 0x3F
 
#define ERI_TRAX_REG(val)  ((val & 0xFFFF) < 0x1000)
#define ERI_OCD_REG(val)   ((val & 0xFFFF) >= 0x2000) && ((val & 0xFFFF) < 0x4000))
 
/*  Convert above 14-bit ERI/APB address/offset to 7-bit NAR address:  */
#define _XDM_ERI_TO_NAR(a)    ( ((a)&0x3F80)==0x0000 ? (((a)>>2) & 0x1F) \
                : ((a)&0x3E00)==0x1000 ? (0x20 | (((a)>>2) & 7) | (((a)>>4) & 0x18)) \
                : ((a)&0x3FC0)==0x2000 ? (0x40 | (((a)>>2) & 0xF)) \
                : ((a)&0x3FE0)==0x3020 ? (0x50 | (((a)>>2) & 0xF)) \
                : ((a)&0x3FFC)==0x3F00 ? 0x60 \
                : ((a)&0x3F80)==0x3F80 ? (0x60 | (((a)>>2) & 0x1F)) \
                : -1 )
 
#define XDM_ERI_TO_NAR(a)    _XDM_ERI_TO_NAR(a & 0xFFFF)
 
/* Convert 7-bit NAR address back to ERI/APB address/offset:  */
#define _XDM_NAR_TO_APB(a)    ((a) <= 0x1f                ? ((a) << 2)                   \
                :(a) >= 0x20 && (a) <= 0x3F ? (0x1000 | (((a)&  7) << 2) | (((a)&0x18)<<4)) \
                :(a) >= 0x40 && (a) <= 0x4F ? (0x2000 | (((a)&0xF) << 2))  \
                :(a) >= 0x58 && (a) <= 0x5F ? (0x3000 | (((a)&0xF) << 2))  \
                :(a) == 0x60                ? (0x3F00)                     \
                :(a) >= 0x68 && (a) <= 0x7F ? (0x3F80 | (((a)&0x1F) << 2)) \
                : -1)
 
#define XDM_NAR_TO_APB(a)    _XDM_NAR_TO_APB((a & 0xFFFF))
#define XDM_NAR_TO_ERI(a)    _XDM_NAR_TO_APB((a & 0xFFFF)) | 0x000000
 
/* Convert APB to ERI address */
#define XDM_APB_TO_ERI(a)    ((a) | (0x100000))
#define XDM_ERI_TO_APB(a)    ((a) & (0x0FFFFF))
 
/***********  Bit definitions within some of the above registers  ***********/
#define OCD_ID_LSDDRP            0x01000000
#define OCD_ID_LSDDRP_SHIFT            24
#define OCD_ID_ENDIANESS        0x00000001
#define OCD_ID_ENDIANESS_SHIFT             0
#define OCD_ID_PSO            0x0000000C
#define OCD_ID_PSO_SHIFT             2
#define OCD_ID_TRACEPORT        0x00000080
#define OCD_ID_TRACEPORT_SHIFT             7
 
/*  Power Status register.  NOTE:  different bit positions in JTAG vs. ERI/APB !!  */
/*  ERI/APB:  */
#define PWRSTAT_CORE_DOMAIN_ON        0x00000001    /* set if core is powered on */
#define PWRSTAT_CORE_DOMAIN_ON_SHIFT        0
#define PWRSTAT_WAKEUP_RESET        0x00000002    /* [ERI only] 0=cold start, 1=PSO wakeup */
#define PWRSTAT_WAKEUP_RESET_SHIFT        1
#define PWRSTAT_CACHES_LOST_POWER    0x00000004    /* [ERI only] set if caches (/localmems?) lost power */
                            /* FIXME: does this include local memories? */
#define PWRSTAT_CACHES_LOST_POWER_SHIFT        2
#define PWRSTAT_CORE_STILL_NEEDED    0x00000010    /* set if others keeping core awake */
#define PWRSTAT_CORE_STILL_NEEDED_SHIFT        4
#define PWRSTAT_MEM_DOMAIN_ON        0x00000100    /* set if memory domain is powered on */
#define PWRSTAT_MEM_DOMAIN_ON_SHIFT        8
#define PWRSTAT_DEBUG_DOMAIN_ON        0x00001000    /* set if debug domain is powered on */
#define PWRSTAT_DEBUG_DOMAIN_ON_SHIFT        12
#define PWRSTAT_ALL_ON            PWRSTAT_CORE_DOMAIN_ON | PWRSTAT_MEM_DOMAIN_ON | PWRSTAT_DEBUG_DOMAIN_ON
#define PWRSTAT_CORE_WAS_RESET        0x00010000    /* [APB only] set if core got reset */
#define PWRSTAT_CORE_WAS_RESET_SHIFT        16
#define PWRSTAT_DEBUG_WAS_RESET        0x10000000    /* set if debug module got reset */
#define PWRSTAT_DEBUG_WAS_RESET_SHIFT        28
/*  JTAG:  */
#define J_PWRSTAT_CORE_DOMAIN_ON    0x01        /* set if core is powered on */
#define J_PWRSTAT_MEM_DOMAIN_ON        0x02        /* set if memory domain is powered on */
#define J_PWRSTAT_DEBUG_DOMAIN_ON    0x04        /* set if debug domain is powered on */
#define J_PWRSTAT_ALL_ON        J_PWRSTAT_CORE_DOMAIN_ON | J_PWRSTAT_MEM_DOMAIN_ON | J_PWRSTAT_DEBUG_DOMAIN_ON
#define J_PWRSTAT_CORE_STILL_NEEDED    0x08        /* set if others keeping core awake */
#define J_PWRSTAT_CORE_WAS_RESET    0x10        /* set if core got reset */
#define J_PWRSTAT_DEBUG_WAS_RESET    0x40        /* set if debug module got reset */
 
/*  Power Control register.  NOTE:  different bit positions in JTAG vs. ERI/APB !!  */
/*  ERI/APB:  */
#define PWRCTL_CORE_SHUTOFF        0x00000001    /* [ERI only] core wants to shut off on WAITI */
#define PWRCTL_CORE_SHUTOFF_SHIFT        0
#define PWRCTL_CORE_WAKEUP        0x00000001    /* [APB only] set to force core to stay powered on */
#define PWRCTL_CORE_WAKEUP_SHIFT        0
#define PWRCTL_MEM_WAKEUP        0x00000100    /* set to force memory domain to stay powered on */
#define PWRCTL_MEM_WAKEUP_SHIFT            8
#define PWRCTL_DEBUG_WAKEUP        0x00001000    /* set to force debug domain to stay powered on */
#define PWRCTL_DEBUG_WAKEUP_SHIFT        12
#define PWRCTL_ALL_ON            PWRCTL_CORE_WAKEUP | PWRCTL_MEM_WAKEUP | PWRCTL_DEBUG_WAKEUP
#define PWRCTL_CORE_RESET        0x00010000    /* [APB only] set to assert core reset */
#define PWRCTL_CORE_RESET_SHIFT            16
#define PWRCTL_DEBUG_RESET        0x10000000    /* set to assert debug module reset */
#define PWRCTL_DEBUG_RESET_SHIFT        28
/*  JTAG:  */
#define J_PWRCTL_CORE_WAKEUP        0x01        /* set to force core to stay powered on */
#define J_PWRCTL_MEM_WAKEUP        0x02        /* set to force memory domain to stay powered on */
#define J_PWRCTL_DEBUG_WAKEUP        0x04        /* set to force debug domain to stay powered on */
#define J_DEBUG_USE            0x80        /*  */
#define J_PWRCTL_ALL_ON            J_DEBUG_USE | J_PWRCTL_CORE_WAKEUP | J_PWRCTL_MEM_WAKEUP | J_PWRCTL_DEBUG_WAKEUP
#define J_PWRCTL_DEBUG_ON        J_DEBUG_USE | J_PWRCTL_DEBUG_WAKEUP
#define J_PWRCTL_CORE_RESET        0x10        /* set to assert core reset */
#define J_PWRCTL_DEBUG_RESET        0x40        /* set to assert debug module reset */
 
#define J_PWRCTL_WRITE_MASK        0xFF
#define J_PWRSTAT_WRITE_MASK        0xFF
 
#define PWRCTL_WRITE_MASK        ~0
#define PWRSTAT_WRITE_MASK        ~0
 
/************  The following are only relevant for JTAG, so perhaps belong in OCD only  **************/
 
/*  XDM 5-bit JTAG Instruction Register (IR) values:  */
#define XDM_IR_PWRCTL        0x08    /* select 8-bit Power/Reset Control (PRC) */
#define XDM_IR_PWRSTAT        0x09    /* select 8-bit Power/Reset Status (PRS) */
#define XDM_IR_NAR_SEL        0x1c    /* select altern. 8-bit NAR / 32-bit NDR (Nexus-style) */
#define XDM_IR_NDR_SEL        0x1d    /* select altern. 32-bit NDR / 8-bit NAR
                       (FIXME - functionality not yet in HW) */
#define XDM_IR_IDCODE        0x1e    /* select 32-bit JTAG IDCODE */
#define XDM_IR_BYPASS        0x1f    /* select 1-bit bypass */
 
#define XDM_IR_WIDTH        5    /* width of IR for Xtensa TAP */
 
/*  NAR register bits:  */
#define XDM_NAR_WRITE        0x01
#define XDM_NAR_ADDR_MASK    0xFE
#define XDM_NAR_ADDR_SHIFT    1
 
#define XDM_NAR_BUSY        0x02
#define XDM_NAR_ERROR        0x01
 
#define NEXUS_DIR_READ    0x00
#define    NEXUS_DIR_WRITE    0x01
 
/************  Define DCR register bits  **************/
 
#define DCR_ENABLEOCD        0x0000001
#define DCR_ENABLEOCD_SHIFT        0
#define DCR_DEBUG_INT        0x0000002
#define DCR_DEBUG_INT_SHIFT        1
#define DCR_DEBUG_OVERRIDE    0x0000004
#define DCR_DEBUG_OVERRIDE_SHIFT    2
#define DCR_DEBUG_INTERCEPT    0x0000008
#define DCR_DEBUG_INTERCEPT_SHIFT    3
#define DCR_MASK_NMI        0x0000020
#define DCR_MASK_NMI_SHIFT        5
#define DCR_STEP_ENABLE        0x0000040
#define DCR_STEP_ENABLE_SHIFT        6
#define DCR_BREAK_IN_EN        0x0010000
#define DCR_BREAK_IN_EN_SHIFT        16
#define DCR_BREAK_OUT_EN    0x0020000
#define DCR_BREAK_OUT_EN_SHIFT        17
#define DCR_DEBUG_INT_EN    0x0040000
#define DCR_DEBUG_INT_EN_SHIFT        18
#define DCR_DBG_SW_ACTIVE    0x0100000
#define DCR_DBG_SW_ACTIVE_SHIFT        20
#define DCR_STALL_IN_EN        0x0200000
#define DCR_STALL_IN_EN_SHIFT        21
#define DCR_DEBUG_OUT_EN    0x0400000
#define DCR_DEBUG_OUT_EN_SHIFT        22
#define DCR_BREAK_OUT_ITO    0x1000000
#define DCR_STALL_OUT_ITO    0x2000000
#define DCR_STALL_OUT_ITO_SHIFT        25
 
/************  Define DSR register bits  **************/
 
#define DOSR_EXECDONE_ER    0x01
#define DOSR_EXECDONE_SHIFT    0
#define DOSR_EXCEPTION_ER    0x02
#define DOSR_EXCEPTION_SHIFT    1
#define DOSR_BUSY        0x04
#define DOSR_BUSY_SHIFT        2
#define DOSR_OVERRUN        0x08
#define DOSR_OVERRUN_SHIFT    3
#define DOSR_INOCDMODE_ER    0x10
#define DOSR_INOCDMODE_SHIFT    4
#define DOSR_CORE_WROTE_DDR_ER        0x400
#define DOSR_CORE_WROTE_DDR_SHIFT    10
#define DOSR_CORE_READ_DDR_ER        0x800
#define DOSR_CORE_READ_DDR_SHIFT    11
#define DOSR_HOST_WROTE_DDR_ER        0x4000
#define DOSR_HOST_WROTE_DDR_SHIFT    14
#define DOSR_HOST_READ_DDR_ER        0x8000
#define DOSR_HOST_READ_DDR_SHIFT    15
 
#define DOSR_DEBUG_PEND_BIN        0x10000
#define DOSR_DEBUG_PEND_HOST        0x20000
#define DOSR_DEBUG_PEND_TRAX        0x40000
#define DOSR_DEBUG_BIN                0x100000
#define DOSR_DEBUG_HOST            0x200000
#define DOSR_DEBUG_TRAX            0x400000
#define DOSR_DEBUG_PEND_BIN_SHIFT    16
#define DOSR_DEBUG_PEND_HOST_SHIFT    17
#define DOSR_DEBUG_PEND_TRAX_SHIFT    18
#define DOSR_DEBUG_BREAKIN              0x0100000
#define DOSR_DEBUG_BREAKIN_SHIFT        20
#define DOSR_DEBUG_HOST_SHIFT        21
#define DOSR_DEBUG_TRAX_SHIFT        22
 
#define DOSR_DEBUG_STALL        0x1000000
#define DOSR_DEBUG_STALL_SHIFT        24
 
#define DOSR_CORE_ON            0x40000000
#define DOSR_CORE_ON_SHIFT        30
#define DOSR_DEBUG_ON            0x80000000
#define DOSR_DEBUG_ON_SHIFT        31
 
/********** Performance monitor registers bits **********/
 
#define PERF_PMG_ENABLE                 0x00000001 /* global enable bit */
#define PERF_PMG_ENABLE_SHIFT           0
 
#define PERF_PMCTRL_INT_ENABLE          0x00000001 /* assert interrupt on overflow */
#define PERF_PMCTRL_INT_ENABLE_SHIFT    0
#define PERF_PMCTRL_KRNLCNT             0x00000008 /* ignore TRACELEVEL */
#define PERF_PMCTRL_KRNLCNT_SHIFT       3
#define PERF_PMCTRL_TRACELEVEL          0x000000F0 /* count when CINTLEVEL <= TRACELEVEL */
#define PERF_PMCTRL_TRACELEVEL_SHIFT    4
#define PERF_PMCTRL_SELECT              0x00001F00 /* events group selector */
#define PERF_PMCTRL_SELECT_SHIFT        8
#define PERF_PMCTRL_MASK                0xFFFF0000 /* events mask */
#define PERF_PMCTRL_MASK_SHIFT          16
 
#define PERF_PMSTAT_OVERFLOW            0x00000001 /* counter overflowed */
#define PERF_PMSTAT_OVERFLOW_SHIFT      0
#define PERF_PMSTAT_INT                 0x00000010 /* interrupt asserted */
#define PERF_PMSTAT_INT_SHIFT           4
 
#if defined (USE_XDM_REGNAME) || defined (USE_DAP_REGNAME)
/*  Describes XDM register:  */
typedef struct {
    int    reg;
    char*  name;
} regdef_t;
 
/*char* regname(regdef_t* list, int regno)
{
  unsigned i;
  for(i = 0 ; i < (sizeof(list) / sizeof(regdef_t)); i++){
    if(list[i].reg == regno)
      return list[i].name;
  }
  return "???";
}*/
 
/*
 *  Returns the name of the specified XDM register number,
 *  or simply "???" if the register number is not recognized.
 *  FIXME - requires -1 as the last entry - change to compare the name to ???
 *  or even better, make the code above to work.
 */
static char * regname(regdef_t* list, int reg)
{
  int i = 0;
  while (list[i].reg != -1){
    if (list[i].reg == reg)
      break;
    i++;
  }
  return list[i].name;
}
 
#if defined (USE_XDM_REGNAME)
regdef_t xdm_reglist[] =
{
  {XDM_TRAX_ID          ,"TRAX_ID"      },
  {XDM_TRAX_CONTROL      ,"CONTROL"      },
  {XDM_TRAX_STATUS      ,"STATUS"       },
  {XDM_TRAX_DATA          ,"DATA"         },
  {XDM_TRAX_ADDRESS      ,"ADDRESS"      },
  {XDM_TRAX_TRIGGER      ,"TRIGGER PC"   },
  {XDM_TRAX_MATCH         ,"PC MATCH"     },
  {XDM_TRAX_DELAY      ,"DELAY CNT."   },
  {XDM_TRAX_STARTADDR      ,"START ADDRESS"},
  {XDM_TRAX_ENDADDR      ,"END ADDRESS"  },
  {XDM_TRAX_DEBUGPC      ,"DEBUG PC"  },
  {XDM_TRAX_P4CHANGE      ,"P4 CHANGE"    },
  {XDM_TRAX_P4REV         ,"P4 REV."      },
  {XDM_TRAX_P4DATE      ,"P4 DATE"      },
  {XDM_TRAX_P4TIME      ,"P4 TIME"      },
  {XDM_TRAX_PDSTATUS      ,"PD STATUS"    },
  {XDM_TRAX_PDDATA      ,"PD DATA"      },
  {XDM_TRAX_STOP_PC      ,"STOP PC"      },
  {XDM_TRAX_STOP_ICNT      ,"STOP ICNT"    },
  {XDM_TRAX_MSG_STATUS      ,"MSG STAT."    },
  {XDM_TRAX_FSM_STATUS      ,"FSM STAT."    },
  {XDM_TRAX_IB_STATUS      ,"IB STAT."     },
 
  {XDM_OCD_ID         ,"OCD_ID"  },
  {XDM_OCD_DCR_CLR    ,"DCR_CLR" },
  {XDM_OCD_DCR_SET    ,"DCR_SET" },
  {XDM_OCD_DSR        ,"DOSR"    },
  {XDM_OCD_DDR        ,"DDR"     },
  {XDM_OCD_DDREXEC    ,"DDREXEC" },
  {XDM_OCD_DIR0EXEC   ,"DIR0EXEC"},
  {XDM_OCD_DIR0       ,"DIR0"    },
  {XDM_OCD_DIR1       ,"DIR1"    },
  {XDM_OCD_DIR2       ,"DIR2"    },
  {XDM_OCD_DIR3       ,"DIR3"    },
  {XDM_OCD_DIR4       ,"DIR4"    },
  {XDM_OCD_DIR5       ,"DIR5"    },
  {XDM_OCD_DIR6       ,"DIR6"    },
  {XDM_OCD_DIR7       ,"DIR7"    },
 
  {XDM_PERF_PMG       ,"PMG"    },
  {XDM_PERF_INTPC     ,"INTPC"  },
  {XDM_PERF_PM0       ,"PM0 "   },
  {XDM_PERF_PM1       ,"PM1 "   },
  {XDM_PERF_PM2       ,"PM2 "   },
  {XDM_PERF_PM3       ,"PM3 "   },
  {XDM_PERF_PM4       ,"PM4 "   },
  {XDM_PERF_PM5       ,"PM5 "   },
  {XDM_PERF_PM6       ,"PM6 "   },
  {XDM_PERF_PM7       ,"PM7 "   },
  {XDM_PERF_PMCTRL0   ,"PMCTRL0"},
  {XDM_PERF_PMCTRL1   ,"PMCTRL1"},
  {XDM_PERF_PMCTRL2   ,"PMCTRL2"},
  {XDM_PERF_PMCTRL3   ,"PMCTRL3"},
  {XDM_PERF_PMCTRL4   ,"PMCTRL4"},
  {XDM_PERF_PMCTRL5   ,"PMCTRL5"},
  {XDM_PERF_PMCTRL6   ,"PMCTRL6"},
  {XDM_PERF_PMCTRL7   ,"PMCTRL7"},
  {XDM_PERF_PMSTAT0   ,"PMSTAT0"},
  {XDM_PERF_PMSTAT1   ,"PMSTAT1"},
  {XDM_PERF_PMSTAT2   ,"PMSTAT2"},
  {XDM_PERF_PMSTAT3   ,"PMSTAT3"},
  {XDM_PERF_PMSTAT4   ,"PMSTAT4"},
  {XDM_PERF_PMSTAT5   ,"PMSTAT5"},
  {XDM_PERF_PMSTAT6   ,"PMSTAT6"},
  {XDM_PERF_PMSTAT7   ,"PMSTAT7"},
 
  {XDM_MISC_PWRCTL    ,"PWRCTL"  },
  {XDM_MISC_PWRSTAT   ,"PWRSTAT" },
  {XDM_MISC_ERISTAT   ,"ERISTAT" },
  {XDM_MISC_DATETIME  ,"DATETIME"},
  {XDM_MISC_UBID      ,"UBID"    },
  {XDM_MISC_CID       ,"CID"     },
 
  {XDM_CS_ITCTRL      ,"ITCTRL"     },
  {XDM_CS_CLAIMSET    ,"CLAIMSET"   },
  {XDM_CS_CLAIMCLR    ,"CLAIMCLR"   },
  {XDM_CS_LOCK_ACCESS ,"LOCK_ACCESS"},
  {XDM_CS_LOCK_STATUS ,"LOCK_STATUS"},
  {XDM_CS_AUTH_STATUS ,"AUTH_STATUS"},
  {XDM_CS_DEV_ID      ,"DEV_ID"     },
  {XDM_CS_DEV_TYPE    ,"DEV_TYPE"   },
  {XDM_CS_PER_ID4     ,"PER_ID4"    },
  {XDM_CS_PER_ID5     ,"PER_ID5"    },
  {XDM_CS_PER_ID6     ,"PER_ID6"    },
  {XDM_CS_PER_ID7     ,"PER_ID7"    },
  {XDM_CS_PER_ID0     ,"PER_ID0"    },
  {XDM_CS_PER_ID1     ,"PER_ID1"    },
  {XDM_CS_PER_ID2     ,"PER_ID2"    },
  {XDM_CS_PER_ID3     ,"PER_ID3"    },
  {XDM_CS_COMP_ID0    ,"COMP_ID0"   },
  {XDM_CS_COMP_ID1    ,"COMP_ID1"   },
  {XDM_CS_COMP_ID2    ,"COMP_ID2"   },
  {XDM_CS_COMP_ID3    ,"COMP_ID3"   },
  {-1                 ,"???"        },
};
#endif
 
#endif
 
#endif /* _XDM_REGS_H_ */