0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef _ASM_POWERPC_REG_H
0011 #define _ASM_POWERPC_REG_H
0012 #ifdef __KERNEL__
0013
0014 #include <linux/stringify.h>
0015 #include <linux/const.h>
0016 #include <asm/cputable.h>
0017 #include <asm/asm-const.h>
0018 #include <asm/feature-fixups.h>
0019
0020
0021 #ifdef CONFIG_BOOKE_OR_40x
0022 #include <asm/reg_booke.h>
0023 #endif
0024
0025 #ifdef CONFIG_FSL_EMB_PERFMON
0026 #include <asm/reg_fsl_emb.h>
0027 #endif
0028
0029 #include <asm/reg_8xx.h>
0030
0031 #define MSR_SF_LG 63
0032 #define MSR_HV_LG 60
0033 #define MSR_TS_T_LG 34
0034 #define MSR_TS_S_LG 33
0035 #define MSR_TS_LG 33
0036 #define MSR_TM_LG 32
0037 #define MSR_VEC_LG 25
0038 #define MSR_VSX_LG 23
0039 #define MSR_S_LG 22
0040 #define MSR_POW_LG 18
0041 #define MSR_WE_LG 18
0042 #define MSR_TGPR_LG 17
0043 #define MSR_CE_LG 17
0044 #define MSR_ILE_LG 16
0045 #define MSR_EE_LG 15
0046 #define MSR_PR_LG 14
0047 #define MSR_FP_LG 13
0048 #define MSR_ME_LG 12
0049 #define MSR_FE0_LG 11
0050 #define MSR_SE_LG 10
0051 #define MSR_BE_LG 9
0052 #define MSR_DE_LG 9
0053 #define MSR_FE1_LG 8
0054 #define MSR_IP_LG 6
0055 #define MSR_IR_LG 5
0056 #define MSR_DR_LG 4
0057 #define MSR_PE_LG 3
0058 #define MSR_PX_LG 2
0059 #define MSR_PMM_LG 2
0060 #define MSR_RI_LG 1
0061 #define MSR_LE_LG 0
0062
0063 #ifdef __ASSEMBLY__
0064 #define __MASK(X) (1<<(X))
0065 #else
0066 #define __MASK(X) (1UL<<(X))
0067 #endif
0068
0069 #ifdef CONFIG_PPC64
0070 #define MSR_SF __MASK(MSR_SF_LG)
0071 #define MSR_HV __MASK(MSR_HV_LG)
0072 #define MSR_S __MASK(MSR_S_LG)
0073 #else
0074
0075 #define MSR_SF 0
0076 #define MSR_HV 0
0077 #define MSR_S 0
0078 #endif
0079
0080
0081
0082
0083
0084 #ifndef MSR_SPE
0085 #define MSR_SPE 0
0086 #endif
0087
0088 #define MSR_VEC __MASK(MSR_VEC_LG)
0089 #define MSR_VSX __MASK(MSR_VSX_LG)
0090 #define MSR_POW __MASK(MSR_POW_LG)
0091 #define MSR_WE __MASK(MSR_WE_LG)
0092 #define MSR_TGPR __MASK(MSR_TGPR_LG)
0093 #define MSR_CE __MASK(MSR_CE_LG)
0094 #define MSR_ILE __MASK(MSR_ILE_LG)
0095 #define MSR_EE __MASK(MSR_EE_LG)
0096 #define MSR_PR __MASK(MSR_PR_LG)
0097 #define MSR_FP __MASK(MSR_FP_LG)
0098 #define MSR_ME __MASK(MSR_ME_LG)
0099 #define MSR_FE0 __MASK(MSR_FE0_LG)
0100 #define MSR_SE __MASK(MSR_SE_LG)
0101 #define MSR_BE __MASK(MSR_BE_LG)
0102 #define MSR_DE __MASK(MSR_DE_LG)
0103 #define MSR_FE1 __MASK(MSR_FE1_LG)
0104 #define MSR_IP __MASK(MSR_IP_LG)
0105 #define MSR_IR __MASK(MSR_IR_LG)
0106 #define MSR_DR __MASK(MSR_DR_LG)
0107 #define MSR_PE __MASK(MSR_PE_LG)
0108 #define MSR_PX __MASK(MSR_PX_LG)
0109 #ifndef MSR_PMM
0110 #define MSR_PMM __MASK(MSR_PMM_LG)
0111 #endif
0112 #define MSR_RI __MASK(MSR_RI_LG)
0113 #define MSR_LE __MASK(MSR_LE_LG)
0114
0115 #define MSR_TM __MASK(MSR_TM_LG)
0116 #define MSR_TS_N 0
0117 #define MSR_TS_S __MASK(MSR_TS_S_LG)
0118 #define MSR_TS_T __MASK(MSR_TS_T_LG)
0119 #define MSR_TS_MASK (MSR_TS_T | MSR_TS_S)
0120 #define MSR_TM_RESV(x) (((x) & MSR_TS_MASK) == MSR_TS_MASK)
0121 #define MSR_TM_TRANSACTIONAL(x) (((x) & MSR_TS_MASK) == MSR_TS_T)
0122 #define MSR_TM_SUSPENDED(x) (((x) & MSR_TS_MASK) == MSR_TS_S)
0123
0124 #ifdef CONFIG_PPC_TRANSACTIONAL_MEM
0125 #define MSR_TM_ACTIVE(x) (((x) & MSR_TS_MASK) != 0)
0126 #else
0127 #define MSR_TM_ACTIVE(x) ((void)(x), 0)
0128 #endif
0129
0130 #if defined(CONFIG_PPC_BOOK3S_64)
0131 #define MSR_64BIT MSR_SF
0132
0133
0134 #define __MSR (MSR_ME | MSR_RI | MSR_IR | MSR_DR | MSR_HV)
0135 #ifdef __BIG_ENDIAN__
0136 #define MSR_ __MSR
0137 #define MSR_IDLE (MSR_ME | MSR_SF | MSR_HV)
0138 #else
0139 #define MSR_ (__MSR | MSR_LE)
0140 #define MSR_IDLE (MSR_ME | MSR_SF | MSR_HV | MSR_LE)
0141 #endif
0142 #define MSR_KERNEL (MSR_ | MSR_64BIT)
0143 #define MSR_USER32 (MSR_ | MSR_PR | MSR_EE)
0144 #define MSR_USER64 (MSR_USER32 | MSR_64BIT)
0145 #elif defined(CONFIG_PPC_BOOK3S_32) || defined(CONFIG_PPC_8xx)
0146
0147 #define MSR_KERNEL (MSR_ME|MSR_RI|MSR_IR|MSR_DR)
0148 #define MSR_USER (MSR_KERNEL|MSR_PR|MSR_EE)
0149 #endif
0150
0151 #ifndef MSR_64BIT
0152 #define MSR_64BIT 0
0153 #endif
0154
0155
0156 #define CR0_SHIFT 28
0157 #define CR0_MASK 0xF
0158 #define CR0_TBEGIN_FAILURE (0x2 << 28)
0159
0160
0161
0162 #define PSSCR_RL_MASK 0x0000000F
0163 #define PSSCR_MTL_MASK 0x000000F0
0164 #define PSSCR_TR_MASK 0x00000300
0165 #define PSSCR_PSLL_MASK 0x000F0000
0166 #define PSSCR_EC 0x00100000
0167 #define PSSCR_ESL 0x00200000
0168 #define PSSCR_SD 0x00400000
0169 #define PSSCR_PLS 0xf000000000000000
0170 #define PSSCR_PLS_SHIFT 60
0171 #define PSSCR_GUEST_VIS 0xf0000000000003ffUL
0172 #define PSSCR_FAKE_SUSPEND 0x00000400
0173 #define PSSCR_FAKE_SUSPEND_LG 10
0174
0175
0176 #define FPSCR_FX 0x80000000
0177 #define FPSCR_FEX 0x40000000
0178 #define FPSCR_VX 0x20000000
0179 #define FPSCR_OX 0x10000000
0180 #define FPSCR_UX 0x08000000
0181 #define FPSCR_ZX 0x04000000
0182 #define FPSCR_XX 0x02000000
0183 #define FPSCR_VXSNAN 0x01000000
0184 #define FPSCR_VXISI 0x00800000
0185 #define FPSCR_VXIDI 0x00400000
0186 #define FPSCR_VXZDZ 0x00200000
0187 #define FPSCR_VXIMZ 0x00100000
0188 #define FPSCR_VXVC 0x00080000
0189 #define FPSCR_FR 0x00040000
0190 #define FPSCR_FI 0x00020000
0191 #define FPSCR_FPRF 0x0001f000
0192 #define FPSCR_FPCC 0x0000f000
0193 #define FPSCR_VXSOFT 0x00000400
0194 #define FPSCR_VXSQRT 0x00000200
0195 #define FPSCR_VXCVI 0x00000100
0196 #define FPSCR_VE 0x00000080
0197 #define FPSCR_OE 0x00000040
0198 #define FPSCR_UE 0x00000020
0199 #define FPSCR_ZE 0x00000010
0200 #define FPSCR_XE 0x00000008
0201 #define FPSCR_NI 0x00000004
0202 #define FPSCR_RN 0x00000003
0203
0204
0205 #define SPEFSCR_SOVH 0x80000000
0206 #define SPEFSCR_OVH 0x40000000
0207 #define SPEFSCR_FGH 0x20000000
0208 #define SPEFSCR_FXH 0x10000000
0209 #define SPEFSCR_FINVH 0x08000000
0210 #define SPEFSCR_FDBZH 0x04000000
0211 #define SPEFSCR_FUNFH 0x02000000
0212 #define SPEFSCR_FOVFH 0x01000000
0213 #define SPEFSCR_FINXS 0x00200000
0214 #define SPEFSCR_FINVS 0x00100000
0215 #define SPEFSCR_FDBZS 0x00080000
0216 #define SPEFSCR_FUNFS 0x00040000
0217 #define SPEFSCR_FOVFS 0x00020000
0218 #define SPEFSCR_MODE 0x00010000
0219 #define SPEFSCR_SOV 0x00008000
0220 #define SPEFSCR_OV 0x00004000
0221 #define SPEFSCR_FG 0x00002000
0222 #define SPEFSCR_FX 0x00001000
0223 #define SPEFSCR_FINV 0x00000800
0224 #define SPEFSCR_FDBZ 0x00000400
0225 #define SPEFSCR_FUNF 0x00000200
0226 #define SPEFSCR_FOVF 0x00000100
0227 #define SPEFSCR_FINXE 0x00000040
0228 #define SPEFSCR_FINVE 0x00000020
0229 #define SPEFSCR_FDBZE 0x00000010
0230 #define SPEFSCR_FUNFE 0x00000008
0231 #define SPEFSCR_FOVFE 0x00000004
0232 #define SPEFSCR_FRMC 0x00000003
0233
0234
0235
0236 #ifdef CONFIG_40x
0237 #define SPRN_PID 0x3B1
0238 #else
0239 #define SPRN_PID 0x030
0240 #ifdef CONFIG_BOOKE
0241 #define SPRN_PID0 SPRN_PID
0242 #endif
0243 #endif
0244
0245 #define SPRN_CTR 0x009
0246 #define SPRN_DSCR 0x11
0247 #define SPRN_CFAR 0x1c
0248 #define SPRN_AMR 0x1d
0249 #define SPRN_UAMOR 0x9d
0250 #define SPRN_AMOR 0x15d
0251 #define SPRN_ACOP 0x1F
0252 #define SPRN_TFIAR 0x81
0253 #define SPRN_TEXASR 0x82
0254 #define SPRN_TEXASRU 0x83
0255
0256 #define TEXASR_FC_LG (63 - 7)
0257 #define TEXASR_AB_LG (63 - 31)
0258 #define TEXASR_SU_LG (63 - 32)
0259 #define TEXASR_HV_LG (63 - 34)
0260 #define TEXASR_PR_LG (63 - 35)
0261 #define TEXASR_FS_LG (63 - 36)
0262 #define TEXASR_EX_LG (63 - 37)
0263 #define TEXASR_ROT_LG (63 - 38)
0264
0265 #define TEXASR_ABORT __MASK(TEXASR_AB_LG)
0266 #define TEXASR_SUSP __MASK(TEXASR_SU_LG)
0267 #define TEXASR_HV __MASK(TEXASR_HV_LG)
0268 #define TEXASR_PR __MASK(TEXASR_PR_LG)
0269 #define TEXASR_FS __MASK(TEXASR_FS_LG)
0270 #define TEXASR_EXACT __MASK(TEXASR_EX_LG)
0271 #define TEXASR_ROT __MASK(TEXASR_ROT_LG)
0272 #define TEXASR_FC (ASM_CONST(0xFF) << TEXASR_FC_LG)
0273
0274 #define SPRN_TFHAR 0x80
0275
0276 #define SPRN_TIDR 144
0277 #define SPRN_CTRLF 0x088
0278 #define SPRN_CTRLT 0x098
0279 #define CTRL_CT 0xc0000000
0280 #define CTRL_CT0 0x80000000
0281 #define CTRL_CT1 0x40000000
0282 #define CTRL_TE 0x00c00000
0283 #define CTRL_RUNLATCH 0x1
0284 #define SPRN_DAWR0 0xB4
0285 #define SPRN_DAWR1 0xB5
0286 #define SPRN_RPR 0xBA
0287 #define SPRN_CIABR 0xBB
0288 #define CIABR_PRIV 0x3
0289 #define CIABR_PRIV_USER 1
0290 #define CIABR_PRIV_SUPER 2
0291 #define CIABR_PRIV_HYPER 3
0292 #define SPRN_DAWRX0 0xBC
0293 #define SPRN_DAWRX1 0xBD
0294 #define DAWRX_USER __MASK(0)
0295 #define DAWRX_KERNEL __MASK(1)
0296 #define DAWRX_HYP __MASK(2)
0297 #define DAWRX_WTI __MASK(3)
0298 #define DAWRX_WT __MASK(4)
0299 #define DAWRX_DR __MASK(5)
0300 #define DAWRX_DW __MASK(6)
0301 #define SPRN_DABR 0x3F5
0302 #define SPRN_DABR2 0x13D
0303 #define SPRN_DABRX 0x3F7
0304 #define DABRX_USER __MASK(0)
0305 #define DABRX_KERNEL __MASK(1)
0306 #define DABRX_HYP __MASK(2)
0307 #define DABRX_BTI __MASK(3)
0308 #define DABRX_ALL (DABRX_BTI | DABRX_HYP | DABRX_KERNEL | DABRX_USER)
0309 #define SPRN_DAR 0x013
0310 #define SPRN_DBCR 0x136
0311 #define SPRN_DSISR 0x012
0312 #define DSISR_BAD_DIRECT_ST 0x80000000
0313 #define DSISR_NOHPTE 0x40000000
0314 #define DSISR_ATTR_CONFLICT 0x20000000
0315 #define DSISR_NOEXEC_OR_G 0x10000000
0316 #define DSISR_PROTFAULT 0x08000000
0317 #define DSISR_BADACCESS 0x04000000
0318 #define DSISR_ISSTORE 0x02000000
0319 #define DSISR_DABRMATCH 0x00400000
0320 #define DSISR_NOSEGMENT 0x00200000
0321 #define DSISR_KEYFAULT 0x00200000
0322 #define DSISR_BAD_EXT_CTRL 0x00100000
0323 #define DSISR_UNSUPP_MMU 0x00080000
0324 #define DSISR_SET_RC 0x00040000
0325 #define DSISR_PRTABLE_FAULT 0x00020000
0326 #define DSISR_ICSWX_NO_CT 0x00004000
0327 #define DSISR_BAD_COPYPASTE 0x00000008
0328 #define DSISR_BAD_AMO 0x00000004
0329 #define DSISR_BAD_CI_LDST 0x00000002
0330
0331
0332
0333
0334
0335
0336
0337
0338
0339
0340
0341
0342
0343
0344
0345
0346 #define DSISR_BAD_FAULT_32S (DSISR_BAD_DIRECT_ST | \
0347 DSISR_BADACCESS | \
0348 DSISR_BAD_EXT_CTRL)
0349 #define DSISR_BAD_FAULT_64S (DSISR_BAD_FAULT_32S | \
0350 DSISR_ATTR_CONFLICT | \
0351 DSISR_UNSUPP_MMU | \
0352 DSISR_PRTABLE_FAULT | \
0353 DSISR_ICSWX_NO_CT | \
0354 DSISR_BAD_COPYPASTE | \
0355 DSISR_BAD_AMO | \
0356 DSISR_BAD_CI_LDST)
0357
0358
0359
0360
0361 #define DSISR_SRR1_MATCH_32S (DSISR_NOHPTE | \
0362 DSISR_NOEXEC_OR_G | \
0363 DSISR_PROTFAULT)
0364 #define DSISR_SRR1_MATCH_64S (DSISR_SRR1_MATCH_32S | \
0365 DSISR_KEYFAULT | \
0366 DSISR_UNSUPP_MMU | \
0367 DSISR_SET_RC | \
0368 DSISR_PRTABLE_FAULT)
0369
0370 #define SPRN_TBRL 0x10C
0371 #define SPRN_TBRU 0x10D
0372 #define SPRN_CIR 0x11B
0373 #define SPRN_TBWL 0x11C
0374 #define SPRN_TBWU 0x11D
0375 #define SPRN_TBU40 0x11E
0376 #define SPRN_SPURR 0x134
0377 #define SPRN_HSPRG0 0x130
0378 #define SPRN_HSPRG1 0x131
0379 #define SPRN_HDSISR 0x132
0380 #define SPRN_HDAR 0x133
0381 #define SPRN_HDEC 0x136
0382 #define SPRN_HIOR 0x137
0383 #define SPRN_RMOR 0x138
0384 #define SPRN_HRMOR 0x139
0385 #define SPRN_HSRR0 0x13A
0386 #define SPRN_HSRR1 0x13B
0387 #define SPRN_ASDR 0x330
0388 #define SPRN_IC 0x350
0389 #define SPRN_VTB 0x351
0390 #define SPRN_LDBAR 0x352
0391 #define SPRN_PMICR 0x354
0392 #define SPRN_PMSR 0x355
0393 #define SPRN_PMMAR 0x356
0394 #define SPRN_PSSCR 0x357
0395 #define SPRN_PSSCR_PR 0x337
0396 #define SPRN_TRIG2 0x372
0397 #define SPRN_PMCR 0x374
0398 #define SPRN_RWMR 0x375
0399
0400
0401 #define FSCR_PREFIX_LG 13
0402 #define FSCR_SCV_LG 12
0403 #define FSCR_MSGP_LG 10
0404 #define FSCR_TAR_LG 8
0405 #define FSCR_EBB_LG 7
0406 #define FSCR_TM_LG 5
0407 #define FSCR_BHRB_LG 4
0408 #define FSCR_PM_LG 3
0409 #define FSCR_DSCR_LG 2
0410 #define FSCR_VECVSX_LG 1
0411 #define FSCR_FP_LG 0
0412 #define SPRN_FSCR 0x099
0413 #define FSCR_PREFIX __MASK(FSCR_PREFIX_LG)
0414 #define FSCR_SCV __MASK(FSCR_SCV_LG)
0415 #define FSCR_TAR __MASK(FSCR_TAR_LG)
0416 #define FSCR_EBB __MASK(FSCR_EBB_LG)
0417 #define FSCR_DSCR __MASK(FSCR_DSCR_LG)
0418 #define FSCR_INTR_CAUSE (ASM_CONST(0xFF) << 56)
0419 #define SPRN_HFSCR 0xbe
0420 #define HFSCR_MSGP __MASK(FSCR_MSGP_LG)
0421 #define HFSCR_TAR __MASK(FSCR_TAR_LG)
0422 #define HFSCR_EBB __MASK(FSCR_EBB_LG)
0423 #define HFSCR_TM __MASK(FSCR_TM_LG)
0424 #define HFSCR_PM __MASK(FSCR_PM_LG)
0425 #define HFSCR_BHRB __MASK(FSCR_BHRB_LG)
0426 #define HFSCR_DSCR __MASK(FSCR_DSCR_LG)
0427 #define HFSCR_VECVSX __MASK(FSCR_VECVSX_LG)
0428 #define HFSCR_FP __MASK(FSCR_FP_LG)
0429 #define HFSCR_INTR_CAUSE FSCR_INTR_CAUSE
0430 #define SPRN_TAR 0x32f
0431 #define SPRN_LPCR 0x13E
0432 #define LPCR_VPM0 ASM_CONST(0x8000000000000000)
0433 #define LPCR_VPM1 ASM_CONST(0x4000000000000000)
0434 #define LPCR_ISL ASM_CONST(0x2000000000000000)
0435 #define LPCR_VC_SH 61
0436 #define LPCR_DPFD_SH 52
0437 #define LPCR_DPFD (ASM_CONST(7) << LPCR_DPFD_SH)
0438 #define LPCR_VRMASD_SH 47
0439 #define LPCR_VRMASD (ASM_CONST(0x1f) << LPCR_VRMASD_SH)
0440 #define LPCR_VRMA_L ASM_CONST(0x0008000000000000)
0441 #define LPCR_VRMA_LP0 ASM_CONST(0x0001000000000000)
0442 #define LPCR_VRMA_LP1 ASM_CONST(0x0000800000000000)
0443 #define LPCR_RMLS 0x1C000000
0444 #define LPCR_RMLS_SH 26
0445 #define LPCR_HAIL ASM_CONST(0x0000000004000000)
0446 #define LPCR_ILE ASM_CONST(0x0000000002000000)
0447 #define LPCR_AIL ASM_CONST(0x0000000001800000)
0448 #define LPCR_AIL_0 ASM_CONST(0x0000000000000000)
0449 #define LPCR_AIL_3 ASM_CONST(0x0000000001800000)
0450 #define LPCR_ONL ASM_CONST(0x0000000000040000)
0451 #define LPCR_LD ASM_CONST(0x0000000000020000)
0452 #define LPCR_PECE ASM_CONST(0x000000000001f000)
0453 #define LPCR_PECEDP ASM_CONST(0x0000000000010000)
0454 #define LPCR_PECEDH ASM_CONST(0x0000000000008000)
0455 #define LPCR_PECE0 ASM_CONST(0x0000000000004000)
0456 #define LPCR_PECE1 ASM_CONST(0x0000000000002000)
0457 #define LPCR_PECE2 ASM_CONST(0x0000000000001000)
0458 #define LPCR_PECE_HVEE ASM_CONST(0x0000400000000000)
0459 #define LPCR_MER ASM_CONST(0x0000000000000800)
0460 #define LPCR_MER_SH 11
0461 #define LPCR_GTSE ASM_CONST(0x0000000000000400)
0462 #define LPCR_TC ASM_CONST(0x0000000000000200)
0463 #define LPCR_HEIC ASM_CONST(0x0000000000000010)
0464 #define LPCR_LPES 0x0000000c
0465 #define LPCR_LPES0 ASM_CONST(0x0000000000000008)
0466 #define LPCR_LPES1 ASM_CONST(0x0000000000000004)
0467 #define LPCR_LPES_SH 2
0468 #define LPCR_RMI ASM_CONST(0x0000000000000002)
0469 #define LPCR_HVICE ASM_CONST(0x0000000000000002)
0470 #define LPCR_HDICE ASM_CONST(0x0000000000000001)
0471 #define LPCR_UPRT ASM_CONST(0x0000000000400000)
0472 #define LPCR_HR ASM_CONST(0x0000000000100000)
0473 #ifndef SPRN_LPID
0474 #define SPRN_LPID 0x13F
0475 #endif
0476 #define SPRN_HMER 0x150
0477 #define HMER_DEBUG_TRIG (1ul << (63 - 17))
0478 #define SPRN_HMEER 0x151
0479 #define SPRN_PCR 0x152
0480 #define PCR_VEC_DIS (__MASK(63-0))
0481 #define PCR_VSX_DIS (__MASK(63-1))
0482 #define PCR_TM_DIS (__MASK(63-2))
0483 #define PCR_MMA_DIS (__MASK(63-3))
0484 #define PCR_HIGH_BITS (PCR_MMA_DIS | PCR_VEC_DIS | PCR_VSX_DIS | PCR_TM_DIS)
0485
0486
0487
0488
0489
0490 #define PCR_ARCH_300 0x10
0491 #define PCR_ARCH_207 0x8
0492 #define PCR_ARCH_206 0x4
0493 #define PCR_ARCH_205 0x2
0494 #define PCR_LOW_BITS (PCR_ARCH_207 | PCR_ARCH_206 | PCR_ARCH_205 | PCR_ARCH_300)
0495 #define PCR_MASK ~(PCR_HIGH_BITS | PCR_LOW_BITS)
0496 #define SPRN_HEIR 0x153
0497 #define SPRN_TLBINDEXR 0x154
0498 #define SPRN_TLBVPNR 0x155
0499 #define SPRN_TLBRPNR 0x156
0500 #define SPRN_TLBLPIDR 0x157
0501 #define SPRN_DBAT0L 0x219
0502 #define SPRN_DBAT0U 0x218
0503 #define SPRN_DBAT1L 0x21B
0504 #define SPRN_DBAT1U 0x21A
0505 #define SPRN_DBAT2L 0x21D
0506 #define SPRN_DBAT2U 0x21C
0507 #define SPRN_DBAT3L 0x21F
0508 #define SPRN_DBAT3U 0x21E
0509 #define SPRN_DBAT4L 0x239
0510 #define SPRN_DBAT4U 0x238
0511 #define SPRN_DBAT5L 0x23B
0512 #define SPRN_DBAT5U 0x23A
0513 #define SPRN_DBAT6L 0x23D
0514 #define SPRN_DBAT6U 0x23C
0515 #define SPRN_DBAT7L 0x23F
0516 #define SPRN_DBAT7U 0x23E
0517 #define SPRN_PPR 0x380
0518 #define SPRN_TSCR 0x399
0519
0520 #define SPRN_DEC 0x016
0521 #define SPRN_PIT 0x3DB
0522
0523 #define SPRN_DER 0x095
0524 #define DER_RSTE 0x40000000
0525 #define DER_CHSTPE 0x20000000
0526 #define DER_MCIE 0x10000000
0527 #define DER_EXTIE 0x02000000
0528 #define DER_ALIE 0x01000000
0529 #define DER_PRIE 0x00800000
0530 #define DER_FPUVIE 0x00400000
0531 #define DER_DECIE 0x00200000
0532 #define DER_SYSIE 0x00040000
0533 #define DER_TRE 0x00020000
0534 #define DER_SEIE 0x00004000
0535 #define DER_ITLBMSE 0x00002000
0536 #define DER_ITLBERE 0x00001000
0537 #define DER_DTLBMSE 0x00000800
0538 #define DER_DTLBERE 0x00000400
0539 #define DER_LBRKE 0x00000008
0540 #define DER_IBRKE 0x00000004
0541 #define DER_EBRKE 0x00000002
0542 #define DER_DPIE 0x00000001
0543 #define SPRN_DMISS 0x3D0
0544 #define SPRN_DHDES 0x0B1
0545 #define SPRN_DPDES 0x0B0
0546 #define SPRN_EAR 0x11A
0547 #define SPRN_HASH1 0x3D2
0548 #define SPRN_HASH2 0x3D3
0549 #define SPRN_HID0 0x3F0
0550 #define HID0_HDICE_SH (63 - 23)
0551 #define HID0_EMCP (1<<31)
0552 #define HID0_EBA (1<<29)
0553 #define HID0_EBD (1<<28)
0554 #define HID0_SBCLK (1<<27)
0555 #define HID0_EICE (1<<26)
0556 #define HID0_TBEN (1<<26)
0557 #define HID0_ECLK (1<<25)
0558 #define HID0_PAR (1<<24)
0559 #define HID0_STEN (1<<24)
0560 #define HID0_HIGH_BAT (1<<23)
0561 #define HID0_DOZE (1<<23)
0562 #define HID0_NAP (1<<22)
0563 #define HID0_SLEEP (1<<21)
0564 #define HID0_DPM (1<<20)
0565 #define HID0_BHTCLR (1<<18)
0566 #define HID0_XAEN (1<<17)
0567 #define HID0_NHR (1<<16)
0568 #define HID0_ICE (1<<15)
0569 #define HID0_DCE (1<<14)
0570 #define HID0_ILOCK (1<<13)
0571 #define HID0_DLOCK (1<<12)
0572 #define HID0_ICFI (1<<11)
0573 #define HID0_DCI (1<<10)
0574 #define HID0_SPD (1<<9)
0575 #define HID0_DAPUEN (1<<8)
0576 #define HID0_SGE (1<<7)
0577 #define HID0_SIED (1<<7)
0578 #define HID0_DCFA (1<<6)
0579 #define HID0_LRSTK (1<<4)
0580 #define HID0_BTIC (1<<5)
0581 #define HID0_ABE (1<<3)
0582 #define HID0_FOLD (1<<3)
0583 #define HID0_BHTE (1<<2)
0584 #define HID0_BTCD (1<<1)
0585 #define HID0_NOPDST (1<<1)
0586 #define HID0_NOPTI (1<<0)
0587
0588 #define HID0_POWER8_4LPARMODE __MASK(61)
0589 #define HID0_POWER8_2LPARMODE __MASK(57)
0590 #define HID0_POWER8_1TO2LPAR __MASK(52)
0591 #define HID0_POWER8_1TO4LPAR __MASK(51)
0592 #define HID0_POWER8_DYNLPARDIS __MASK(48)
0593
0594
0595 #define HID0_POWER9_RADIX __MASK(63 - 8)
0596
0597 #define SPRN_HID1 0x3F1
0598 #ifdef CONFIG_PPC_BOOK3S_32
0599 #define HID1_EMCP (1<<31)
0600 #define HID1_DFS (1<<22)
0601 #define HID1_PC0 (1<<16)
0602 #define HID1_PC1 (1<<15)
0603 #define HID1_PC2 (1<<14)
0604 #define HID1_PC3 (1<<13)
0605 #define HID1_SYNCBE (1<<11)
0606 #define HID1_ABE (1<<10)
0607 #define HID1_PS (1<<16)
0608 #endif
0609 #define SPRN_HID2 0x3F8
0610 #define SPRN_HID2_GEKKO 0x398
0611 #define SPRN_IABR 0x3F2
0612 #define SPRN_IABR2 0x3FA
0613 #define SPRN_IBCR 0x135
0614 #define SPRN_IAMR 0x03D
0615 #define SPRN_HID4 0x3F4
0616 #define HID4_LPES0 (1ul << (63-0))
0617 #define HID4_RMLS2_SH (63 - 2)
0618 #define HID4_LPID5_SH (63 - 6)
0619 #define HID4_RMOR_SH (63 - 22)
0620 #define HID4_RMOR (0xFFFFul << HID4_RMOR_SH)
0621 #define HID4_LPES1 (1 << (63-57))
0622 #define HID4_RMLS0_SH (63 - 58)
0623 #define HID4_LPID1_SH 0
0624 #define SPRN_HID4_GEKKO 0x3F3
0625 #define SPRN_HID5 0x3F6
0626 #define SPRN_HID6 0x3F9
0627 #define HID6_LB (0x0F<<12)
0628 #define HID6_DLP (1<<20)
0629 #define SPRN_TSC_CELL 0x399
0630 #define TSC_CELL_DEC_ENABLE_0 0x400000
0631 #define TSC_CELL_DEC_ENABLE_1 0x200000
0632 #define TSC_CELL_EE_ENABLE 0x100000
0633 #define TSC_CELL_EE_BOOST 0x080000
0634 #define SPRN_TSC 0x3FD
0635 #define SPRN_TST 0x3FC
0636 #if !defined(SPRN_IAC1) && !defined(SPRN_IAC2)
0637 #define SPRN_IAC1 0x3F4
0638 #define SPRN_IAC2 0x3F5
0639 #endif
0640 #define SPRN_IBAT0L 0x211
0641 #define SPRN_IBAT0U 0x210
0642 #define SPRN_IBAT1L 0x213
0643 #define SPRN_IBAT1U 0x212
0644 #define SPRN_IBAT2L 0x215
0645 #define SPRN_IBAT2U 0x214
0646 #define SPRN_IBAT3L 0x217
0647 #define SPRN_IBAT3U 0x216
0648 #define SPRN_IBAT4L 0x231
0649 #define SPRN_IBAT4U 0x230
0650 #define SPRN_IBAT5L 0x233
0651 #define SPRN_IBAT5U 0x232
0652 #define SPRN_IBAT6L 0x235
0653 #define SPRN_IBAT6U 0x234
0654 #define SPRN_IBAT7L 0x237
0655 #define SPRN_IBAT7U 0x236
0656 #define SPRN_ICMP 0x3D5
0657 #define SPRN_ICTC 0x3FB
0658 #ifndef SPRN_ICTRL
0659 #define SPRN_ICTRL 0x3F3
0660 #endif
0661 #define ICTRL_EICE 0x08000000
0662 #define ICTRL_EDC 0x04000000
0663 #define ICTRL_EICP 0x00000100
0664 #define SPRN_IMISS 0x3D4
0665 #define SPRN_IMMR 0x27E
0666 #define SPRN_L2CR 0x3F9
0667 #define SPRN_L2CR2 0x3f8
0668 #define L2CR_L2E 0x80000000
0669 #define L2CR_L2PE 0x40000000
0670 #define L2CR_L2SIZ_MASK 0x30000000
0671 #define L2CR_L2SIZ_256KB 0x10000000
0672 #define L2CR_L2SIZ_512KB 0x20000000
0673 #define L2CR_L2SIZ_1MB 0x30000000
0674 #define L2CR_L2CLK_MASK 0x0e000000
0675 #define L2CR_L2CLK_DISABLED 0x00000000
0676 #define L2CR_L2CLK_DIV1 0x02000000
0677 #define L2CR_L2CLK_DIV1_5 0x04000000
0678 #define L2CR_L2CLK_DIV2 0x08000000
0679 #define L2CR_L2CLK_DIV2_5 0x0a000000
0680 #define L2CR_L2CLK_DIV3 0x0c000000
0681 #define L2CR_L2RAM_MASK 0x01800000
0682 #define L2CR_L2RAM_FLOW 0x00000000
0683 #define L2CR_L2RAM_PIPE 0x01000000
0684 #define L2CR_L2RAM_PIPE_LW 0x01800000
0685 #define L2CR_L2DO 0x00400000
0686 #define L2CR_L2I 0x00200000
0687 #define L2CR_L2CTL 0x00100000
0688 #define L2CR_L2WT 0x00080000
0689 #define L2CR_L2TS 0x00040000
0690 #define L2CR_L2OH_MASK 0x00030000
0691 #define L2CR_L2OH_0_5 0x00000000
0692 #define L2CR_L2OH_1_0 0x00010000
0693 #define L2CR_L2SL 0x00008000
0694 #define L2CR_L2DF 0x00004000
0695 #define L2CR_L2BYP 0x00002000
0696 #define L2CR_L2IP 0x00000001
0697 #define L2CR_L2IO_745x 0x00100000
0698 #define L2CR_L2DO_745x 0x00010000
0699 #define L2CR_L2REP_745x 0x00001000
0700 #define L2CR_L2HWF_745x 0x00000800
0701 #define SPRN_L3CR 0x3FA
0702 #define L3CR_L3E 0x80000000
0703 #define L3CR_L3PE 0x40000000
0704 #define L3CR_L3APE 0x20000000
0705 #define L3CR_L3SIZ 0x10000000
0706 #define L3CR_L3CLKEN 0x08000000
0707 #define L3CR_L3RES 0x04000000
0708 #define L3CR_L3CLKDIV 0x03800000
0709 #define L3CR_L3IO 0x00400000
0710 #define L3CR_L3SPO 0x00040000
0711 #define L3CR_L3CKSP 0x00030000
0712 #define L3CR_L3PSP 0x0000e000
0713 #define L3CR_L3REP 0x00001000
0714 #define L3CR_L3HWF 0x00000800
0715 #define L3CR_L3I 0x00000400
0716 #define L3CR_L3RT 0x00000300
0717 #define L3CR_L3NIRCA 0x00000080
0718 #define L3CR_L3DO 0x00000040
0719 #define L3CR_PMEN 0x00000004
0720 #define L3CR_PMSIZ 0x00000001
0721
0722 #define SPRN_MSSCR0 0x3f6
0723 #define SPRN_MSSSR0 0x3f7
0724 #define SPRN_LDSTCR 0x3f8
0725 #define SPRN_LDSTDB 0x3f4
0726 #define SPRN_LR 0x008
0727 #ifndef SPRN_PIR
0728 #define SPRN_PIR 0x3FF
0729 #endif
0730 #define SPRN_TIR 0x1BE
0731 #define SPRN_PTCR 0x1D0
0732 #define SPRN_PSPB 0x09F
0733 #define SPRN_PTEHI 0x3D5
0734 #define SPRN_PTELO 0x3D6
0735 #define SPRN_PURR 0x135
0736 #define SPRN_PVR 0x11F
0737 #define SPRN_RPA 0x3D6
0738 #define SPRN_SDA 0x3BF
0739 #define SPRN_SDR1 0x019
0740 #define SPRN_ASR 0x118
0741 #define SPRN_SIA 0x3BB
0742 #define SPRN_SPRG0 0x110
0743 #define SPRN_SPRG1 0x111
0744 #define SPRN_SPRG2 0x112
0745 #define SPRN_SPRG3 0x113
0746 #define SPRN_USPRG3 0x103
0747 #define SPRN_SPRG4 0x114
0748 #define SPRN_USPRG4 0x104
0749 #define SPRN_SPRG5 0x115
0750 #define SPRN_USPRG5 0x105
0751 #define SPRN_SPRG6 0x116
0752 #define SPRN_USPRG6 0x106
0753 #define SPRN_SPRG7 0x117
0754 #define SPRN_USPRG7 0x107
0755 #define SPRN_SRR0 0x01A
0756 #define SPRN_SRR1 0x01B
0757
0758 #ifdef CONFIG_PPC_BOOK3S
0759
0760
0761
0762
0763
0764
0765
0766 #define SRR1_MSR_BITS (~0x783f0000UL)
0767 #endif
0768
0769 #define SRR1_ISI_NOPT 0x40000000
0770 #define SRR1_ISI_N_G_OR_CIP 0x10000000
0771 #define SRR1_ISI_PROT 0x08000000
0772 #define SRR1_WAKEMASK 0x00380000
0773 #define SRR1_WAKEMASK_P8 0x003c0000
0774 #define SRR1_WAKEMCE_RESVD 0x003c0000
0775 #define SRR1_WAKESYSERR 0x00300000
0776 #define SRR1_WAKEEE 0x00200000
0777 #define SRR1_WAKEHVI 0x00240000
0778 #define SRR1_WAKEMT 0x00280000
0779 #define SRR1_WAKEHMI 0x00280000
0780 #define SRR1_WAKEDEC 0x00180000
0781 #define SRR1_WAKEDBELL 0x00140000
0782 #define SRR1_WAKETHERM 0x00100000
0783 #define SRR1_WAKERESET 0x00100000
0784 #define SRR1_WAKEHDBELL 0x000c0000
0785 #define SRR1_WAKESTATE 0x00030000
0786 #define SRR1_WS_HVLOSS 0x00030000
0787 #define SRR1_WS_GPRLOSS 0x00020000
0788 #define SRR1_WS_NOLOSS 0x00010000
0789 #define SRR1_PROGTM 0x00200000
0790 #define SRR1_PROGFPE 0x00100000
0791 #define SRR1_PROGILL 0x00080000
0792 #define SRR1_PROGPRIV 0x00040000
0793 #define SRR1_PROGTRAP 0x00020000
0794 #define SRR1_PROGADDR 0x00010000
0795
0796 #define SRR1_MCE_MCP 0x00080000
0797 #define SRR1_BOUNDARY 0x10000000
0798 #define SRR1_PREFIXED 0x20000000
0799
0800 #define SPRN_HSRR0 0x13A
0801 #define SPRN_HSRR1 0x13B
0802 #define HSRR1_DENORM 0x00100000
0803 #define HSRR1_HISI_WRITE 0x00010000
0804
0805 #define SPRN_TBCTL 0x35f
0806 #define TBCTL_FREEZE 0x0000000000000000ull
0807 #define TBCTL_RESTART 0x0000000100000000ull
0808 #define TBCTL_UPDATE_UPPER 0x0000000200000000ull
0809 #define TBCTL_UPDATE_LOWER 0x0000000300000000ull
0810
0811 #ifndef SPRN_SVR
0812 #define SPRN_SVR 0x11E
0813 #endif
0814 #define SPRN_THRM1 0x3FC
0815
0816 #define THRM1_TIN (1 << 31)
0817 #define THRM1_TIV (1 << 30)
0818 #define THRM1_THRES(x) ((x&0x7f)<<23)
0819 #define THRM3_SITV(x) ((x & 0x1fff) << 1)
0820 #define THRM1_TID (1<<2)
0821 #define THRM1_TIE (1<<1)
0822 #define THRM1_V (1<<0)
0823 #define SPRN_THRM2 0x3FD
0824 #define SPRN_THRM3 0x3FE
0825 #define THRM3_E (1<<0)
0826 #define SPRN_TLBMISS 0x3D4
0827 #define SPRN_UMMCR0 0x3A8
0828 #define SPRN_UMMCR1 0x3AC
0829 #define SPRN_UPMC1 0x3A9
0830 #define SPRN_UPMC2 0x3AA
0831 #define SPRN_UPMC3 0x3AD
0832 #define SPRN_UPMC4 0x3AE
0833 #define SPRN_USIA 0x3AB
0834 #define SPRN_VRSAVE 0x100
0835 #define SPRN_XER 0x001
0836
0837 #define SPRN_MMCR0_GEKKO 0x3B8
0838 #define SPRN_MMCR1_GEKKO 0x3BC
0839 #define SPRN_PMC1_GEKKO 0x3B9
0840 #define SPRN_PMC2_GEKKO 0x3BA
0841 #define SPRN_PMC3_GEKKO 0x3BD
0842 #define SPRN_PMC4_GEKKO 0x3BE
0843 #define SPRN_WPAR_GEKKO 0x399
0844
0845 #define SPRN_SCOMC 0x114
0846 #define SPRN_SCOMD 0x115
0847
0848
0849 #ifdef CONFIG_PPC64
0850 #define SPRN_MMCR0 795
0851 #define MMCR0_FC 0x80000000UL
0852 #define MMCR0_FCS 0x40000000UL
0853 #define MMCR0_KERNEL_DISABLE MMCR0_FCS
0854 #define MMCR0_FCP 0x20000000UL
0855 #define MMCR0_PROBLEM_DISABLE MMCR0_FCP
0856 #define MMCR0_FCM1 0x10000000UL
0857 #define MMCR0_FCM0 0x08000000UL
0858 #define MMCR0_PMXE ASM_CONST(0x04000000)
0859 #define MMCR0_FCECE ASM_CONST(0x02000000)
0860 #define MMCR0_TBEE 0x00400000UL
0861 #define MMCR0_BHRBA 0x00200000UL
0862 #define MMCR0_EBE 0x00100000UL
0863 #define MMCR0_PMCC 0x000c0000UL
0864 #define MMCR0_PMCCEXT ASM_CONST(0x00000200)
0865 #define MMCR0_PMCC_U6 0x00080000UL
0866 #define MMCR0_PMC1CE 0x00008000UL
0867 #define MMCR0_PMCjCE ASM_CONST(0x00004000)
0868 #define MMCR0_TRIGGER 0x00002000UL
0869 #define MMCR0_PMAO_SYNC ASM_CONST(0x00000800)
0870 #define MMCR0_C56RUN ASM_CONST(0x00000100)
0871
0872 #define MMCR0_PMAO ASM_CONST(0x00000080)
0873 #define MMCR0_SHRFC 0x00000040UL
0874 #define MMCR0_FC56 0x00000010UL
0875 #define MMCR0_FCTI 0x00000008UL
0876 #define MMCR0_FCTA 0x00000004UL
0877 #define MMCR0_FCWAIT 0x00000002UL
0878 #define MMCR0_FCHV 0x00000001UL
0879 #define SPRN_MMCR1 798
0880 #define SPRN_MMCR2 785
0881 #define SPRN_MMCR3 754
0882 #define SPRN_UMMCR2 769
0883 #define SPRN_UMMCR3 738
0884 #define SPRN_MMCRA 0x312
0885 #define MMCRA_SDSYNC 0x80000000UL
0886 #define MMCRA_SDAR_DCACHE_MISS 0x40000000UL
0887 #define MMCRA_SDAR_ERAT_MISS 0x20000000UL
0888 #define MMCRA_SIHV 0x10000000UL
0889 #define MMCRA_SIPR 0x08000000UL
0890 #define MMCRA_SLOT 0x07000000UL
0891 #define MMCRA_SLOT_SHIFT 24
0892 #define MMCRA_SAMPLE_ENABLE 0x00000001UL
0893 #define MMCRA_BHRB_DISABLE _UL(0x2000000000)
0894 #define POWER6_MMCRA_SDSYNC 0x0000080000000000ULL
0895 #define POWER6_MMCRA_SIHV 0x0000040000000000ULL
0896 #define POWER6_MMCRA_SIPR 0x0000020000000000ULL
0897 #define POWER6_MMCRA_THRM 0x00000020UL
0898 #define POWER6_MMCRA_OTHER 0x0000000EUL
0899
0900 #define POWER7P_MMCRA_SIAR_VALID 0x10000000
0901 #define POWER7P_MMCRA_SDAR_VALID 0x08000000
0902
0903 #define SPRN_MMCRH 316
0904 #define SPRN_MMCRS 894
0905 #define SPRN_MMCRC 851
0906 #define SPRN_EBBHR 804
0907 #define SPRN_EBBRR 805
0908 #define SPRN_BESCR 806
0909 #define BESCR_GE 0x8000000000000000ULL
0910 #define SPRN_WORT 895
0911 #define SPRN_WORC 863
0912
0913 #define SPRN_PMC1 787
0914 #define SPRN_PMC2 788
0915 #define SPRN_PMC3 789
0916 #define SPRN_PMC4 790
0917 #define SPRN_PMC5 791
0918 #define SPRN_PMC6 792
0919 #define SPRN_PMC7 793
0920 #define SPRN_PMC8 794
0921 #define SPRN_SIER 784
0922 #define SIER_SIPR 0x2000000
0923 #define SIER_SIHV 0x1000000
0924 #define SIER_SIAR_VALID 0x0400000
0925 #define SIER_SDAR_VALID 0x0200000
0926 #define SPRN_SIER2 752
0927 #define SPRN_SIER3 753
0928 #define SPRN_USIER2 736
0929 #define SPRN_USIER3 737
0930 #define SPRN_SIAR 796
0931 #define SPRN_SDAR 797
0932 #define SPRN_TACR 888
0933 #define SPRN_TCSCR 889
0934 #define SPRN_CSIGR 890
0935 #define SPRN_SPMC1 892
0936 #define SPRN_SPMC2 893
0937
0938
0939 #define MMCR0_USER_MASK (MMCR0_FC | MMCR0_PMXE | MMCR0_PMAO)
0940 #define MMCR2_USER_MASK 0x4020100804020000UL
0941 #define SIER_USER_MASK 0x7fffffUL
0942
0943 #define SPRN_PA6T_MMCR0 795
0944 #define PA6T_MMCR0_EN0 0x0000000000000001UL
0945 #define PA6T_MMCR0_EN1 0x0000000000000002UL
0946 #define PA6T_MMCR0_EN2 0x0000000000000004UL
0947 #define PA6T_MMCR0_EN3 0x0000000000000008UL
0948 #define PA6T_MMCR0_EN4 0x0000000000000010UL
0949 #define PA6T_MMCR0_EN5 0x0000000000000020UL
0950 #define PA6T_MMCR0_SUPEN 0x0000000000000040UL
0951 #define PA6T_MMCR0_PREN 0x0000000000000080UL
0952 #define PA6T_MMCR0_HYPEN 0x0000000000000100UL
0953 #define PA6T_MMCR0_FCM0 0x0000000000000200UL
0954 #define PA6T_MMCR0_FCM1 0x0000000000000400UL
0955 #define PA6T_MMCR0_INTGEN 0x0000000000000800UL
0956 #define PA6T_MMCR0_INTEN0 0x0000000000001000UL
0957 #define PA6T_MMCR0_INTEN1 0x0000000000002000UL
0958 #define PA6T_MMCR0_INTEN2 0x0000000000004000UL
0959 #define PA6T_MMCR0_INTEN3 0x0000000000008000UL
0960 #define PA6T_MMCR0_INTEN4 0x0000000000010000UL
0961 #define PA6T_MMCR0_INTEN5 0x0000000000020000UL
0962 #define PA6T_MMCR0_DISCNT 0x0000000000040000UL
0963 #define PA6T_MMCR0_UOP 0x0000000000080000UL
0964 #define PA6T_MMCR0_TRG 0x0000000000100000UL
0965 #define PA6T_MMCR0_TRGEN 0x0000000000200000UL
0966 #define PA6T_MMCR0_TRGREG 0x0000000001600000UL
0967 #define PA6T_MMCR0_SIARLOG 0x0000000002000000UL
0968 #define PA6T_MMCR0_SDARLOG 0x0000000004000000UL
0969 #define PA6T_MMCR0_PROEN 0x0000000008000000UL
0970 #define PA6T_MMCR0_PROLOG 0x0000000010000000UL
0971 #define PA6T_MMCR0_DAMEN2 0x0000000020000000UL
0972 #define PA6T_MMCR0_DAMEN3 0x0000000040000000UL
0973 #define PA6T_MMCR0_DAMEN4 0x0000000080000000UL
0974 #define PA6T_MMCR0_DAMEN5 0x0000000100000000UL
0975 #define PA6T_MMCR0_DAMSEL2 0x0000000200000000UL
0976 #define PA6T_MMCR0_DAMSEL3 0x0000000400000000UL
0977 #define PA6T_MMCR0_DAMSEL4 0x0000000800000000UL
0978 #define PA6T_MMCR0_DAMSEL5 0x0000001000000000UL
0979 #define PA6T_MMCR0_HANDDIS 0x0000002000000000UL
0980 #define PA6T_MMCR0_PCTEN 0x0000004000000000UL
0981 #define PA6T_MMCR0_SOCEN 0x0000008000000000UL
0982 #define PA6T_MMCR0_SOCMOD 0x0000010000000000UL
0983
0984 #define SPRN_PA6T_MMCR1 798
0985 #define PA6T_MMCR1_ES2 0x00000000000000ffUL
0986 #define PA6T_MMCR1_ES3 0x000000000000ff00UL
0987 #define PA6T_MMCR1_ES4 0x0000000000ff0000UL
0988 #define PA6T_MMCR1_ES5 0x00000000ff000000UL
0989
0990 #define SPRN_PA6T_UPMC0 771
0991 #define SPRN_PA6T_UPMC1 772
0992 #define SPRN_PA6T_UPMC2 773
0993 #define SPRN_PA6T_UPMC3 774
0994 #define SPRN_PA6T_UPMC4 775
0995 #define SPRN_PA6T_UPMC5 776
0996 #define SPRN_PA6T_UMMCR0 779
0997 #define SPRN_PA6T_SIAR 780
0998 #define SPRN_PA6T_UMMCR1 782
0999 #define SPRN_PA6T_SIER 785
1000 #define SPRN_PA6T_PMC0 787
1001 #define SPRN_PA6T_PMC1 788
1002 #define SPRN_PA6T_PMC2 789
1003 #define SPRN_PA6T_PMC3 790
1004 #define SPRN_PA6T_PMC4 791
1005 #define SPRN_PA6T_PMC5 792
1006 #define SPRN_PA6T_TSR0 793
1007 #define SPRN_PA6T_TSR1 794
1008 #define SPRN_PA6T_TSR2 799
1009 #define SPRN_PA6T_TSR3 784
1010
1011 #define SPRN_PA6T_IER 981
1012 #define SPRN_PA6T_DER 982
1013 #define SPRN_PA6T_BER 862
1014 #define SPRN_PA6T_MER 849
1015
1016 #define SPRN_PA6T_IMA0 880
1017 #define SPRN_PA6T_IMA1 881
1018 #define SPRN_PA6T_IMA2 882
1019 #define SPRN_PA6T_IMA3 883
1020 #define SPRN_PA6T_IMA4 884
1021 #define SPRN_PA6T_IMA5 885
1022 #define SPRN_PA6T_IMA6 886
1023 #define SPRN_PA6T_IMA7 887
1024 #define SPRN_PA6T_IMA8 888
1025 #define SPRN_PA6T_IMA9 889
1026 #define SPRN_PA6T_BTCR 978
1027 #define SPRN_PA6T_IMAAT 979
1028 #define SPRN_PA6T_PCCR 1019
1029 #define SPRN_BKMK 1020
1030 #define SPRN_PA6T_RPCCR 1021
1031
1032
1033 #else
1034 #define SPRN_MMCR0 952
1035 #define MMCR0_FC 0x80000000UL
1036 #define MMCR0_FCS 0x40000000UL
1037 #define MMCR0_FCP 0x20000000UL
1038 #define MMCR0_FCM1 0x10000000UL
1039 #define MMCR0_FCM0 0x08000000UL
1040 #define MMCR0_PMXE 0x04000000UL
1041 #define MMCR0_FCECE 0x02000000UL
1042 #define MMCR0_TBEE 0x00400000UL
1043 #define MMCR0_PMC1CE 0x00008000UL
1044 #define MMCR0_PMCnCE 0x00004000UL
1045 #define MMCR0_TRIGGER 0x00002000UL
1046 #define MMCR0_PMC1SEL 0x00001fc0UL
1047 #define MMCR0_PMC2SEL 0x0000003fUL
1048
1049 #define SPRN_MMCR1 956
1050 #define MMCR1_PMC3SEL 0xf8000000UL
1051 #define MMCR1_PMC4SEL 0x07c00000UL
1052 #define MMCR1_PMC5SEL 0x003e0000UL
1053 #define MMCR1_PMC6SEL 0x0001f800UL
1054 #define SPRN_MMCR2 944
1055 #define SPRN_PMC1 953
1056 #define SPRN_PMC2 954
1057 #define SPRN_PMC3 957
1058 #define SPRN_PMC4 958
1059 #define SPRN_PMC5 945
1060 #define SPRN_PMC6 946
1061
1062 #define SPRN_SIAR 955
1063
1064
1065 #define MMCR0_PMC1_CYCLES (1 << 7)
1066 #define MMCR0_PMC1_ICACHEMISS (5 << 7)
1067 #define MMCR0_PMC1_DTLB (6 << 7)
1068 #define MMCR0_PMC2_DCACHEMISS 0x6
1069 #define MMCR0_PMC2_CYCLES 0x1
1070 #define MMCR0_PMC2_ITLB 0x7
1071 #define MMCR0_PMC2_LOADMISSTIME 0x5
1072 #endif
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138 #ifdef CONFIG_PPC64
1139 #define SPRN_SPRG_PACA SPRN_SPRG1
1140 #else
1141 #define SPRN_SPRG_THREAD SPRN_SPRG3
1142 #endif
1143
1144 #ifdef CONFIG_PPC_BOOK3S_64
1145 #define SPRN_SPRG_SCRATCH0 SPRN_SPRG2
1146 #define SPRN_SPRG_HPACA SPRN_HSPRG0
1147 #define SPRN_SPRG_HSCRATCH0 SPRN_HSPRG1
1148 #define SPRN_SPRG_VDSO_READ SPRN_USPRG3
1149 #define SPRN_SPRG_VDSO_WRITE SPRN_SPRG3
1150
1151 #define GET_PACA(rX) \
1152 BEGIN_FTR_SECTION_NESTED(66); \
1153 mfspr rX,SPRN_SPRG_PACA; \
1154 FTR_SECTION_ELSE_NESTED(66); \
1155 mfspr rX,SPRN_SPRG_HPACA; \
1156 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_HVMODE, 66)
1157
1158 #define SET_PACA(rX) \
1159 BEGIN_FTR_SECTION_NESTED(66); \
1160 mtspr SPRN_SPRG_PACA,rX; \
1161 FTR_SECTION_ELSE_NESTED(66); \
1162 mtspr SPRN_SPRG_HPACA,rX; \
1163 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_HVMODE, 66)
1164
1165 #define GET_SCRATCH0(rX) \
1166 BEGIN_FTR_SECTION_NESTED(66); \
1167 mfspr rX,SPRN_SPRG_SCRATCH0; \
1168 FTR_SECTION_ELSE_NESTED(66); \
1169 mfspr rX,SPRN_SPRG_HSCRATCH0; \
1170 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_HVMODE, 66)
1171
1172 #define SET_SCRATCH0(rX) \
1173 BEGIN_FTR_SECTION_NESTED(66); \
1174 mtspr SPRN_SPRG_SCRATCH0,rX; \
1175 FTR_SECTION_ELSE_NESTED(66); \
1176 mtspr SPRN_SPRG_HSCRATCH0,rX; \
1177 ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_HVMODE, 66)
1178
1179 #else
1180 #define GET_SCRATCH0(rX) mfspr rX,SPRN_SPRG_SCRATCH0
1181 #define SET_SCRATCH0(rX) mtspr SPRN_SPRG_SCRATCH0,rX
1182
1183 #endif
1184
1185 #ifdef CONFIG_PPC_BOOK3E_64
1186 #define SPRN_SPRG_MC_SCRATCH SPRN_SPRG8
1187 #define SPRN_SPRG_CRIT_SCRATCH SPRN_SPRG3
1188 #define SPRN_SPRG_DBG_SCRATCH SPRN_SPRG9
1189 #define SPRN_SPRG_TLB_EXFRAME SPRN_SPRG2
1190 #define SPRN_SPRG_TLB_SCRATCH SPRN_SPRG6
1191 #define SPRN_SPRG_GEN_SCRATCH SPRN_SPRG0
1192 #define SPRN_SPRG_GDBELL_SCRATCH SPRN_SPRG_GEN_SCRATCH
1193 #define SPRN_SPRG_VDSO_READ SPRN_USPRG7
1194 #define SPRN_SPRG_VDSO_WRITE SPRN_SPRG7
1195
1196 #define SET_PACA(rX) mtspr SPRN_SPRG_PACA,rX
1197 #define GET_PACA(rX) mfspr rX,SPRN_SPRG_PACA
1198
1199 #endif
1200
1201 #ifdef CONFIG_PPC_BOOK3S_32
1202 #define SPRN_SPRG_SCRATCH0 SPRN_SPRG0
1203 #define SPRN_SPRG_SCRATCH1 SPRN_SPRG1
1204 #define SPRN_SPRG_SCRATCH2 SPRN_SPRG2
1205 #define SPRN_SPRG_603_LRU SPRN_SPRG4
1206 #endif
1207
1208 #ifdef CONFIG_40x
1209 #define SPRN_SPRG_SCRATCH0 SPRN_SPRG0
1210 #define SPRN_SPRG_SCRATCH1 SPRN_SPRG1
1211 #define SPRN_SPRG_SCRATCH2 SPRN_SPRG2
1212 #define SPRN_SPRG_SCRATCH3 SPRN_SPRG4
1213 #define SPRN_SPRG_SCRATCH4 SPRN_SPRG5
1214 #define SPRN_SPRG_SCRATCH5 SPRN_SPRG6
1215 #define SPRN_SPRG_SCRATCH6 SPRN_SPRG7
1216 #endif
1217
1218 #ifdef CONFIG_BOOKE
1219 #define SPRN_SPRG_RSCRATCH0 SPRN_SPRG0
1220 #define SPRN_SPRG_WSCRATCH0 SPRN_SPRG0
1221 #define SPRN_SPRG_RSCRATCH1 SPRN_SPRG1
1222 #define SPRN_SPRG_WSCRATCH1 SPRN_SPRG1
1223 #define SPRN_SPRG_RSCRATCH_CRIT SPRN_SPRG2
1224 #define SPRN_SPRG_WSCRATCH_CRIT SPRN_SPRG2
1225 #define SPRN_SPRG_RSCRATCH2 SPRN_SPRG4R
1226 #define SPRN_SPRG_WSCRATCH2 SPRN_SPRG4W
1227 #define SPRN_SPRG_RSCRATCH3 SPRN_SPRG5R
1228 #define SPRN_SPRG_WSCRATCH3 SPRN_SPRG5W
1229 #define SPRN_SPRG_RSCRATCH_MC SPRN_SPRG1
1230 #define SPRN_SPRG_WSCRATCH_MC SPRN_SPRG1
1231 #define SPRN_SPRG_RSCRATCH4 SPRN_SPRG7R
1232 #define SPRN_SPRG_WSCRATCH4 SPRN_SPRG7W
1233 #define SPRN_SPRG_RSCRATCH_DBG SPRN_SPRG9
1234 #define SPRN_SPRG_WSCRATCH_DBG SPRN_SPRG9
1235 #endif
1236
1237 #ifdef CONFIG_PPC_8xx
1238 #define SPRN_SPRG_SCRATCH0 SPRN_SPRG0
1239 #define SPRN_SPRG_SCRATCH1 SPRN_SPRG1
1240 #define SPRN_SPRG_SCRATCH2 SPRN_SPRG2
1241 #endif
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251 #ifdef CONFIG_PPC64
1252 #define MTFSF_L(REG) \
1253 .long (0xfc00058e | ((0xff) << 17) | ((REG) << 11) | (1 << 25))
1254 #else
1255 #define MTFSF_L(REG) mtfsf 0xff, (REG)
1256 #endif
1257
1258
1259
1260 #define PVR_VER(pvr) (((pvr) >> 16) & 0xFFFF)
1261 #define PVR_REV(pvr) (((pvr) >> 0) & 0xFFFF)
1262
1263 #define pvr_version_is(pvr) (PVR_VER(mfspr(SPRN_PVR)) == (pvr))
1264
1265
1266
1267
1268
1269
1270 #define PVR_FAM(pvr) (((pvr) >> 20) & 0xFFF)
1271 #define PVR_MEM(pvr) (((pvr) >> 16) & 0xF)
1272 #define PVR_CORE(pvr) (((pvr) >> 12) & 0xF)
1273 #define PVR_CFG(pvr) (((pvr) >> 8) & 0xF)
1274 #define PVR_MAJ(pvr) (((pvr) >> 4) & 0xF)
1275 #define PVR_MIN(pvr) (((pvr) >> 0) & 0xF)
1276
1277
1278
1279 #define PVR_403GA 0x00200000
1280 #define PVR_403GB 0x00200100
1281 #define PVR_403GC 0x00200200
1282 #define PVR_403GCX 0x00201400
1283 #define PVR_405GP 0x40110000
1284 #define PVR_476 0x11a52000
1285 #define PVR_476FPE 0x7ff50000
1286 #define PVR_STB03XXX 0x40310000
1287 #define PVR_NP405H 0x41410000
1288 #define PVR_NP405L 0x41610000
1289 #define PVR_601 0x00010000
1290 #define PVR_602 0x00050000
1291 #define PVR_603 0x00030000
1292 #define PVR_603e 0x00060000
1293 #define PVR_603ev 0x00070000
1294 #define PVR_603r 0x00071000
1295 #define PVR_604 0x00040000
1296 #define PVR_604e 0x00090000
1297 #define PVR_604r 0x000A0000
1298 #define PVR_620 0x00140000
1299 #define PVR_740 0x00080000
1300 #define PVR_750 PVR_740
1301 #define PVR_740P 0x10080000
1302 #define PVR_750P PVR_740P
1303 #define PVR_7400 0x000C0000
1304 #define PVR_7410 0x800C0000
1305 #define PVR_7450 0x80000000
1306 #define PVR_8540 0x80200000
1307 #define PVR_8560 0x80200000
1308 #define PVR_VER_E500V1 0x8020
1309 #define PVR_VER_E500V2 0x8021
1310 #define PVR_VER_E500MC 0x8023
1311 #define PVR_VER_E5500 0x8024
1312 #define PVR_VER_E6500 0x8040
1313
1314
1315
1316
1317
1318
1319
1320 #define PVR_8xx 0x00500000
1321
1322 #define PVR_8240 0x00810100
1323 #define PVR_8245 0x80811014
1324 #define PVR_8260 PVR_8240
1325
1326
1327 #define PVR_476_ISS 0x00052000
1328
1329
1330 #define PVR_NORTHSTAR 0x0033
1331 #define PVR_PULSAR 0x0034
1332 #define PVR_POWER4 0x0035
1333 #define PVR_ICESTAR 0x0036
1334 #define PVR_SSTAR 0x0037
1335 #define PVR_POWER4p 0x0038
1336 #define PVR_970 0x0039
1337 #define PVR_POWER5 0x003A
1338 #define PVR_POWER5p 0x003B
1339 #define PVR_970FX 0x003C
1340 #define PVR_POWER6 0x003E
1341 #define PVR_POWER7 0x003F
1342 #define PVR_630 0x0040
1343 #define PVR_630p 0x0041
1344 #define PVR_970MP 0x0044
1345 #define PVR_970GX 0x0045
1346 #define PVR_POWER7p 0x004A
1347 #define PVR_POWER8E 0x004B
1348 #define PVR_POWER8NVL 0x004C
1349 #define PVR_POWER8 0x004D
1350 #define PVR_POWER9 0x004E
1351 #define PVR_POWER10 0x0080
1352 #define PVR_BE 0x0070
1353 #define PVR_PA6T 0x0090
1354
1355
1356 #define PVR_ARCH_204 0x0f000001
1357 #define PVR_ARCH_205 0x0f000002
1358 #define PVR_ARCH_206 0x0f000003
1359 #define PVR_ARCH_206p 0x0f100003
1360 #define PVR_ARCH_207 0x0f000004
1361 #define PVR_ARCH_300 0x0f000005
1362 #define PVR_ARCH_31 0x0f000006
1363
1364
1365 #ifndef __ASSEMBLY__
1366
1367 #if defined(CONFIG_PPC64) || defined(__CHECKER__)
1368 typedef struct {
1369 u32 val;
1370 #ifdef CONFIG_PPC64
1371 u32 suffix;
1372 #endif
1373 } __packed ppc_inst_t;
1374 #else
1375 typedef u32 ppc_inst_t;
1376 #endif
1377
1378 #define mfmsr() ({unsigned long rval; \
1379 asm volatile("mfmsr %0" : "=r" (rval) : \
1380 : "memory"); rval;})
1381 #ifdef CONFIG_PPC_BOOK3S_64
1382 #define __mtmsrd(v, l) asm volatile("mtmsrd %0," __stringify(l) \
1383 : : "r" (v) : "memory")
1384 #define mtmsr(v) __mtmsrd((v), 0)
1385 #define __MTMSR "mtmsrd"
1386 #else
1387 #define mtmsr(v) asm volatile("mtmsr %0" : \
1388 : "r" ((unsigned long)(v)) \
1389 : "memory")
1390 #define __mtmsrd(v, l) BUILD_BUG()
1391 #define __MTMSR "mtmsr"
1392 #endif
1393
1394 static inline void mtmsr_isync(unsigned long val)
1395 {
1396 asm volatile(__MTMSR " %0; " ASM_FTR_IFCLR("isync", "nop", %1) : :
1397 "r" (val), "i" (CPU_FTR_ARCH_206) : "memory");
1398 }
1399
1400 #define mfspr(rn) ({unsigned long rval; \
1401 asm volatile("mfspr %0," __stringify(rn) \
1402 : "=r" (rval)); rval;})
1403 #ifndef mtspr
1404 #define mtspr(rn, v) asm volatile("mtspr " __stringify(rn) ",%0" : \
1405 : "r" ((unsigned long)(v)) \
1406 : "memory")
1407 #endif
1408 #define wrtspr(rn) asm volatile("mtspr " __stringify(rn) ",2" : : : "memory")
1409
1410 static inline void wrtee(unsigned long val)
1411 {
1412 if (__builtin_constant_p(val))
1413 asm volatile("wrteei %0" : : "i" ((val & MSR_EE) ? 1 : 0) : "memory");
1414 else
1415 asm volatile("wrtee %0" : : "r" (val) : "memory");
1416 }
1417
1418 extern unsigned long msr_check_and_set(unsigned long bits);
1419 extern bool strict_msr_control;
1420 extern void __msr_check_and_clear(unsigned long bits);
1421 static inline void msr_check_and_clear(unsigned long bits)
1422 {
1423 if (strict_msr_control)
1424 __msr_check_and_clear(bits);
1425 }
1426
1427 #ifdef CONFIG_PPC32
1428 static inline u32 mfsr(u32 idx)
1429 {
1430 u32 val;
1431
1432 if (__builtin_constant_p(idx))
1433 asm volatile("mfsr %0, %1" : "=r" (val): "i" (idx >> 28));
1434 else
1435 asm volatile("mfsrin %0, %1" : "=r" (val): "r" (idx));
1436
1437 return val;
1438 }
1439
1440 static inline void mtsr(u32 val, u32 idx)
1441 {
1442 if (__builtin_constant_p(idx))
1443 asm volatile("mtsr %1, %0" : : "r" (val), "i" (idx >> 28));
1444 else
1445 asm volatile("mtsrin %0, %1" : : "r" (val), "r" (idx));
1446 }
1447 #endif
1448
1449 extern unsigned long current_stack_frame(void);
1450
1451 register unsigned long current_stack_pointer asm("r1");
1452
1453 extern unsigned long scom970_read(unsigned int address);
1454 extern void scom970_write(unsigned int address, unsigned long value);
1455
1456 struct pt_regs;
1457
1458 extern void ppc_save_regs(struct pt_regs *regs);
1459 #endif
1460 #endif
1461 #endif