summaryrefslogtreecommitdiff
path: root/sys/arch/powerpc/include/ibm4xx/spr.h
blob: 56f4f4461c0d56a1532e708157db2015b9b18e01 (plain)
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
/*	$NetBSD: spr.h,v 1.5 2022/09/12 08:02:44 rin Exp $	*/

#ifndef _POWERPC_IBM4XX_SPR_H_
#define	_POWERPC_IBM4XX_SPR_H_

/*
 * IBM4xx Special Purpose Register declarations.
 *
 * The first column in the comments indicates which PowerPC architectures the
 * SPR is valid on - E for BookE series, 4 for 4xx series,
 * 6 for 6xx/7xx series and 8 for 8xx and 8xxx (but not 85xx) series.
 */

#define	SPR_44XPID		0x030	/* E4.. 440 Process ID */
#define	SPR_USPRG0		0x100	/* E4.. User SPR General 0 */
#define	  IBM403		  0x0020
#define	  IBM401A1		  0x0021
#define	  IBM401B2		  0x0022
#define	  IBM401C2		  0x0023
#define	  IBM401D2		  0x0024
#define	  IBM401E2		  0x0025
#define	  IBM401F2		  0x0026
#define	  IBM401G2		  0x0027
#define   AMCC405EX		  0x1291
#define   XILVIRTEX		  0x2001
#define	  IBM405GP		  0x4011
#define   IBMSTB03		  0x4013
#define   IBMSTB04		  0x4081
#define   IBM405GS3		  0x40b1
#define   IBM405H		  0x4141
#define	  IBM405L		  0x4161
#define   IBM405LP		  0x41f1
#define	  IBM405GPR		  0x5091
#define   IBM405EP		  0x5121
#define   IBMSTB25		  0x5151

/* PVRs for different IBM CPUs */
#define	PVR_401A1		0x00210000
#define	PVR_401B2		0x00220000
#define	PVR_401C2		0x00230000
#define	PVR_401D2		0x00240000
#define	PVR_401E2		0x00250000
#define	PVR_401F2		0x00260000
#define	PVR_401G2		0x00270000

#define	PVR_403GA		0x00200000	/* XXX no MMU */
#define	PVR_403GB		0x00200100	/* XXX no MMU */
#define	PVR_403GC		0x00200200
#define	PVR_403GCX		0x00201400

#define PVR_405GP		0x40110000
#define PVR_405GP_PASS1 	0x40110000	/* RevA */
#define PVR_405GP_PASS2 	0x40110040	/* RevB */
#define PVR_405GP_PASS2_1 	0x40110082	/* RevC */
#define PVR_405GP_PASS3 	0x401100c4	/* RevD */
#define PVR_405GPR		0x50910000
#define PVR_405GPR_REVB		0x50910951

#define	PVR_405D5X1 		0x20010000 	/* Virtex II Pro */
#define	PVR_405D5X2 		0x20011000 	/* Virtex 4 FX */

#define PVR_405EX		0x12910000

