Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

  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
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
/*	$NetBSD: octeon_corereg.h,v 1.2 2015/06/01 22:55:12 matt Exp $	*/

/*
 * Copyright (c) 2007 Internet Initiative Japan, Inc.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#ifndef _OCTEON_COREREG_H_
#define _OCTEON_COREREG_H_

/*
 * Core Coprocessor 0 Privileged Registers.
 */

#ifdef _LOCORE
#define	CP0_INDEX		$0	/* Index Register */
#define	CP0_RANDOM		$1	/* Random Register */
#define	CP0_ENTRYLO0		$2	/* EntryLo0 Registers */
#define	CP0_ENTRYLO1		$3	/* EntryLo1 Registers */
#define	CP0_CONTEXT		$4	/* Context Register */
#define	CP0_PAGEMASK		$5	/* PageMask Register */
#define	CP0_PAGEGRAIN		$5, 1	/* PageGrain Register */
#define	CP0_WIRED		$6	/* Wired Register */
#define	CP0_HWRENA		$7	/* HWREna Register */
#define	CP0_BADVADDR		$8	/* BadVAddr Register */
#define	CP0_COUNT		$9	/* Count Register */
#define	CP0_ENTRYHI		$10	/* EntryHi Register */
#define	CP0_COMPARE		$11	/* Compare Register */
#define	CP0_STATUS		$12	/* Status Register */
#define	CP0_INTCTL		$12, 1	/* IntCtl Register */
#define	CP0_SRSCTL		$12, 2	/* SRSCtl Register */
#define	CP0_CAUSE		$13	/* Cause Register */
#define	CP0_EPC			$14	/* Exception Program Counter */
#define	CP0_PRID		$15	/* PRId Register */
#define	CP0_EBASE		$15, 1	/* EBase Register */
#define	CP0_CONFIG		$16	/* Config Register */
#define	CP0_CONFIG1		$16, 1	/* Config1 Register */
#define	CP0_CONFIG2		$16, 2	/* Config2 Register */
#define	CP0_CONFIG3		$16, 3	/* Config3 Register */
#define	CP0_WATCHLO		$18	/* WatchLo Register */
#define	CP0_WATCHLO1		$18, 1	
#define	CP0_WATCHHI		$19	/* WatchHi Register */
#define	CP0_WATCHHI1		$19, 1	
#define	CP0_XCONTEXT		$20	/* XContext Register */
#define	CP0_DEBUG		$23	/* Debug Register */
#define	CP0_DPC			$24	/* Debug Exception Program Counter Register */
#define	CP0_PCCTL		$25	/* Performance Counter Control Register */
#define	CP0_PCCTL1		$25, 2	
#define	CP0_PCCNT		$25, 1	/* Performance Counter Counter Register */
#define	CP0_PCCNT1		$25, 3	
#define	CP0_ERROREPC		$30	/* ErrorEPC */
#define	CP0_DESAVE		$31	/* DESAVE Register */
#define	CP0_CACHEERRI		$27	/* CacheErr (Icache) */
#define	CP0_CACHEERRD		$27, 1	/* CacheErr (Dcache) */
#define	CP0_TAGLOI		$28	/* TagLo Register (Icache) */
#define	CP0_TAGLOD		$28, 2	/* TagLo Register (Dcache) */
#define	CP0_DATALOI		$28, 1	/* DataLo Register (Icache) */
#define	CP0_DATALOD		$28, 3	/* DataLo Register (Dcache) */
#define	CP0_TAGHI		$29, 2	/* TagHi Register */
#define	CP0_DATAHII		$29, 1	/* DataHi Register (Icache) */
#define	CP0_DATAHID		$29, 3	/* DataHi Register (Dcache) */
#define	CP0_CVMCTL		$9, 7	/* CvmCtl Register */
#define	CP0_CVMMEMCTL		$11, 7	/* CvmMemCtl Register */
#define	CP0_CVMCNT		$9, 6	/* CvmCount Register */
#define	CP0_MCD			$22	/* Multi-Core Debug Register */
#endif

/* ---- register bits */

/* Index Register */

#define	CP0_INDEX_P				UINT32_C(0x80000000)
#define	CP0_INDEX_XXX_30_5			0x7fffffe0
#define	CP0_INDEX_INDEX				0x0000001f

/* Random Register */

#define	CP0_RANDOM_XXX_31_5			0xffffffe0
#define	CP0_RANDOM_RANDOM			0x0000001f

/* EntryLo0, EntryLo1 Registers */

