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