#define	SPR_ZPR			0x3b0	/* .4.. Zone Protection Register */
#define	SPR_PID			0x3b1	/* .4.. Process ID */
#define	SPR_MMUCR		0x3b2	/* .4.. MMU Control Register */
#define	  MMUCR_SW0A		  0x01000000 /* Store WithOut Allocate */
#define	  MMUCR_U1TE		  0x00400000 /* U1 Transient Enable */
#define	  MMUCR_U2SWOAE		  0x00200000 /* U2 SWOA Enab */
#define	  MMUCR_DULXE		  0x00080000 /* Data Cache Unlock Exc. Ena. */
#define	  MMUCR_IULXE		  0x00040000 /* Inst. Cache Unlock Exc. Ena. */
#define	  MMUCR_STS		  0x00010000 /* Search Translation Space [TS] */
#define	  MMUCR_STID		  0x000000ff /* Search Translation ID */
#define	SPR_CCR0		0x3b3	/* .4.. Core Configuration Register 0 */
#define	SPR_IAC3		0x3b4	/* .4.. Instruction Address Compare 3 */
#define	SPR_IAC4		0x3b5	/* .4.. Instruction Address Compare 4 */
#define	SPR_DVC1		0x3b6	/* .4.. Data Value Compare 1 */
#define	SPR_DVC2		0x3b7	/* .4.. Data Value Compare 2 */
#define	SPR_SGR			0x3b9	/* .4.. Storage Guarded Register */
#define	SPR_DCWR		0x3ba	/* .4.. Data Cache Write-through Register */
#define	SPR_SLER		0x3bb	/* .4.. Storage Little Endian Register */
#define	SPR_SU0R		0x3bc	/* .4.. Storage User-defined 0 Register */
#define	SPR_DBCR1		0x3bd	/* .4.. Debug Control Register 1 */
#define	SPR_ICDBDR		0x3d3	/* .4.. Instruction Cache Debug Data Register */
#define	SPR_ESR			0x3d4	/* .4.. Exception Syndrome Register */
#define	  ESR_MCI		  0x80000000 /* 0: Machine check - instruction */
#define	  ESR_PIL		  0x08000000 /* 4: Program interrupt - illegal */
#define	  ESR_PPR		  0x04000000 /* 5: Program interrupt - privileged */
#define	  ESR_PTR		  0x02000000 /* 6: Program interrupt - trap */
#define	  ESR_DST		  0x00800000 /* 8: Data storage interrupt - store fault */
#define	  ESR_DIZ		  0x00800000 /* 8: Data/instruction storage interrupt - zone fault */
#define	  ESR_ST		  0x00800000 /* 8: Store operation */
#define	  ESR_DLK		  0x00200000 /* 10: dcache exception */
#define	  ESR_ILK		  0x00100000 /* 11: icache exception */
#define	  ESR_BO		  0x00020000 /* 14: Byte ordering exception */
#define	  ESR_U0F		  0x00008000 /* 16: Data storage interrupt - U0 fault */
#define	  ESR_SPE		  0x00000080 /* 24: SPE exception */
#define	SPR_DEAR		0x3d5	/* .4.. Data Error Address Register */
#define	SPR_EVPR		0x3d6	/* .4.. Exception Vector Prefix Register */
#define	SPR_TSR			0x3d8	/* .4.. Timer Status Register */
#define	  TSR_ENW		  0x80000000 /* Enable Next Watchdog */
#define	  TSR_WIS		  0x40000000 /* Watchdog Interrupt Status */
#define	  TSR_WRS_MASK		  0x30000000 /* Watchdog Reset Status */
#define	  TSR_WRS_NONE		  0x00000000 /* No watchdog reset has occurred */
#define	  TSR_WRS_CORE		  0x10000000 /* Core reset was forced by the watchdog */
#define	  TSR_WRS_CHIP		  0x20000000 /* Chip reset was forced by the watchdog */
#define	  TSR_WRS_SYSTEM	  0x30000000 /* System reset was forced by the watchdog */
#define	  TSR_PIS		  0x08000000 /* PIT Interrupt Status */
#define	  TSR_FIS		  0x04000000 /* FIT Interrupt Status */
#define	SPR_TCR			0x3da	/* .4.. Timer Control Register */
#define	  TCR_WP_MASK		  0xc0000000 /* Watchdog Period mask */
#define	  TCR_WP_2_17		  0x00000000 /* 2**17 clocks */
#define	  TCR_WP_2_21		  0x40000000 /* 2**21 clocks */
#define	  TCR_WP_2_25		  0x80000000 /* 2**25 clocks */
#define	  TCR_WP_2_29		  0xc0000000 /* 2**29 clocks */
#define	  TCR_WRC_MASK		  0x30000000 /* Watchdog Reset Control mask */
#define	  TCR_WRC_NONE		  0x00000000 /* No watchdog reset */
#define	  TCR_WRC_CORE		  0x10000000 /* Core reset */
#define	  TCR_WRC_CHIP		  0x20000000 /* Chip reset */
#define	  TCR_WRC_SYSTEM	  0x30000000 /* System reset */
#define	  TCR_WIE		  0x08000000 /* Watchdog Interrupt Enable */
#define	  TCR_PIE		  0x04000000 /* PIT Interrupt Enable */
#define	  TCR_FP_MASK		  0x03000000 /* FIT Period */
#define	  TCR_FP_2_9		  0x00000000 /* 2**9 clocks */
#define	  TCR_FP_2_13		  0x01000000 /* 2**13 clocks */
#define	  TCR_FP_2_17		  0x02000000 /* 2**17 clocks */
#define	  TCR_FP_2_21		  0x03000000 /* 2**21 clocks */
#define	  TCR_FIE		  0x00800000 /* FIT Interrupt Enable */
#define	  TCR_ARE		  0x00400000 /* Auto Reload Enable */
#define	SPR_PIT			0x3db	/* .4.. Programmable Interval Timer */
#define	SPR_SRR2		0x3de	/* .4.. Save/Restore Register 2 */
#define	SPR_SRR3		0x3df	/* .4.. Save/Restore Register 3 */
#define	SPR_DBSR		0x3f0	/* .4.. Debug Status Register */
#define	  DBSR_IC		  0x80000000 /* Instruction completion debug event */
#define   DBSR_IDE		  0x80000000 /* Imprecise debug event */
#define	  DBSR_BT		  0x40000000 /* Branch Taken debug event */
#define	  DBSR_EDE		  0x20000000 /* Exception debug event */
#define	  DBSR_TIE		  0x10000000 /* Trap Instruction debug event */
#define	  DBSR_UDE		  0x08000000 /* Unconditional debug event */
#define	  DBSR_IA1		  0x04000000 /* IAC1 debug event */
#define	  DBSR_IA2		  0x02000000 /* IAC2 debug event */
#define	  DBSR_DR1		  0x01000000 /* DAC1 Read debug event */
#define	  DBSR_DW1		  0x00800000 /* DAC1 Write debug event */
#define	  DBSR_DR2		  0x00400000 /* DAC2 Read debug event */
#define	  DBSR_DW2		  0x00200000 /* DAC2 Write debug event */
#define	  DBSR_IA3		  0x00080000 /* IAC3 debug event */
#define	  DBSR_IA4		  0x00040000 /* IAC4 debug event */
#define	  DBSR_MRR		  0x00000300 /* Most recent reset */
#define	SPR_DBCR0		0x3f2	/* .4.. Debug Control Register 0 */
#define	  DBCR0_EDM		  0x80000000 /* 0: External Debug Mode */
#define	  DBCR0_IDM		  0x40000000 /* 1: Internal Debug Mode */
#define	  DBCR0_RST_MASK	  0x30000000 /* 2..3: ReSeT */
#define	  DBCR0_RST_NONE	  0x00000000 /*   No action */
#define	  DBCR0_RST_CORE	  0x10000000 /*   Core reset */
#define	  DBCR0_RST_CHIP	  0x20000000 /*   Chip reset */
#define	  DBCR0_RST_SYSTEM	  0x30000000 /*   System reset */
#define	  DBCR0_IC		  0x08000000 /* 4: Instruction Completion debug event */
#define	  DBCR0_BT		  0x04000000 /* 5: Branch Taken debug event */
#define	  DBCR0_EDE		  0x02000000 /* 6: Exception Debug Event */
#define	  DBCR0_TDE		  0x01000000 /* 7: Trap Debug Event */
#define	  DBCR0_IA1		  0x00800000 /* 8: IAC (Instruction Address Compare) 1 debug event */
#define	  DBCR0_IA2		  0x00400000 /* 9: IAC 2 debug event */
#define	  DBCR0_IA12		  0x00200000 /* 10: Instruction Address Range Compare 1-2 */
#define	  DBCR0_IA12X		  0x00100000 /* 11: IA12 eXclusive */
#define	  DBCR0_IA3		  0x00080000 /* 12: IAC 3 debug event */
#define	  DBCR0_IA4		  0x00040000 /* 13: IAC 4 debug event */
#define	  DBCR0_IA34		  0x00020000 /* 14: Instruction Address Range Compare 3-4 */
#define	  DBCR0_IA34X		  0x00010000 /* 15: IA34 eXclusive */
#define	  DBCR0_IA12T		  0x00008000 /* 16: Instruction Address Range Compare 1-2 range Toggle */
#define	  DBCR0_IA34T		  0x00004000 /* 17: Instruction Address Range Compare 3-4 range Toggle */
#define	  DBCR0_FT		  0x00000001 /* 31: Freeze Timers on debug event */
#define	SPR_IAC1		0x3f4	/* .4.. Instruction Address Compare 1 */
#define	SPR_IAC2		0x3f5	/* .4.. Instruction Address Compare 2 */
#define	SPR_DAC1		0x3f6	/* .4.. Data Address Compare 1 */
#define	SPR_DAC2		0x3f7	/* .4.. Data Address Compare 2 */
#define	SPR_DCCR		0x3fa	/* .4.. Data Cache Cachability Register */
#define	SPR_ICCR		0x3fb	/* .4.. Instruction Cache Cachability Register */

/*
 * XXXclang
 * clang cannot correctly assemble m[ft]pid for ibm4xx.
 * Yes, this is ugly, but may not be ugliest...
 */
#define	MFPID(reg)	"mfspr "#reg","___STRING(SPR_PID)";"
#define	MTPID(reg)	"mtspr "___STRING(SPR_PID)","#reg";"

#endif /* !_POWERPC_IBM4XX_SPR_H_ */