#define	CP0_ENTRYLON_FILL			UINT64_C(0xfffff80000000000)
#define	CP0_ENTRYLON_PFNX			UINT64_C(0x000007ffc0000000)
#define	CP0_ENTRYLON_PFN			UINT64_C(0x000000003fffffc0)
#define	CP0_ENTRYLON_C				UINT64_C(0x0000000000000038)
#define	CP0_ENTRYLON_D				UINT64_C(0x0000000000000004)
#define	CP0_ENTRYLON_V				UINT64_C(0x0000000000000002)
#define	CP0_ENTRYLON_G				UINT64_C(0x0000000000000001)

/* Context Register */

#define	CP0_CONTEXT_PTEBASE			UINT64_C(0xffffffffff800000)
#define	CP0_CONTEXT_BADVPN2			UINT64_C(0x00000000007ffff0)
#define	CP0_CONTEXT_XXX_3_0			UINT64_C(0x000000000000000f)

/* PageMask Register */

#define	CP0_PAGEMASK_XXX_31_29			UINT64_C(0xe000000000000000)
#define	CP0_PAGEMASK_MASK			UINT64_C(0x1fffffffffffe000)
#define	CP0_PAGEMASK_MASKX			UINT64_C(0x0000000000001800)
#define	CP0_PAGEMASK_XXX_10_0			UINT64_C(0x0000000000000fff)

/* PageGrain Register */

#define	CP0_PAGEGRAIN_ASE			0xc0000000
#define	CP0_PAGEGRAIN_ELPA			UINT32_C(0x20000000)
#define	CP0_PAGEGRAIN_ESP			UINT32_C(0x10000000)
#define	CP0_PAGEGRAIN_XXX_27_13			0x0fffe000
#define	CP0_PAGEGRAIN_XXX_7_0			0x000000ff

/* Wired Register */

#define	CP0_WIRED_XXX_31_5			UINT64_C(0xffffffffffffffe0)
#define	CP0_WIRED_WIRED				UINT64_C(0x000000000000001f)

/* HWREna Register */

#define	CP0_HWRENA_MASKX			0xc0000000
#define	CP0_HWRENA_XXX_29_4			0x3ffffff0
#define	CP0_HWRENA_MASK				0x0000000f

/* BadVAddr Register */

/* Count Register */

/* EntryHi Register */

#define	CP0_ENTRYHI_R				UINT64_C(0xc000000000000000)
#define	CP0_ENTRYHI_FILL			UINT64_C(0x3ffe000000000000)
#define	CP0_ENTRYHI_VPN2			UINT64_C(0x0001ffffffffe000)
#define	CP0_ENTRYHI_VPN2X			UINT64_C(0x0000000000001800)
#define	CP0_ENTRYHI_XXX_10_8			UINT64_C(0x0000000000000700)
#define	CP0_ENTRYHI_ASID			UINT64_C(0x00000000000000ff)

/* Compare Register */

/* Status Register */

#define	CP0_STATUS_CU3				UINT32_C(0x80000000)
#define	CP0_STATUS_CU2				UINT32_C(0x40000000)
#define	CP0_STATUS_CU1				UINT32_C(0x20000000)
#define	CP0_STATUS_CU0				UINT32_C(0x10000000)
#define	CP0_STATUS_RP				UINT32_C(0x08000000)
#define	CP0_STATUS_FR				UINT32_C(0x04000000)
#define	CP0_STATUS_RE				UINT32_C(0x02000000)
#define	CP0_STATUS_MX				UINT32_C(0x01000000)
#define	CP0_STATUS_PX				UINT32_C(0x00800000)
#define	CP0_STATUS_BEV				UINT32_C(0x00400000)
#define	CP0_STATUS_TS				UINT32_C(0x00200000)
#define	CP0_STATUS_SR				UINT32_C(0x00100000)
#define	CP0_STATUS_NMI				UINT32_C(0x00080000)
#define	CP0_STATUS_XXX_18_16			0x00070000
#define	CP0_STATUS_IM_7_4			0x0000fc00
#define	CP0_STATUS_IM_1_0			0x00000300
#define	CP0_STATUS_KX				UINT32_C(0x00000080)
#define	CP0_STATUS_SX				UINT32_C(0x00000040)
#define	CP0_STATUS_UX				UINT32_C(0x00000020)
#define	CP0_STATUS_KSU				0x00000018
#define	CP0_STATUS_ERL				UINT32_C(0x00000004)
#define	CP0_STATUS_EXL				UINT32_C(0x00000002)
#define	CP0_STATUS_IE				UINT32_C(0x00000001)

