1
2
3
4
5
6
7
8
9#ifndef _ASM_POWERPC_REG_H
10#define _ASM_POWERPC_REG_H
11#ifdef __KERNEL__
12
13#include <linux/stringify.h>
14#include <asm/cputable.h>
15
16
17#if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
18#include <asm/reg_booke.h>
19#endif
20
21#ifdef CONFIG_FSL_EMB_PERFMON
22#include <asm/reg_fsl_emb.h>
23#endif
24
25#ifdef CONFIG_8xx
26#include <asm/reg_8xx.h>
27#endif
28
29#define MSR_SF_LG 63
30#define MSR_ISF_LG 61
31#define MSR_HV_LG 60
32#define MSR_VEC_LG 25
33#define MSR_VSX_LG 23
34#define MSR_POW_LG 18
35#define MSR_WE_LG 18
36#define MSR_TGPR_LG 17
37#define MSR_CE_LG 17
38#define MSR_ILE_LG 16
39#define MSR_EE_LG 15
40#define MSR_PR_LG 14
41#define MSR_FP_LG 13
42#define MSR_ME_LG 12
43#define MSR_FE0_LG 11
44#define MSR_SE_LG 10
45#define MSR_BE_LG 9
46#define MSR_DE_LG 9
47#define MSR_FE1_LG 8
48#define MSR_IP_LG 6
49#define MSR_IR_LG 5
50#define MSR_DR_LG 4
51#define MSR_PE_LG 3
52#define MSR_PX_LG 2
53#define MSR_PMM_LG 2
54#define MSR_RI_LG 1
55#define MSR_LE_LG 0
56
57#ifdef __ASSEMBLY__
58#define __MASK(X) (1<<(X))
59#else
60#define __MASK(X) (1UL<<(X))
61#endif
62
63#ifdef CONFIG_PPC64
64#define MSR_SF __MASK(MSR_SF_LG)
65#define MSR_ISF __MASK(MSR_ISF_LG)
66#define MSR_HV __MASK(MSR_HV_LG)
67#else
68
69#define MSR_SF 0
70#define MSR_ISF 0
71#define MSR_HV 0
72#endif
73
74#define MSR_VEC __MASK(MSR_VEC_LG)
75#define MSR_VSX __MASK(MSR_VSX_LG)
76#define MSR_POW __MASK(MSR_POW_LG)
77#define MSR_WE __MASK(MSR_WE_LG)
78#define MSR_TGPR __MASK(MSR_TGPR_LG)
79#define MSR_CE __MASK(MSR_CE_LG)
80#define MSR_ILE __MASK(MSR_ILE_LG)
81#define MSR_EE __MASK(MSR_EE_LG)
82#define MSR_PR __MASK(MSR_PR_LG)
83#define MSR_FP __MASK(MSR_FP_LG)
84#define MSR_ME __MASK(MSR_ME_LG)
85#define MSR_FE0 __MASK(MSR_FE0_LG)
86#define MSR_SE __MASK(MSR_SE_LG)
87#define MSR_BE __MASK(MSR_BE_LG)
88#define MSR_DE __MASK(MSR_DE_LG)
89#define MSR_FE1 __MASK(MSR_FE1_LG)
90#define MSR_IP __MASK(MSR_IP_LG)
91#define MSR_IR __MASK(MSR_IR_LG)
92#define MSR_DR __MASK(MSR_DR_LG)
93#define MSR_PE __MASK(MSR_PE_LG)
94#define MSR_PX __MASK(MSR_PX_LG)
95#ifndef MSR_PMM
96#define MSR_PMM __MASK(MSR_PMM_LG)
97#endif
98#define MSR_RI __MASK(MSR_RI_LG)
99#define MSR_LE __MASK(MSR_LE_LG)
100
101#if defined(CONFIG_PPC_BOOK3S_64)
102#define MSR_64BIT MSR_SF
103
104
105#define MSR_ MSR_ME | MSR_RI | MSR_IR | MSR_DR | MSR_ISF |MSR_HV
106#define MSR_KERNEL MSR_ | MSR_64BIT
107#define MSR_USER32 MSR_ | MSR_PR | MSR_EE
108#define MSR_USER64 MSR_USER32 | MSR_64BIT
109#elif defined(CONFIG_PPC_BOOK3S_32) || defined(CONFIG_8xx)
110
111#define MSR_KERNEL (MSR_ME|MSR_RI|MSR_IR|MSR_DR)
112#define MSR_USER (MSR_KERNEL|MSR_PR|MSR_EE)
113#endif
114
115#ifndef MSR_64BIT
116#define MSR_64BIT 0
117#endif
118
119
120#define FPSCR_FX 0x80000000
121#define FPSCR_FEX 0x40000000
122#define FPSCR_VX 0x20000000
123#define FPSCR_OX 0x10000000
124#define FPSCR_UX 0x08000000
125#define FPSCR_ZX 0x04000000
126#define FPSCR_XX 0x02000000
127#define FPSCR_VXSNAN 0x01000000
128#define FPSCR_VXISI 0x00800000
129#define FPSCR_VXIDI 0x00400000
130#define FPSCR_VXZDZ 0x00200000
131#define FPSCR_VXIMZ 0x00100000
132#define FPSCR_VXVC 0x00080000
133#define FPSCR_FR 0x00040000
134#define FPSCR_FI 0x00020000
135#define FPSCR_FPRF 0x0001f000
136#define FPSCR_FPCC 0x0000f000
137#define FPSCR_VXSOFT 0x00000400
138#define FPSCR_VXSQRT 0x00000200
139#define FPSCR_VXCVI 0x00000100
140#define FPSCR_VE 0x00000080
141#define FPSCR_OE 0x00000040
142#define FPSCR_UE 0x00000020
143#define FPSCR_ZE 0x00000010
144#define FPSCR_XE 0x00000008
145#define FPSCR_NI 0x00000004
146#define FPSCR_RN 0x00000003
147
148
149#define SPEFSCR_SOVH 0x80000000
150#define SPEFSCR_OVH 0x40000000
151#define SPEFSCR_FGH 0x20000000
152#define SPEFSCR_FXH 0x10000000
153#define SPEFSCR_FINVH 0x08000000
154#define SPEFSCR_FDBZH 0x04000000
155#define SPEFSCR_FUNFH 0x02000000
156#define SPEFSCR_FOVFH 0x01000000
157#define SPEFSCR_FINXS 0x00200000
158#define SPEFSCR_FINVS 0x00100000
159#define SPEFSCR_FDBZS 0x00080000
160#define SPEFSCR_FUNFS 0x00040000
161#define SPEFSCR_FOVFS 0x00020000
162#define SPEFSCR_MODE 0x00010000
163#define SPEFSCR_SOV 0x00008000
164#define SPEFSCR_OV 0x00004000
165#define SPEFSCR_FG 0x00002000
166#define SPEFSCR_FX 0x00001000
167#define SPEFSCR_FINV 0x00000800
168#define SPEFSCR_FDBZ 0x00000400
169#define SPEFSCR_FUNF 0x00000200
170#define SPEFSCR_FOVF 0x00000100
171#define SPEFSCR_FINXE 0x00000040
172#define SPEFSCR_FINVE 0x00000020
173#define SPEFSCR_FDBZE 0x00000010
174#define SPEFSCR_FUNFE 0x00000008
175#define SPEFSCR_FOVFE 0x00000004
176#define SPEFSCR_FRMC 0x00000003
177
178
179
180#ifdef CONFIG_40x
181#define SPRN_PID 0x3B1
182#else
183#define SPRN_PID 0x030
184#ifdef CONFIG_BOOKE
185#define SPRN_PID0 SPRN_PID
186#endif
187#endif
188
189#define SPRN_CTR 0x009
190#define SPRN_DSCR 0x11
191#define SPRN_CFAR 0x1c
192#define SPRN_AMR 0x1d
193#define SPRN_UAMOR 0x9d
194#define SPRN_AMOR 0x15d
195#define SPRN_ACOP 0x1F
196#define SPRN_CTRLF 0x088
197#define SPRN_CTRLT 0x098
198#define CTRL_CT 0xc0000000
199#define CTRL_CT0 0x80000000
200#define CTRL_CT1 0x40000000
201#define CTRL_TE 0x00c00000
202#define CTRL_RUNLATCH 0x1
203#define SPRN_DABR 0x3F5
204#define DABR_TRANSLATION (1UL << 2)
205#define DABR_DATA_WRITE (1UL << 1)
206#define DABR_DATA_READ (1UL << 0)
207#define SPRN_DABR2 0x13D
208#define SPRN_DABRX 0x3F7
209#define DABRX_USER (1UL << 0)
210#define DABRX_KERNEL (1UL << 1)
211#define SPRN_DAR 0x013
212#define SPRN_DBCR 0x136
213#define SPRN_DSISR 0x012
214#define DSISR_NOHPTE 0x40000000
215#define DSISR_PROTFAULT 0x08000000
216#define DSISR_ISSTORE 0x02000000
217#define DSISR_DABRMATCH 0x00400000
218#define DSISR_NOSEGMENT 0x00200000
219#define SPRN_TBRL 0x10C
220#define SPRN_TBRU 0x10D
221#define SPRN_TBWL 0x11C
222#define SPRN_TBWU 0x11D
223#define SPRN_SPURR 0x134
224#define SPRN_HSPRG0 0x130
225#define SPRN_HSPRG1 0x131
226#define SPRN_HDSISR 0x132
227#define SPRN_HDAR 0x133
228#define SPRN_HDEC 0x136
229#define SPRN_HIOR 0x137
230#define SPRN_RMOR 0x138
231#define SPRN_HRMOR 0x139
232#define SPRN_HSRR0 0x13A
233#define SPRN_HSRR1 0x13B
234#define SPRN_LPCR 0x13E
235#define LPCR_VPM0 (1ul << (63-0))
236#define LPCR_VPM1 (1ul << (63-1))
237#define LPCR_ISL (1ul << (63-2))
238#define LPCR_VC_SH (63-2)
239#define LPCR_DPFD_SH (63-11)
240#define LPCR_VRMA_L (1ul << (63-12))
241#define LPCR_VRMA_LP0 (1ul << (63-15))
242#define LPCR_VRMA_LP1 (1ul << (63-16))
243#define LPCR_VRMASD_SH (63-16)
244#define LPCR_RMLS 0x1C000000
245#define LPCR_RMLS_SH (63-37)
246#define LPCR_ILE 0x02000000
247#define LPCR_PECE 0x00007000
248#define LPCR_PECE0 0x00004000
249#define LPCR_PECE1 0x00002000
250#define LPCR_PECE2 0x00001000
251#define LPCR_MER 0x00000800
252#define LPCR_LPES 0x0000000c
253#define LPCR_LPES0 0x00000008
254#define LPCR_LPES1 0x00000004
255#define LPCR_LPES_SH 2
256#define LPCR_RMI 0x00000002
257#define LPCR_HDICE 0x00000001
258#define SPRN_LPID 0x13F
259#define LPID_RSVD 0x3ff
260#define SPRN_HMER 0x150
261#define SPRN_HMEER 0x151
262#define SPRN_HEIR 0x153
263#define SPRN_TLBINDEXR 0x154
264#define SPRN_TLBVPNR 0x155
265#define SPRN_TLBRPNR 0x156
266#define SPRN_TLBLPIDR 0x157
267#define SPRN_DBAT0L 0x219
268#define SPRN_DBAT0U 0x218
269#define SPRN_DBAT1L 0x21B
270#define SPRN_DBAT1U 0x21A
271#define SPRN_DBAT2L 0x21D
272#define SPRN_DBAT2U 0x21C
273#define SPRN_DBAT3L 0x21F
274#define SPRN_DBAT3U 0x21E
275#define SPRN_DBAT4L 0x239
276#define SPRN_DBAT4U 0x238
277#define SPRN_DBAT5L 0x23B
278#define SPRN_DBAT5U 0x23A
279#define SPRN_DBAT6L 0x23D
280#define SPRN_DBAT6U 0x23C
281#define SPRN_DBAT7L 0x23F
282#define SPRN_DBAT7U 0x23E
283
284#define SPRN_DEC 0x016
285#define SPRN_DER 0x095
286#define DER_RSTE 0x40000000
287#define DER_CHSTPE 0x20000000
288#define DER_MCIE 0x10000000
289#define DER_EXTIE 0x02000000
290#define DER_ALIE 0x01000000
291#define DER_PRIE 0x00800000
292#define DER_FPUVIE 0x00400000
293#define DER_DECIE 0x00200000
294#define DER_SYSIE 0x00040000
295#define DER_TRE 0x00020000
296#define DER_SEIE 0x00004000
297#define DER_ITLBMSE 0x00002000
298#define DER_ITLBERE 0x00001000
299#define DER_DTLBMSE 0x00000800
300#define DER_DTLBERE 0x00000400
301#define DER_LBRKE 0x00000008
302#define DER_IBRKE 0x00000004
303#define DER_EBRKE 0x00000002
304#define DER_DPIE 0x00000001
305#define SPRN_DMISS 0x3D0
306#define SPRN_EAR 0x11A
307#define SPRN_HASH1 0x3D2
308#define SPRN_HASH2 0x3D3
309#define SPRN_HID0 0x3F0
310#define HID0_HDICE_SH (63 - 23)
311#define HID0_EMCP (1<<31)
312#define HID0_EBA (1<<29)
313#define HID0_EBD (1<<28)
314#define HID0_SBCLK (1<<27)
315#define HID0_EICE (1<<26)
316#define HID0_TBEN (1<<26)
317#define HID0_ECLK (1<<25)
318#define HID0_PAR (1<<24)
319#define HID0_STEN (1<<24)
320#define HID0_HIGH_BAT (1<<23)
321#define HID0_DOZE (1<<23)
322#define HID0_NAP (1<<22)
323#define HID0_SLEEP (1<<21)
324#define HID0_DPM (1<<20)
325#define HID0_BHTCLR (1<<18)
326#define HID0_XAEN (1<<17)
327#define HID0_NHR (1<<16)
328#define HID0_ICE (1<<15)
329#define HID0_DCE (1<<14)
330#define HID0_ILOCK (1<<13)
331#define HID0_DLOCK (1<<12)
332#define HID0_ICFI (1<<11)
333#define HID0_DCI (1<<10)
334#define HID0_SPD (1<<9)
335#define HID0_DAPUEN (1<<8)
336#define HID0_SGE (1<<7)
337#define HID0_SIED (1<<7)
338#define HID0_DCFA (1<<6)
339#define HID0_LRSTK (1<<4)
340#define HID0_BTIC (1<<5)
341#define HID0_ABE (1<<3)
342#define HID0_FOLD (1<<3)
343#define HID0_BHTE (1<<2)
344#define HID0_BTCD (1<<1)
345#define HID0_NOPDST (1<<1)
346#define HID0_NOPTI (1<<0)
347
348#define SPRN_HID1 0x3F1
349#ifdef CONFIG_6xx
350#define HID1_EMCP (1<<31)
351#define HID1_DFS (1<<22)
352#define HID1_PC0 (1<<16)
353#define HID1_PC1 (1<<15)
354#define HID1_PC2 (1<<14)
355#define HID1_PC3 (1<<13)
356#define HID1_SYNCBE (1<<11)
357#define HID1_ABE (1<<10)
358#define HID1_PS (1<<16)
359#endif
360#define SPRN_HID2 0x3F8
361#define SPRN_HID2_GEKKO 0x398
362#define SPRN_IABR 0x3F2
363#define SPRN_IABR2 0x3FA
364#define SPRN_IBCR 0x135
365#define SPRN_HID4 0x3F4
366#define HID4_LPES0 (1ul << (63-0))
367#define HID4_RMLS2_SH (63 - 2)
368#define HID4_LPID5_SH (63 - 6)
369#define HID4_RMOR_SH (63 - 22)
370#define HID4_LPES1 (1 << (63-57))
371#define HID4_RMLS0_SH (63 - 58)
372#define HID4_LPID1_SH 0
373#define SPRN_HID4_GEKKO 0x3F3
374#define SPRN_HID5 0x3F6
375#define SPRN_HID6 0x3F9
376#define HID6_LB (0x0F<<12)
377#define HID6_DLP (1<<20)
378#define SPRN_TSC_CELL 0x399
379#define TSC_CELL_DEC_ENABLE_0 0x400000
380#define TSC_CELL_DEC_ENABLE_1 0x200000
381#define TSC_CELL_EE_ENABLE 0x100000
382#define TSC_CELL_EE_BOOST 0x080000
383#define SPRN_TSC 0x3FD
384#define SPRN_TST 0x3FC
385#if !defined(SPRN_IAC1) && !defined(SPRN_IAC2)
386#define SPRN_IAC1 0x3F4
387#define SPRN_IAC2 0x3F5
388#endif
389#define SPRN_IBAT0L 0x211
390#define SPRN_IBAT0U 0x210
391#define SPRN_IBAT1L 0x213
392#define SPRN_IBAT1U 0x212
393#define SPRN_IBAT2L 0x215
394#define SPRN_IBAT2U 0x214
395#define SPRN_IBAT3L 0x217
396#define SPRN_IBAT3U 0x216
397#define SPRN_IBAT4L 0x231
398#define SPRN_IBAT4U 0x230
399#define SPRN_IBAT5L 0x233
400#define SPRN_IBAT5U 0x232
401#define SPRN_IBAT6L 0x235
402#define SPRN_IBAT6U 0x234
403#define SPRN_IBAT7L 0x237
404#define SPRN_IBAT7U 0x236
405#define SPRN_ICMP 0x3D5
406#define SPRN_ICTC 0x3FB
407#define SPRN_ICTRL 0x3F3
408#define ICTRL_EICE 0x08000000
409#define ICTRL_EDC 0x04000000
410#define ICTRL_EICP 0x00000100
411#define SPRN_IMISS 0x3D4
412#define SPRN_IMMR 0x27E
413#define SPRN_L2CR 0x3F9
414#define SPRN_L2CR2 0x3f8
415#define L2CR_L2E 0x80000000
416#define L2CR_L2PE 0x40000000
417#define L2CR_L2SIZ_MASK 0x30000000
418#define L2CR_L2SIZ_256KB 0x10000000
419#define L2CR_L2SIZ_512KB 0x20000000
420#define L2CR_L2SIZ_1MB 0x30000000
421#define L2CR_L2CLK_MASK 0x0e000000
422#define L2CR_L2CLK_DISABLED 0x00000000
423#define L2CR_L2CLK_DIV1 0x02000000
424#define L2CR_L2CLK_DIV1_5 0x04000000
425#define L2CR_L2CLK_DIV2 0x08000000
426#define L2CR_L2CLK_DIV2_5 0x0a000000
427#define L2CR_L2CLK_DIV3 0x0c000000
428#define L2CR_L2RAM_MASK 0x01800000
429#define L2CR_L2RAM_FLOW 0x00000000
430#define L2CR_L2RAM_PIPE 0x01000000
431#define L2CR_L2RAM_PIPE_LW 0x01800000
432#define L2CR_L2DO 0x00400000
433#define L2CR_L2I 0x00200000
434#define L2CR_L2CTL 0x00100000
435#define L2CR_L2WT 0x00080000
436#define L2CR_L2TS 0x00040000
437#define L2CR_L2OH_MASK 0x00030000
438#define L2CR_L2OH_0_5 0x00000000
439#define L2CR_L2OH_1_0 0x00010000
440#define L2CR_L2SL 0x00008000
441#define L2CR_L2DF 0x00004000
442#define L2CR_L2BYP 0x00002000
443#define L2CR_L2IP 0x00000001
444#define L2CR_L2IO_745x 0x00100000
445#define L2CR_L2DO_745x 0x00010000
446#define L2CR_L2REP_745x 0x00001000
447#define L2CR_L2HWF_745x 0x00000800
448#define SPRN_L3CR 0x3FA
449#define L3CR_L3E 0x80000000
450#define L3CR_L3PE 0x40000000
451#define L3CR_L3APE 0x20000000
452#define L3CR_L3SIZ 0x10000000
453#define L3CR_L3CLKEN 0x08000000
454#define L3CR_L3RES 0x04000000
455#define L3CR_L3CLKDIV 0x03800000
456#define L3CR_L3IO 0x00400000
457#define L3CR_L3SPO 0x00040000
458#define L3CR_L3CKSP 0x00030000
459#define L3CR_L3PSP 0x0000e000
460#define L3CR_L3REP 0x00001000
461#define L3CR_L3HWF 0x00000800
462#define L3CR_L3I 0x00000400
463#define L3CR_L3RT 0x00000300
464#define L3CR_L3NIRCA 0x00000080
465#define L3CR_L3DO 0x00000040
466#define L3CR_PMEN 0x00000004
467#define L3CR_PMSIZ 0x00000001
468
469#define SPRN_MSSCR0 0x3f6
470#define SPRN_MSSSR0 0x3f7
471#define SPRN_LDSTCR 0x3f8
472#define SPRN_LDSTDB 0x3f4
473#define SPRN_LR 0x008
474#ifndef SPRN_PIR
475#define SPRN_PIR 0x3FF
476#endif
477#define SPRN_PTEHI 0x3D5
478#define SPRN_PTELO 0x3D6
479#define SPRN_PURR 0x135
480#define SPRN_PVR 0x11F
481#define SPRN_RPA 0x3D6
482#define SPRN_SDA 0x3BF
483#define SPRN_SDR1 0x019
484#define SPRN_ASR 0x118
485#define SPRN_SIA 0x3BB
486#define SPRN_SPRG0 0x110
487#define SPRN_SPRG1 0x111
488#define SPRN_SPRG2 0x112
489#define SPRN_SPRG3 0x113
490#define SPRN_SPRG4 0x114
491#define SPRN_SPRG5 0x115
492#define SPRN_SPRG6 0x116
493#define SPRN_SPRG7 0x117
494#define SPRN_SRR0 0x01A
495#define SPRN_SRR1 0x01B
496#define SRR1_WAKEMASK 0x00380000
497#define SRR1_WAKESYSERR 0x00300000
498#define SRR1_WAKEEE 0x00200000
499#define SRR1_WAKEMT 0x00280000
500#define SRR1_WAKEHMI 0x00280000
501#define SRR1_WAKEDEC 0x00180000
502#define SRR1_WAKETHERM 0x00100000
503#define SRR1_WAKERESET 0x00100000
504#define SRR1_WAKESTATE 0x00030000
505#define SRR1_WS_DEEPEST 0x00030000
506
507#define SRR1_WS_DEEPER 0x00020000
508#define SRR1_WS_DEEP 0x00010000
509#define SRR1_PROGFPE 0x00100000
510#define SRR1_PROGPRIV 0x00040000
511#define SRR1_PROGTRAP 0x00020000
512#define SRR1_PROGADDR 0x00010000
513
514#define SPRN_HSRR0 0x13A
515#define SPRN_HSRR1 0x13B
516
517#define SPRN_TBCTL 0x35f
518#define TBCTL_FREEZE 0x0000000000000000ull
519#define TBCTL_RESTART 0x0000000100000000ull
520#define TBCTL_UPDATE_UPPER 0x0000000200000000ull
521#define TBCTL_UPDATE_LOWER 0x0000000300000000ull
522
523#ifndef SPRN_SVR
524#define SPRN_SVR 0x11E
525#endif
526#define SPRN_THRM1 0x3FC
527
528#define THRM1_TIN (1 << 31)
529#define THRM1_TIV (1 << 30)
530#define THRM1_THRES(x) ((x&0x7f)<<23)
531#define THRM3_SITV(x) ((x&0x3fff)<<1)
532#define THRM1_TID (1<<2)
533#define THRM1_TIE (1<<1)
534#define THRM1_V (1<<0)
535#define SPRN_THRM2 0x3FD
536#define SPRN_THRM3 0x3FE
537#define THRM3_E (1<<0)
538#define SPRN_TLBMISS 0x3D4
539#define SPRN_UMMCR0 0x3A8
540#define SPRN_UMMCR1 0x3AC
541#define SPRN_UPMC1 0x3A9
542#define SPRN_UPMC2 0x3AA
543#define SPRN_UPMC3 0x3AD
544#define SPRN_UPMC4 0x3AE
545#define SPRN_USIA 0x3AB
546#define SPRN_VRSAVE 0x100
547#define SPRN_XER 0x001
548
549#define SPRN_MMCR0_GEKKO 0x3B8
550#define SPRN_MMCR1_GEKKO 0x3BC
551#define SPRN_PMC1_GEKKO 0x3B9
552#define SPRN_PMC2_GEKKO 0x3BA
553#define SPRN_PMC3_GEKKO 0x3BD
554#define SPRN_PMC4_GEKKO 0x3BE
555#define SPRN_WPAR_GEKKO 0x399
556
557#define SPRN_SCOMC 0x114
558#define SPRN_SCOMD 0x115
559
560
561#ifdef CONFIG_PPC64
562#define SPRN_MMCR0 795
563#define MMCR0_FC 0x80000000UL
564#define MMCR0_FCS 0x40000000UL
565#define MMCR0_KERNEL_DISABLE MMCR0_FCS
566#define MMCR0_FCP 0x20000000UL
567#define MMCR0_PROBLEM_DISABLE MMCR0_FCP
568#define MMCR0_FCM1 0x10000000UL
569#define MMCR0_FCM0 0x08000000UL
570#define MMCR0_PMXE 0x04000000UL
571#define MMCR0_FCECE 0x02000000UL
572#define MMCR0_TBEE 0x00400000UL
573#define MMCR0_PMC1CE 0x00008000UL
574#define MMCR0_PMCjCE 0x00004000UL
575#define MMCR0_TRIGGER 0x00002000UL
576#define MMCR0_PMAO 0x00000080UL
577#define MMCR0_SHRFC 0x00000040UL
578#define MMCR0_FCTI 0x00000008UL
579#define MMCR0_FCTA 0x00000004UL
580#define MMCR0_FCWAIT 0x00000002UL
581#define MMCR0_FCHV 0x00000001UL
582#define SPRN_MMCR1 798
583#define SPRN_MMCRA 0x312
584#define MMCRA_SDSYNC 0x80000000UL
585#define MMCRA_SDAR_DCACHE_MISS 0x40000000UL
586#define MMCRA_SDAR_ERAT_MISS 0x20000000UL
587#define MMCRA_SIHV 0x10000000UL
588#define MMCRA_SIPR 0x08000000UL
589#define MMCRA_SLOT 0x07000000UL
590#define MMCRA_SLOT_SHIFT 24
591#define MMCRA_SAMPLE_ENABLE 0x00000001UL
592#define POWER6_MMCRA_SDSYNC 0x0000080000000000ULL
593#define POWER6_MMCRA_SIHV 0x0000040000000000ULL
594#define POWER6_MMCRA_SIPR 0x0000020000000000ULL
595#define POWER6_MMCRA_THRM 0x00000020UL
596#define POWER6_MMCRA_OTHER 0x0000000EUL
597#define SPRN_PMC1 787
598#define SPRN_PMC2 788
599#define SPRN_PMC3 789
600#define SPRN_PMC4 790
601#define SPRN_PMC5 791
602#define SPRN_PMC6 792
603#define SPRN_PMC7 793
604#define SPRN_PMC8 794
605#define SPRN_SIAR 780
606#define SPRN_SDAR 781
607
608#define SPRN_PA6T_MMCR0 795
609#define PA6T_MMCR0_EN0 0x0000000000000001UL
610#define PA6T_MMCR0_EN1 0x0000000000000002UL
611#define PA6T_MMCR0_EN2 0x0000000000000004UL
612#define PA6T_MMCR0_EN3 0x0000000000000008UL
613#define PA6T_MMCR0_EN4 0x0000000000000010UL
614#define PA6T_MMCR0_EN5 0x0000000000000020UL
615#define PA6T_MMCR0_SUPEN 0x0000000000000040UL
616#define PA6T_MMCR0_PREN 0x0000000000000080UL
617#define PA6T_MMCR0_HYPEN 0x0000000000000100UL
618#define PA6T_MMCR0_FCM0 0x0000000000000200UL
619#define PA6T_MMCR0_FCM1 0x0000000000000400UL
620#define PA6T_MMCR0_INTGEN 0x0000000000000800UL
621#define PA6T_MMCR0_INTEN0 0x0000000000001000UL
622#define PA6T_MMCR0_INTEN1 0x0000000000002000UL
623#define PA6T_MMCR0_INTEN2 0x0000000000004000UL
624#define PA6T_MMCR0_INTEN3 0x0000000000008000UL
625#define PA6T_MMCR0_INTEN4 0x0000000000010000UL
626#define PA6T_MMCR0_INTEN5 0x0000000000020000UL
627#define PA6T_MMCR0_DISCNT 0x0000000000040000UL
628#define PA6T_MMCR0_UOP 0x0000000000080000UL
629#define PA6T_MMCR0_TRG 0x0000000000100000UL
630#define PA6T_MMCR0_TRGEN 0x0000000000200000UL
631#define PA6T_MMCR0_TRGREG 0x0000000001600000UL
632#define PA6T_MMCR0_SIARLOG 0x0000000002000000UL
633#define PA6T_MMCR0_SDARLOG 0x0000000004000000UL
634#define PA6T_MMCR0_PROEN 0x0000000008000000UL
635#define PA6T_MMCR0_PROLOG 0x0000000010000000UL
636#define PA6T_MMCR0_DAMEN2 0x0000000020000000UL
637#define PA6T_MMCR0_DAMEN3 0x0000000040000000UL
638#define PA6T_MMCR0_DAMEN4 0x0000000080000000UL
639#define PA6T_MMCR0_DAMEN5 0x0000000100000000UL
640#define PA6T_MMCR0_DAMSEL2 0x0000000200000000UL
641#define PA6T_MMCR0_DAMSEL3 0x0000000400000000UL
642#define PA6T_MMCR0_DAMSEL4 0x0000000800000000UL
643#define PA6T_MMCR0_DAMSEL5 0x0000001000000000UL
644#define PA6T_MMCR0_HANDDIS 0x0000002000000000UL
645#define PA6T_MMCR0_PCTEN 0x0000004000000000UL
646#define PA6T_MMCR0_SOCEN 0x0000008000000000UL
647#define PA6T_MMCR0_SOCMOD 0x0000010000000000UL
648
649#define SPRN_PA6T_MMCR1 798
650#define PA6T_MMCR1_ES2 0x00000000000000ffUL
651#define PA6T_MMCR1_ES3 0x000000000000ff00UL
652#define PA6T_MMCR1_ES4 0x0000000000ff0000UL
653#define PA6T_MMCR1_ES5 0x00000000ff000000UL
654
655#define SPRN_PA6T_UPMC0 771
656#define SPRN_PA6T_UPMC1 772
657#define SPRN_PA6T_UPMC2 773
658#define SPRN_PA6T_UPMC3 774
659#define SPRN_PA6T_UPMC4 775
660#define SPRN_PA6T_UPMC5 776
661#define SPRN_PA6T_UMMCR0 779
662#define SPRN_PA6T_SIAR 780
663#define SPRN_PA6T_UMMCR1 782
664#define SPRN_PA6T_SIER 785
665#define SPRN_PA6T_PMC0 787
666#define SPRN_PA6T_PMC1 788
667#define SPRN_PA6T_PMC2 789
668#define SPRN_PA6T_PMC3 790
669#define SPRN_PA6T_PMC4 791
670#define SPRN_PA6T_PMC5 792
671#define SPRN_PA6T_TSR0 793
672#define SPRN_PA6T_TSR1 794
673#define SPRN_PA6T_TSR2 799
674#define SPRN_PA6T_TSR3 784
675
676#define SPRN_PA6T_IER 981
677#define SPRN_PA6T_DER 982
678#define SPRN_PA6T_BER 862
679#define SPRN_PA6T_MER 849
680
681#define SPRN_PA6T_IMA0 880
682#define SPRN_PA6T_IMA1 881
683#define SPRN_PA6T_IMA2 882
684#define SPRN_PA6T_IMA3 883
685#define SPRN_PA6T_IMA4 884
686#define SPRN_PA6T_IMA5 885
687#define SPRN_PA6T_IMA6 886
688#define SPRN_PA6T_IMA7 887
689#define SPRN_PA6T_IMA8 888
690#define SPRN_PA6T_IMA9 889
691#define SPRN_PA6T_BTCR 978
692#define SPRN_PA6T_IMAAT 979
693#define SPRN_PA6T_PCCR 1019
694#define SPRN_BKMK 1020
695#define SPRN_PA6T_RPCCR 1021
696
697
698#else
699#define SPRN_MMCR0 952
700#define MMCR0_FC 0x80000000UL
701#define MMCR0_FCS 0x40000000UL
702#define MMCR0_FCP 0x20000000UL
703#define MMCR0_FCM1 0x10000000UL
704#define MMCR0_FCM0 0x08000000UL
705#define MMCR0_PMXE 0x04000000UL
706#define MMCR0_FCECE 0x02000000UL
707#define MMCR0_TBEE 0x00400000UL
708#define MMCR0_PMC1CE 0x00008000UL
709#define MMCR0_PMCnCE 0x00004000UL
710#define MMCR0_TRIGGER 0x00002000UL
711#define MMCR0_PMC1SEL 0x00001fc0UL
712#define MMCR0_PMC2SEL 0x0000003fUL
713
714#define SPRN_MMCR1 956
715#define MMCR1_PMC3SEL 0xf8000000UL
716#define MMCR1_PMC4SEL 0x07c00000UL
717#define MMCR1_PMC5SEL 0x003e0000UL
718#define MMCR1_PMC6SEL 0x0001f800UL
719#define SPRN_MMCR2 944
720#define SPRN_PMC1 953
721#define SPRN_PMC2 954
722#define SPRN_PMC3 957
723#define SPRN_PMC4 958
724#define SPRN_PMC5 945
725#define SPRN_PMC6 946
726
727#define SPRN_SIAR 955
728
729
730#define MMCR0_PMC1_CYCLES (1 << 7)
731#define MMCR0_PMC1_ICACHEMISS (5 << 7)
732#define MMCR0_PMC1_DTLB (6 << 7)
733#define MMCR0_PMC2_DCACHEMISS 0x6
734#define MMCR0_PMC2_CYCLES 0x1
735#define MMCR0_PMC2_ITLB 0x7
736#define MMCR0_PMC2_LOADMISSTIME 0x5
737#endif
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806#ifdef CONFIG_PPC64
807#define SPRN_SPRG_PACA SPRN_SPRG1
808#else
809#define SPRN_SPRG_THREAD SPRN_SPRG3
810#endif
811
812#ifdef CONFIG_PPC_BOOK3S_64
813#define SPRN_SPRG_SCRATCH0 SPRN_SPRG2
814#define SPRN_SPRG_HPACA SPRN_HSPRG0
815#define SPRN_SPRG_HSCRATCH0 SPRN_HSPRG1
816
817#define GET_PACA(rX) \
818 BEGIN_FTR_SECTION_NESTED(66); \
819 mfspr rX,SPRN_SPRG_PACA; \
820 FTR_SECTION_ELSE_NESTED(66); \
821 mfspr rX,SPRN_SPRG_HPACA; \
822 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_HVMODE, 66)
823
824#define SET_PACA(rX) \
825 BEGIN_FTR_SECTION_NESTED(66); \
826 mtspr SPRN_SPRG_PACA,rX; \
827 FTR_SECTION_ELSE_NESTED(66); \
828 mtspr SPRN_SPRG_HPACA,rX; \
829 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_HVMODE, 66)
830
831#define GET_SCRATCH0(rX) \
832 BEGIN_FTR_SECTION_NESTED(66); \
833 mfspr rX,SPRN_SPRG_SCRATCH0; \
834 FTR_SECTION_ELSE_NESTED(66); \
835 mfspr rX,SPRN_SPRG_HSCRATCH0; \
836 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_HVMODE, 66)
837
838#define SET_SCRATCH0(rX) \
839 BEGIN_FTR_SECTION_NESTED(66); \
840 mtspr SPRN_SPRG_SCRATCH0,rX; \
841 FTR_SECTION_ELSE_NESTED(66); \
842 mtspr SPRN_SPRG_HSCRATCH0,rX; \
843 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_HVMODE, 66)
844
845#else
846#define GET_SCRATCH0(rX) mfspr rX,SPRN_SPRG_SCRATCH0
847#define SET_SCRATCH0(rX) mtspr SPRN_SPRG_SCRATCH0,rX
848
849#endif
850
851#ifdef CONFIG_PPC_BOOK3E_64
852#define SPRN_SPRG_MC_SCRATCH SPRN_SPRG8
853#define SPRN_SPRG_CRIT_SCRATCH SPRN_SPRG7
854#define SPRN_SPRG_DBG_SCRATCH SPRN_SPRG9
855#define SPRN_SPRG_TLB_EXFRAME SPRN_SPRG2
856#define SPRN_SPRG_TLB_SCRATCH SPRN_SPRG6
857#define SPRN_SPRG_GEN_SCRATCH SPRN_SPRG0
858
859#define SET_PACA(rX) mtspr SPRN_SPRG_PACA,rX
860#define GET_PACA(rX) mfspr rX,SPRN_SPRG_PACA
861
862#endif
863
864#ifdef CONFIG_PPC_BOOK3S_32
865#define SPRN_SPRG_SCRATCH0 SPRN_SPRG0
866#define SPRN_SPRG_SCRATCH1 SPRN_SPRG1
867#define SPRN_SPRG_RTAS SPRN_SPRG2
868#define SPRN_SPRG_603_LRU SPRN_SPRG4
869#endif
870
871#ifdef CONFIG_40x
872#define SPRN_SPRG_SCRATCH0 SPRN_SPRG0
873#define SPRN_SPRG_SCRATCH1 SPRN_SPRG1
874#define SPRN_SPRG_SCRATCH2 SPRN_SPRG2
875#define SPRN_SPRG_SCRATCH3 SPRN_SPRG4
876#define SPRN_SPRG_SCRATCH4 SPRN_SPRG5
877#define SPRN_SPRG_SCRATCH5 SPRN_SPRG6
878#define SPRN_SPRG_SCRATCH6 SPRN_SPRG7
879#endif
880
881#ifdef CONFIG_BOOKE
882#define SPRN_SPRG_RSCRATCH0 SPRN_SPRG0
883#define SPRN_SPRG_WSCRATCH0 SPRN_SPRG0
884#define SPRN_SPRG_RSCRATCH1 SPRN_SPRG1
885#define SPRN_SPRG_WSCRATCH1 SPRN_SPRG1
886#define SPRN_SPRG_RSCRATCH_CRIT SPRN_SPRG2
887#define SPRN_SPRG_WSCRATCH_CRIT SPRN_SPRG2
888#define SPRN_SPRG_RSCRATCH2 SPRN_SPRG4R
889#define SPRN_SPRG_WSCRATCH2 SPRN_SPRG4W
890#define SPRN_SPRG_RSCRATCH3 SPRN_SPRG5R
891#define SPRN_SPRG_WSCRATCH3 SPRN_SPRG5W
892#define SPRN_SPRG_RSCRATCH_MC SPRN_SPRG1
893#define SPRN_SPRG_WSCRATCH_MC SPRN_SPRG1
894#define SPRN_SPRG_RSCRATCH4 SPRN_SPRG7R
895#define SPRN_SPRG_WSCRATCH4 SPRN_SPRG7W
896#ifdef CONFIG_E200
897#define SPRN_SPRG_RSCRATCH_DBG SPRN_SPRG6R
898#define SPRN_SPRG_WSCRATCH_DBG SPRN_SPRG6W
899#else
900#define SPRN_SPRG_RSCRATCH_DBG SPRN_SPRG9
901#define SPRN_SPRG_WSCRATCH_DBG SPRN_SPRG9
902#endif
903#define SPRN_SPRG_RVCPU SPRN_SPRG1
904#define SPRN_SPRG_WVCPU SPRN_SPRG1
905#endif
906
907#ifdef CONFIG_8xx
908#define SPRN_SPRG_SCRATCH0 SPRN_SPRG0
909#define SPRN_SPRG_SCRATCH1 SPRN_SPRG1
910#endif
911
912
913
914
915
916
917
918
919
920#ifdef CONFIG_PPC64
921#define MTFSF_L(REG) \
922 .long (0xfc00058e | ((0xff) << 17) | ((REG) << 11) | (1 << 25))
923#else
924#define MTFSF_L(REG) mtfsf 0xff, (REG)
925#endif
926
927
928
929#define PVR_VER(pvr) (((pvr) >> 16) & 0xFFFF)
930#define PVR_REV(pvr) (((pvr) >> 0) & 0xFFFF)
931
932#define __is_processor(pv) (PVR_VER(mfspr(SPRN_PVR)) == (pv))
933
934
935
936
937
938
939#define PVR_FAM(pvr) (((pvr) >> 20) & 0xFFF)
940#define PVR_MEM(pvr) (((pvr) >> 16) & 0xF)
941#define PVR_CORE(pvr) (((pvr) >> 12) & 0xF)
942#define PVR_CFG(pvr) (((pvr) >> 8) & 0xF)
943#define PVR_MAJ(pvr) (((pvr) >> 4) & 0xF)
944#define PVR_MIN(pvr) (((pvr) >> 0) & 0xF)
945
946
947
948#define PVR_403GA 0x00200000
949#define PVR_403GB 0x00200100
950#define PVR_403GC 0x00200200
951#define PVR_403GCX 0x00201400
952#define PVR_405GP 0x40110000
953#define PVR_476 0x11a52000
954#define PVR_476FPE 0x7ff50000
955#define PVR_STB03XXX 0x40310000
956#define PVR_NP405H 0x41410000
957#define PVR_NP405L 0x41610000
958#define PVR_601 0x00010000
959#define PVR_602 0x00050000
960#define PVR_603 0x00030000
961#define PVR_603e 0x00060000
962#define PVR_603ev 0x00070000
963#define PVR_603r 0x00071000
964#define PVR_604 0x00040000
965#define PVR_604e 0x00090000
966#define PVR_604r 0x000A0000
967#define PVR_620 0x00140000
968#define PVR_740 0x00080000
969#define PVR_750 PVR_740
970#define PVR_740P 0x10080000
971#define PVR_750P PVR_740P
972#define PVR_7400 0x000C0000
973#define PVR_7410 0x800C0000
974#define PVR_7450 0x80000000
975#define PVR_8540 0x80200000
976#define PVR_8560 0x80200000
977#define PVR_VER_E500V1 0x8020
978#define PVR_VER_E500V2 0x8021
979
980
981
982
983
984
985#define PVR_821 0x00500000
986#define PVR_823 PVR_821
987#define PVR_850 PVR_821
988#define PVR_860 PVR_821
989#define PVR_8240 0x00810100
990#define PVR_8245 0x80811014
991#define PVR_8260 PVR_8240
992
993
994#define PVR_476_ISS 0x00052000
995
996
997
998#define PV_NORTHSTAR 0x0033
999#define PV_PULSAR 0x0034
1000#define PV_POWER4 0x0035
1001#define PV_ICESTAR 0x0036
1002#define PV_SSTAR 0x0037
1003#define PV_POWER4p 0x0038
1004#define PV_970 0x0039
1005#define PV_POWER5 0x003A
1006#define PV_POWER5p 0x003B
1007#define PV_970FX 0x003C
1008#define PV_POWER6 0x003E
1009#define PV_POWER7 0x003F
1010#define PV_630 0x0040
1011#define PV_630p 0x0041
1012#define PV_970MP 0x0044
1013#define PV_970GX 0x0045
1014#define PV_BE 0x0070
1015#define PV_PA6T 0x0090
1016
1017
1018#ifndef __ASSEMBLY__
1019#define mfmsr() ({unsigned long rval; \
1020 asm volatile("mfmsr %0" : "=r" (rval)); rval;})
1021#ifdef CONFIG_PPC_BOOK3S_64
1022#define __mtmsrd(v, l) asm volatile("mtmsrd %0," __stringify(l) \
1023 : : "r" (v) : "memory")
1024#define mtmsrd(v) __mtmsrd((v), 0)
1025#define mtmsr(v) mtmsrd(v)
1026#else
1027#define mtmsr(v) asm volatile("mtmsr %0" : \
1028 : "r" ((unsigned long)(v)) \
1029 : "memory")
1030#endif
1031
1032#define mfspr(rn) ({unsigned long rval; \
1033 asm volatile("mfspr %0," __stringify(rn) \
1034 : "=r" (rval)); rval;})
1035#define mtspr(rn, v) asm volatile("mtspr " __stringify(rn) ",%0" : \
1036 : "r" ((unsigned long)(v)) \
1037 : "memory")
1038
1039#ifdef __powerpc64__
1040#ifdef CONFIG_PPC_CELL
1041#define mftb() ({unsigned long rval; \
1042 asm volatile( \
1043 "90: mftb %0;\n" \
1044 "97: cmpwi %0,0;\n" \
1045 " beq- 90b;\n" \
1046 "99:\n" \
1047 ".section __ftr_fixup,\"a\"\n" \
1048 ".align 3\n" \
1049 "98:\n" \
1050 " .llong %1\n" \
1051 " .llong %1\n" \
1052 " .llong 97b-98b\n" \
1053 " .llong 99b-98b\n" \
1054 " .llong 0\n" \
1055 " .llong 0\n" \
1056 ".previous" \
1057 : "=r" (rval) : "i" (CPU_FTR_CELL_TB_BUG)); rval;})
1058#else
1059#define mftb() ({unsigned long rval; \
1060 asm volatile("mftb %0" : "=r" (rval)); rval;})
1061#endif
1062
1063#else
1064
1065#define mftbl() ({unsigned long rval; \
1066 asm volatile("mftbl %0" : "=r" (rval)); rval;})
1067#define mftbu() ({unsigned long rval; \
1068 asm volatile("mftbu %0" : "=r" (rval)); rval;})
1069#endif
1070
1071#define mttbl(v) asm volatile("mttbl %0":: "r"(v))
1072#define mttbu(v) asm volatile("mttbu %0":: "r"(v))
1073
1074#ifdef CONFIG_PPC32
1075#define mfsrin(v) ({unsigned int rval; \
1076 asm volatile("mfsrin %0,%1" : "=r" (rval) : "r" (v)); \
1077 rval;})
1078#endif
1079
1080#define proc_trap() asm volatile("trap")
1081
1082#ifdef CONFIG_PPC64
1083
1084extern void ppc64_runlatch_on(void);
1085extern void __ppc64_runlatch_off(void);
1086
1087#define ppc64_runlatch_off() \
1088 do { \
1089 if (cpu_has_feature(CPU_FTR_CTRL) && \
1090 test_thread_flag(TIF_RUNLATCH)) \
1091 __ppc64_runlatch_off(); \
1092 } while (0)
1093
1094extern unsigned long scom970_read(unsigned int address);
1095extern void scom970_write(unsigned int address, unsigned long value);
1096
1097#else
1098#define ppc64_runlatch_on()
1099#define ppc64_runlatch_off()
1100
1101#endif
1102
1103#define __get_SP() ({unsigned long sp; \
1104 asm volatile("mr %0,1": "=r" (sp)); sp;})
1105
1106struct pt_regs;
1107
1108extern void ppc_save_regs(struct pt_regs *regs);
1109
1110#endif
1111#endif
1112#endif
1113