/* IntCtl Register */

#define	CP0_INTCTL_IPTI				0xe0000000
#define	CP0_INTCTL_IPPCI			0x1c000000
#define	CP0_INTCTL_XXX_25_10			0x03fffc00
#define	CP0_INTCTL_VS				0x000003e0
#define	CP0_INTCTL_XXX_4_0			0x0000001f

/* SRSCtl Register */

#define	CP0_SRSCTL_XXX_31_30			0xc0000000
#define	CP0_SRSCTL_HSS				0x3c000000
#define	CP0_SRSCTL_XXX_25_22			0x03c00000
#define	CP0_SRSCTL_EICSS			0x003c0000
#define	CP0_SRSCTL_XXX_17_16			0x00030000
#define	CP0_SRSCTL_ESS				0x0000f000
#define	CP0_SRSCTL_XXX_11_10			0x00000c00
#define	CP0_SRSCTL_EXL				0x000003c0
#define	CP0_SRSCTL_XXX_5_4			0x00000030
#define	CP0_SRSCTL_CSS				0x0000000f

/* Cause Register */

#define	CP0_CAUSE_BD				UINT32_C(0x80000000)
#define	CP0_CAUSE_TI				UINT32_C(0x40000000)
#define	CP0_CAUSE_CE				0x30000000
#define	CP0_CAUSE_DC				UINT32_C(0x08000000)
#define	CP0_CAUSE_PCI				UINT32_C(0x04000000)
#define	CP0_CAUSE_XXX_25_24			0x03000000
#define	CP0_CAUSE_IV				UINT32_C(0x00800000)
#define	CP0_CAUSE_WP				UINT32_C(0x00400000)
#define	CP0_CAUSE_XXX_21_16			0x003f0000
#define	CP0_CAUSE_IP_7_4			0x0000f000
#define	CP0_CAUSE_IP_3_2			0x00000c00
#define	CP0_CAUSE_IP_1_0			0x00000300
#define	CP0_CAUSE_XXX_7				UINT32_C(0x00000080)
#define	CP0_CAUSE_EXCCODE			0x0000007c
#define	CP0_CAUSE_XXX_1_0			0x00000003

/* Exception Program Counter */

/* PRId Register */

#define	CP0_PRID_COMPANY_OPTIONS		0xff000000
#define	CP0_PRID_COMPANY_ID			0x00ff0000
#define	CP0_PRID_PROCESSOR_ID			0x0000ff00
#define	CP0_PRID_REVISION			0x000000ff

/* EBase Register */

#define	CP0_EBASE_ALWAYS			UINT32_C(0x80000000)
#define	CP0_EBASE_XXX_30			UINT32_C(0x40000000)
#define	CP0_EBASE_EXCEPTION_BASE		0x3ffff000
#define	CP0_EBASE_XXX_11_10			0x00000c00
#define	CP0_EBASE_CPU_NUM			0x000003ff

/* Config Register */

#define	CP0_CONFIG_M				UINT32_C(0x80000000)
#define	CP0_CONFIG_IMPL				0x7fff0000
#define	CP0_CONFIG_BE				UINT32_C(0x00008000)
#define	CP0_CONFIG_AT				0x00006000
#define	CP0_CONFIG_AR				0x00001c00
#define	CP0_CONFIG_MT				0x00000380
#define	CP0_CONFIG_XXX_6_4			0x00000070
#define	CP0_CONFIG_VI				UINT32_C(0x00000008)
#define	CP0_CONFIG_KO				0x00000007

/* Config1 Register */

#define	CP0_CONFIG1_M				UINT32_C(0x10000000)
#define	CP0_CONFIG1_MMUSIZE_1			0x7e000000
#define	CP0_CONFIG1_IS				0x01c00000
#define	CP0_CONFIG1_IL				0x00380000
#define	CP0_CONFIG1_IA				0x00070000
#define	CP0_CONFIG1_DS				0x0000e000
#define	CP0_CONFIG1_DL				0x00001c00
#define	CP0_CONFIG1_DA				0x00000380
#define	CP0_CONFIG1_C2				UINT32_C(0x00000040)
#define	CP0_CONFIG1_MD				UINT32_C(0x00000020)
#define	CP0_CONFIG1_PC				UINT32_C(0x00000010)
#define	CP0_CONFIG1_WR				UINT32_C(0x00000008)
#define	CP0_CONFIG1_CA				UINT32_C(0x00000004)
#define	CP0_CONFIG1_EP				UINT32_C(0x00000002)
#define	CP0_CONFIG1_FP				UINT32_C(0x00000001)

/* Config2 Register */

#define	CP0_CONFIG2_M				UINT32_C(0x80000000)
#define	CP0_CONFIG2_TU				0x70000000
#define	CP0_CONFIG2_TS				0x0f000000
#define	CP0_CONFIG2_TL				0x00f00000
#define	CP0_CONFIG2_TA				0x000f0000
#define	CP0_CONFIG2_SU				0x0000f000
#define	CP0_CONFIG2_SS				0x00000f00
#define	CP0_CONFIG2_SL				0x000000f0
#define	CP0_CONFIG2_SA				0x0000000f

/* Config3 Register */

#define	CP0_CONFIG3_M				UINT32_C(0x80000000)
#define	CP0_CONFIG3_XXX_30_8			0x7fffff00
#define	CP0_CONFIG3_LPA				UINT32_C(0x00000080)
#define	CP0_CONFIG3_VEIC			UINT32_C(0x00000040)
#define	CP0_CONFIG3_VINT			UINT32_C(0x00000020)
#define	CP0_CONFIG3_SP				UINT32_C(0x00000010)
#define	CP0_CONFIG3_XXX_3_2			0x0000000c
#define	CP0_CONFIG3_SM				UINT32_C(0x00000002)
#define	CP0_CONFIG3_TL				UINT32_C(0x00000001)

/* WatchLo Register */

#define	CP0_WATCHLO_VADDR			UINT64_C(0xfffffffffffffff8)
#define	CP0_WATCHLO_I				UINT64_C(0x0000000000000004)
#define	CP0_WATCHLO_R				UINT64_C(0x0000000000000002)
#define	CP0_WATCHLO_W				UINT64_C(0x0000000000000001)

/* WatchHi Register */

#define	CP0_WATCHHI_M				UINT32_C(0x80000000)
#define	CP0_WATCHHI_G				UINT32_C(0x40000000)
#define	CP0_WATCHHI_XXX_29_24			0x3f000000
#define	CP0_WATCHHI_ASID			0x00ff0000
#define	CP0_WATCHHI_XXX_15_12			0x0000f000
#define	CP0_WATCHHI_MASK			0x00000ff8
#define	CP0_WATCHHI_I				UINT32_C(0x00000004)
#define	CP0_WATCHHI_R				UINT32_C(0x00000002)
#define	CP0_WATCHHI_W				UINT32_C(0x00000001)

/* XContext Register */

#define	CP0_XCONTEXT_PTEBASE			UINT64_C(0xfffffc0000000000)
#define	CP0_XCONTEXT_R				UINT64_C(0x0000030000000000)
#define	CP0_XCONTEXT_BADVPN2			UINT64_C(0x000000fffffffff0)
#define	CP0_XCONTEXT_XXX_3_0			UINT64_C(0x000000000000000f)

/* Debug Register */

#define	CP0_DEBUG_DBD				UINT32_C(0x80000000)
#define	CP0_DEBUG_DM				UINT32_C(0x40000000)
#define	CP0_DEBUG_NODCR				UINT32_C(0x20000000)
#define	CP0_DEBUG_LSNM				UINT32_C(0x10000000)
#define	CP0_DEBUG_DOZE				UINT32_C(0x08000000)
#define	CP0_DEBUG_HALT				UINT32_C(0x04000000)
#define	CP0_DEBUG_COUNTDM			UINT32_C(0x02000000)
#define	CP0_DEBUG_IBUSEP			UINT32_C(0x01000000)
#define	CP0_DEBUG_MCHECKP			UINT32_C(0x00800000)
#define	CP0_DEBUG_CACHEEP			UINT32_C(0x00400000)
#define	CP0_DEBUG_DBUSEP			UINT32_C(0x00200000)
#define	CP0_DEBUG_IEXI				UINT32_C(0x00100000)
#define	CP0_DEBUG_DDBSIMPR			UINT32_C(0x00080000)
#define	CP0_DEBUG_DDBLIMPR			UINT32_C(0x00040000)
#define	CP0_DEBUG_EJTAG				0x00038000
#define	CP0_DEBUG_DEXCCODE			0x00007c00
#define	CP0_DEBUG_NOSST				UINT32_C(0x00000200)
#define	CP0_DEBUG_SST				UINT32_C(0x00000100)
#define	CP0_DEBUG_XXX_7_6			0x000000c0
#define	CP0_DEBUG_DINT				UINT32_C(0x00000020)
#define	CP0_DEBUG_DIB				UINT32_C(0x00000010)
#define	CP0_DEBUG_DDBS				UINT32_C(0x00000008)
#define	CP0_DEBUG_DDBL				UINT32_C(0x00000004)
#define	CP0_DEBUG_DBP				UINT32_C(0x00000002)
#define	CP0_DEBUG_DSS				UINT32_C(0x00000001)

/* Debug Exception Program Counter Register */

/* Performance Counter Control Register */

#define	CP0_PCCTL_M				UINT32_C(0x80000000)
#define	CP0_PCCTL_W				UINT32_C(0x40000000)
#define	CP0_PCCTL_XXX_29_11			0x3ffff800
#define	CP0_PCCTL_EVENT				0x000007e0
#define	CP0_PCCTL_IE				UINT32_C(0x00000010)
#define	CP0_PCCTL_U				UINT32_C(0x00000008)
#define	CP0_PCCTL_S				UINT32_C(0x00000004)
#define	CP0_PCCTL_K				UINT32_C(0x00000002)
#define	CP0_PCCTL_EXL				UINT32_C(0x00000001)

/* Performance Counter Counter Register */

/* ErrorEPC */

/* DESAVE Register */

/*
 * Cavium Networks-Specific Coprocessor 0 Register
 */

/* CacheErr (Icache) */

#define	CP0_CACHEERRI_XXX_63_55			UINT64_C(0xff80000000000000)
#define	CP0_CACHEERRI_BADCOLF			UINT64_C(0x007f000000000000)
#define	CP0_CACHEERRI_XXX_47			UINT64_C(0x0000800000000000)
#define	CP0_CACHEERRI_BADCOL			UINT64_C(0x00007f0000000000)
#define	CP0_CACHEERRI_XXX_39_37			UINT64_C(0x000000e000000000)
#define	CP0_CACHEERRI_LRUFAIL			UINT64_C(0x0000001000000000)
#define	CP0_CACHEERRI_AESFAIL			UINT64_C(0x0000000800000000)
#define	CP0_CACHEERRI_HSHFAIL			UINT64_C(0x0000000400000000)
#define	CP0_CACHEERRI_BHTBROKE			UINT64_C(0x0000000200000000)
#define	CP0_CACHEERRI_ICBROKE			UINT64_C(0x0000000100000000)
#define	CP0_CACHEERRI_XXX_31_15			UINT64_C(0x00000000ffff8000)
#define	CP0_CACHEERRI_QW			UINT64_C(0x0000000000006000)
#define	CP0_CACHEERRI_ROW			UINT64_C(0x0000000000001800)
#define	CP0_CACHEERRI_SET			UINT64_C(0x00000000000007e0)
#define	CP0_CACHEERRI_WAY			UINT64_C(0x0000000000000018)
#define	CP0_CACHEERRI_XXX_2_1			UINT64_C(0x0000000000000006)
#define	CP0_CACHEERRI_DPERR			UINT64_C(0x0000000000000001)

/* CacheErr (Dcache) */

#define	CP0_CACHEERRD_XXX_63_13			UINT64_C(0xffffffffffffe000)
#define	CP0_CACHEERRD_SET			UINT64_C(0x0000000000001f80)
#define	CP0_CACHEERRD_VA63			UINT64_C(0x0000000000000078)
#define	CP0_CACHEERRD_XXX_2_1			UINT64_C(0x0000000000000006)
#define	CP0_CACHEERRD_PERR			UINT64_C(0x0000000000000001)

/* TagLo Register (Icache) */

#define	CP0_TAGLOI_R				UINT64_C(0xc000000000000000)
#define	CP0_TAGLOI_XXX_61_60			UINT64_C(0x3000000000000000)
#define	CP0_TAGLOI_ASID				UINT64_C(0x0f00000000000000)
#define	CP0_TAGLOI_XXX_51_49			UINT64_C(0x00f0000000000000)
#define	CP0_TAGLOI_TAG				UINT64_C(0x000fffffffffe000)
#define	CP0_TAGLOI_INDEX			UINT64_C(0x0000000000001f80)
#define	CP0_TAGLOI_XXX_6_2			UINT64_C(0x000000000000007c)
#define	CP0_TAGLOI_G				UINT64_C(0x0000000000000002)
#define	CP0_TAGLOI_VALID			UINT64_C(0x0000000000000001)

/* TagLo Register (Dcache) */

#define	CP0_TAGLOD_R				UINT64_C(0xc000000000000000)
#define	CP0_TAGLOD_XXX_61_60			UINT64_C(0x3000000000000000)
#define	CP0_TAGLOD_ASID				UINT64_C(0x0f00000000000000)
#define	CP0_TAGLOD_XXX_51_49			UINT64_C(0x00f0000000000000)
#define	CP0_TAGLOD_TAG				UINT64_C(0x000fffffffffff80)
#define	CP0_TAGLOD_XXX_6_2			UINT64_C(0x000000000000007c)
#define	CP0_TAGLOD_G				UINT64_C(0x0000000000000002)
#define	CP0_TAGLOD_VALID			UINT64_C(0x0000000000000001)

/* DataLo Register (Icache) */

/* DataLo Register (Dcache) */

/* TagHi Register */

#define	CP0_TAGHI_XXX_63_36			UINT64_C(0xfffffff000000000)
#define	CP0_TAGHI_PTAG				UINT64_C(0x0000000fffffff80)
#define	CP0_TAGHI_XXX_6_1			UINT64_C(0x000000000000007e)
#define	CP0_TAGHI_VALID				UINT64_C(0x0000000000000001)

/* DataHi Register (Icache) */

#define	CP0_DATAHII_XXX_63_8			UINT64_C(0xffffffffffffff00)
#define	CP0_DATAHII_PAR				UINT64_C(0x00000000000000ff)

/* DataHi Register (Dcache) */

#define	CP0_DATAHID_XXX_63_8			UINT64_C(0xffffffffffffff00)
#define	CP0_DATAHID_PAR				UINT64_C(0x00000000000000ff)

/* CvmCtl Register */

#define	CP0_CVMCTL_XXX_63_32			UINT64_C(0xffffffff00000000)
#define	CP0_CVMCTL_FUSE_STARTBIT		UINT64_C(0x0000000080000000)
#define	CP0_CVMCTL_XXX_30			UINT64_C(0x0000000040000000)
#define	CP0_CVMCTL_KASUMI			UINT64_C(0x0000000020000000)
#define	CP0_CVMCTL_NODFA_CP21			UINT64_C(0x0000000010000000)
#define	CP0_CVMCTL_NOMUL			UINT64_C(0x0000000008000000)
#define	CP0_CVMCTL_NOCRYPTO			UINT64_C(0x0000000004000000)
#define	CP0_CVMCTL_RST_SHT			UINT64_C(0x0000000002000000)
#define	CP0_CVMCTL_BIST_DIS			UINT64_C(0x0000000001000000)
#define	CP0_CVMCTL_DISSETPRED			UINT64_C(0x0000000000800000)
#define	CP0_CVMCTL_DISJRPRED			UINT64_C(0x0000000000400000)
#define	CP0_CVMCTL_DISICACHE			UINT64_C(0x0000000000200000)
#define	CP0_CVMCTL_DISWAIT			UINT64_C(0x0000000000100000)
#define	CP0_CVMCTL_DEFET			UINT64_C(0x0000000000080000)
#define	CP0_CVMCTL_DISCO			UINT64_C(0x0000000000040000)
#define	CP0_CVMCTL_DISCE			UINT64_C(0x0000000000020000)
#define	CP0_CVMCTL_DDCLK			UINT64_C(0x0000000000010000)
#define	CP0_CVMCTL_DCICLK			UINT64_C(0x0000000000008000)
#define	CP0_CVMCTL_REPUN			UINT64_C(0x0000000000004000)
#define	CP0_CVMCTL_IPREF			UINT64_C(0x0000000000002000)
#define	CP0_CVMCTL_USEUN			UINT64_C(0x0000000000001000)
#define	CP0_CVMCTL_DISIOCACHE			UINT64_C(0x0000000000000800)
#define	CP0_CVMCTL_IRAND			UINT64_C(0x0000000000000400)
#define	CP0_CVMCTL_IPPCI			UINT64_C(0x0000000000000380)
#define	CP0_CVMCTL_IPTI				UINT64_C(0x0000000000000070)
#define	CP0_CVMCTL_XXX_3_2			UINT64_C(0x000000000000000c)
#define	CP0_CVMCTL_LE				UINT64_C(0x0000000000000002)
#define	CP0_CVMCTL_USELY			UINT64_C(0x0000000000000001)

#define	CP0_CVMCTL_BITS \
	"\177"		/* new format */ \
	"\020"		/* hex display */ \
	"\020"		/* %016x format */ \
	"b\x1f"		"FUSE_STARTBIT\0" \
	"b\x1c"		"NODFA_CP21\0" \
	"b\x1b"		"NOMUL\0" \
	"b\x1a"		"NOCRYPTO\0" \
	"b\x19"		"RST_SHT\0" \
	"b\x18"		"BIST_DIS\0" \
	"b\x17"		"DISSETPRED\0" \
	"b\x16"		"DISJRPRED\0" \
	"b\x15"		"DISICACHE\0" \
	"b\x14"		"DISWAIT\0" \
	"b\x13"		"DEFET\0" \
	"b\x12"		"DISCO\0" \
	"b\x11"		"DISCE\0" \
	"b\x10"		"DDCLK\0" \
	"b\x0f"		"DCICLK\0" \
	"b\x0e"		"REPUN\0" \
	"b\x0d"		"IPREF\0" \
	"b\x0c"		"USEUN\0" \
	"b\x0b"		"DISIOCACHE\0" \
	"b\x0a"		"IRAND\0" \
	"f\x07\x03"	"IPPCI\0" \
	"f\x04\x03"	"IPTI\0" \
	"b\x01"		"LE\0" \
	"b\x00"		"USELY\0"

/* CvmMemCtl Register */

#define	CP0_CVMMEMCTL_TLBBIST			UINT64_C(0x8000000000000000)
#define	CP0_CVMMEMCTL_L1CBIST			UINT64_C(0x4000000000000000)
#define	CP0_CVMMEMCTL_L1DBIST			UINT64_C(0x2000000000000000)
#define	CP0_CVMMEMCTL_DCMBIST			UINT64_C(0x1000000000000000)
#define	CP0_CVMMEMCTL_PTGBIST			UINT64_C(0x0800000000000000)
#define	CP0_CVMMEMCTL_WBFBIST			UINT64_C(0x0400000000000000)
#define	CP0_CVMMEMCTL_XXX_57_36			UINT64_C(0x03fffff000000000)
#define	CP0_CVMMEMCTL_DISMARKWBLONGTO		UINT64_C(0x0000000800000000)
#define	CP0_CVMMEMCTL_DISMRGCLRWBTO		UINT64_C(0x0000000400000000)
#define	CP0_CVMMEMCTL_IOBDMASCRMSB		UINT64_C(0x0000000300000000)
#define	CP0_CVMMEMCTL_SYNCWSMARKED		UINT64_C(0x0000000080000000)
#define	CP0_CVMMEMCTL_DISSYNCWS			UINT64_C(0x0000000040000000)
#define	CP0_CVMMEMCTL_DISWBFST			UINT64_C(0x0000000020000000)
#define	CP0_CVMMEMCTL_XKMEMENAS			UINT64_C(0x0000000010000000)
#define	CP0_CVMMEMCTL_XKMEMENAU			UINT64_C(0x0000000008000000)
#define	CP0_CVMMEMCTL_XKIOENAS			UINT64_C(0x0000000004000000)
#define	CP0_CVMMEMCTL_XKIOENAU			UINT64_C(0x0000000002000000)
#define	CP0_CVMMEMCTL_ALLSYNCW			UINT64_C(0x0000000001000000)
#define	CP0_CVMMEMCTL_NOMERGE			UINT64_C(0x0000000000800000)
#define	CP0_CVMMEMCTL_DIDTTO			UINT64_C(0x0000000000600000)
#define	CP0_CVMMEMCTL_CSRCLKALWYS		UINT64_C(0x0000000000100000)
#define	CP0_CVMMEMCTL_MCLKALWYS			UINT64_C(0x0000000000080000)
#define	CP0_CVMMEMCTL_WBFLTIME			UINT64_C(0x0000000000070000)
#define	CP0_CVMMEMCTL_ISTRNOL2			UINT64_C(0x0000000000008000)
#define	CP0_CVMMEMCTL_WBTHRESH			UINT64_C(0x0000000000007800)
#define	CP0_CVMMEMCTL_XXX_10_9			UINT64_C(0x0000000000000600)
#define	CP0_CVMMEMCTL_CVMSEGENAK		UINT64_C(0x0000000000000100)
#define	CP0_CVMMEMCTL_CVMSEGENAS		UINT64_C(0x0000000000000080)
#define	CP0_CVMMEMCTL_CVMSEGENAU		UINT64_C(0x0000000000000040)
#define	CP0_CVMMEMCTL_LMEMSZ			UINT64_C(0x000000000000003f)

#define	CP0_CVMMEMCTL_BITS \
	"\177"		/* new format */ \
	"\020"		/* hex display */ \
	"\020"		/* %016x format */ \
	"b\x3f"		"TLBBIST\0" \
	"b\x3e"		"L1CBIST\0" \
	"b\x3d"		"L1DBIST\0" \
	"b\x3c"		"DCMBIST\0" \
	"b\x3b"		"PTGBIST\0" \
	"b\x3a"		"WBFBIST\0" \
	"b\x23"		"DISMARKWBLONGTO\0" \
	"b\x22"		"DISMRGCLRWBTO\0" \
	"f\x20\x02"	"IOBDMASCRMSB\0" \
	"b\x1f"		"SYNCWSMARKED\0" \
	"b\x1e"		"DISSYNCWS\0" \
	"b\x1d"		"DISWBFST\0" \
	"b\x1c"		"XKMEMENAS\0" \
	"b\x1b"		"XKMEMENAU\0" \
	"b\x1a"		"XKIOENAS\0" \
	"b\x19"		"XKIOENAU\0" \
	"b\x18"		"ALLSYNCW\0" \
	"b\x17"		"NOMERGE\0" \
	"f\x15\x02"	"DIDTTO\0" \
	"b\x14"		"CSRCLKALWYS\0" \
	"b\x13"		"MCLKALWYS\0" \
	"f\x10\x03"	"WBFLTIME\0" \
	"b\x0f"		"ISTRNOL2\0" \
	"f\x0b\x04"	"WBTHRESH\0" \
	"b\x08"		"CVMSEGENAK\0" \
	"b\x07"		"CVMSEGENAS\0" \
	"b\x06"		"CVMSEGENAU\0" \
	"f\x00\x06"	"LMEMSZ\0"

/* CvmCount Register */

/* Multi-Core Debug Register */

#define	CP0_MCD_XXX_63_17			UINT64_C(0xfffffffffffe0000)
#define	CP0_MCD_DEXCC				UINT64_C(0x0000000000010000)
#define	CP0_MCD_CGSTP				UINT64_C(0x0000000000008000)
#define	CP0_MCD_CVGSTP				UINT64_C(0x0000000000004000)
#define	CP0_MCD_CVDM				UINT64_C(0x0000000000002000)
#define	CP0_MCD_GSDB				UINT64_C(0x0000000000001000)
#define	CP0_MCD_XXX_11				UINT64_C(0x0000000000000800)
#define	CP0_MCD_MSKM2				UINT64_C(0x0000000000000400)
#define	CP0_MCD_MSKM1				UINT64_C(0x0000000000000200)
#define	CP0_MCD_MMC0				UINT64_C(0x0000000000000100)
#define	CP0_MCD_XXX_7				UINT64_C(0x0000000000000080)
#define	CP0_MCD_PLS2				UINT64_C(0x0000000000000040)
#define	CP0_MCD_PLS1				UINT64_C(0x0000000000000020)
#define	CP0_MCD_PLS0				UINT64_C(0x0000000000000010)
#define	CP0_MCD_XXX_3				UINT64_C(0x0000000000000008)
#define	CP0_MCD_MCD2				UINT64_C(0x0000000000000004)
#define	CP0_MCD_MCD1				UINT64_C(0x0000000000000002)
#define	CP0_MCD_MCD0				UINT64_C(0x0000000000000001)

/*
 * Core EJTAG DRSEG Registers
 */

/* XXX */

/*
 * Core EJTAG TAP Registers
 */

/* XXX */

/* ---- operations */

/* XXX */

/*
 * OCTEON Configuration and Status Registers (CSRs)
 */

#define	CSR_COP0			/* Core coprosessor 0 registers */
#define	CSR_COP2			/* Core coprosessor 2 registers */
#define	CSR_COREEJTAG			/* Core EJTAG registers */
#define	CSR_COREEJTAGTAP		/* Core EJTAG TAP registers */
#define	CSR_NCB				/* NCB registers */
#define	CSR_RSL				/* RSL registers */
#define	CSR_PCICONFIG			/* PCICONFIG registers */
#define	CSR_PCI				/* PCI registers */
#define	CSR_PCINCB			/* PCI_NCB registers */
#define	CSR_JTAGTAP			/* JTAG TAP registers */
#define	CSR_TWSICORE			/* TWSI Core registers */

/* XXX */

#endif /* _OCTEON_COREREG_H_ */