Blame view
include/asm-powerpc/cputable.h
16.9 KB
10b35d997
|
1 2 |
#ifndef __ASM_POWERPC_CPUTABLE_H #define __ASM_POWERPC_CPUTABLE_H |
3ddfbcf19
|
3 |
#include <asm/asm-compat.h> |
10b35d997
|
4 5 6 7 8 9 10 11 12 13 14 15 |
#define PPC_FEATURE_32 0x80000000 #define PPC_FEATURE_64 0x40000000 #define PPC_FEATURE_601_INSTR 0x20000000 #define PPC_FEATURE_HAS_ALTIVEC 0x10000000 #define PPC_FEATURE_HAS_FPU 0x08000000 #define PPC_FEATURE_HAS_MMU 0x04000000 #define PPC_FEATURE_HAS_4xxMAC 0x02000000 #define PPC_FEATURE_UNIFIED_CACHE 0x01000000 #define PPC_FEATURE_HAS_SPE 0x00800000 #define PPC_FEATURE_HAS_EFP_SINGLE 0x00400000 #define PPC_FEATURE_HAS_EFP_DOUBLE 0x00200000 |
985990137
|
16 |
#define PPC_FEATURE_NO_TB 0x00100000 |
a7ddc5e85
|
17 18 19 20 |
#define PPC_FEATURE_POWER4 0x00080000 #define PPC_FEATURE_POWER5 0x00040000 #define PPC_FEATURE_POWER5_PLUS 0x00020000 #define PPC_FEATURE_CELL 0x00010000 |
80f15dc70
|
21 |
#define PPC_FEATURE_BOOKE 0x00008000 |
aa5cb0214
|
22 23 |
#define PPC_FEATURE_SMT 0x00004000 #define PPC_FEATURE_ICACHE_SNOOP 0x00002000 |
03054d51a
|
24 |
#define PPC_FEATURE_ARCH_2_05 0x00001000 |
b3ebd1d86
|
25 |
#define PPC_FEATURE_PA6T 0x00000800 |
974a76f51
|
26 27 |
#define PPC_FEATURE_HAS_DFP 0x00000400 #define PPC_FEATURE_POWER6_EXT 0x00000200 |
10b35d997
|
28 |
|
fab5db97e
|
29 30 |
#define PPC_FEATURE_TRUE_LE 0x00000002 #define PPC_FEATURE_PPC_LE 0x00000001 |
10b35d997
|
31 32 33 34 35 36 37 |
#ifdef __KERNEL__ #ifndef __ASSEMBLY__ /* This structure can grow, it's real size is used by head.S code * via the mkdefs mechanism. */ struct cpu_spec; |
10b35d997
|
38 |
|
10b35d997
|
39 |
typedef void (*cpu_setup_t)(unsigned long offset, struct cpu_spec* spec); |
f39b7a55a
|
40 |
typedef void (*cpu_restore_t)(void); |
10b35d997
|
41 |
|
32a33994d
|
42 |
enum powerpc_oprofile_type { |
7a45fb19c
|
43 44 45 46 47 |
PPC_OPROFILE_INVALID = 0, PPC_OPROFILE_RS64 = 1, PPC_OPROFILE_POWER4 = 2, PPC_OPROFILE_G4 = 3, PPC_OPROFILE_BOOKE = 4, |
18f2190d7
|
48 |
PPC_OPROFILE_CELL = 5, |
25fc530ee
|
49 |
PPC_OPROFILE_PA6T = 6, |
32a33994d
|
50 |
}; |
1bd2e5ae1
|
51 52 53 54 55 |
enum powerpc_pmc_type { PPC_PMC_DEFAULT = 0, PPC_PMC_IBM = 1, PPC_PMC_PA6T = 2, }; |
10b35d997
|
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
struct cpu_spec { /* CPU is matched via (PVR & pvr_mask) == pvr_value */ unsigned int pvr_mask; unsigned int pvr_value; char *cpu_name; unsigned long cpu_features; /* Kernel features */ unsigned int cpu_user_features; /* Userland features */ /* cache line sizes */ unsigned int icache_bsize; unsigned int dcache_bsize; /* number of performance monitor counters */ unsigned int num_pmcs; |
1bd2e5ae1
|
71 |
enum powerpc_pmc_type pmc_type; |
10b35d997
|
72 73 74 75 76 |
/* this is called to initialize various CPU bits like L1 cache, * BHT, SPD, etc... from head.S before branching to identify_machine */ cpu_setup_t cpu_setup; |
f39b7a55a
|
77 78 |
/* Used to restore cpu setup on secondary processors and at resume */ cpu_restore_t cpu_restore; |
10b35d997
|
79 80 81 82 83 |
/* Used by oprofile userspace to select the right counters */ char *oprofile_cpu_type; /* Processor specific oprofile operations */ |
32a33994d
|
84 |
enum powerpc_oprofile_type oprofile_type; |
80f15dc70
|
85 |
|
e78dbc800
|
86 87 88 89 90 91 |
/* Bit locations inside the mmcra change */ unsigned long oprofile_mmcra_sihv; unsigned long oprofile_mmcra_sipr; /* Bits to clear during an oprofile exception */ unsigned long oprofile_mmcra_clear; |
80f15dc70
|
92 93 |
/* Name of processor class, for the ELF AT_PLATFORM entry */ char *platform; |
10b35d997
|
94 |
}; |
10b35d997
|
95 |
extern struct cpu_spec *cur_cpu_spec; |
10b35d997
|
96 |
|
42c4aaadb
|
97 |
extern unsigned int __start___ftr_fixup, __stop___ftr_fixup; |
974a76f51
|
98 |
extern struct cpu_spec *identify_cpu(unsigned long offset, unsigned int pvr); |
0909c8c2d
|
99 100 |
extern void do_feature_fixups(unsigned long value, void *fixup_start, void *fixup_end); |
9b6b563c0
|
101 |
|
10b35d997
|
102 103 104 105 106 |
#endif /* __ASSEMBLY__ */ /* CPU kernel features */ /* Retain the 32b definitions all use bottom half of word */ |
4508dc21f
|
107 |
#define CPU_FTR_COHERENT_ICACHE ASM_CONST(0x0000000000000001) |
10b35d997
|
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
#define CPU_FTR_L2CR ASM_CONST(0x0000000000000002) #define CPU_FTR_SPEC7450 ASM_CONST(0x0000000000000004) #define CPU_FTR_ALTIVEC ASM_CONST(0x0000000000000008) #define CPU_FTR_TAU ASM_CONST(0x0000000000000010) #define CPU_FTR_CAN_DOZE ASM_CONST(0x0000000000000020) #define CPU_FTR_USE_TB ASM_CONST(0x0000000000000040) #define CPU_FTR_604_PERF_MON ASM_CONST(0x0000000000000080) #define CPU_FTR_601 ASM_CONST(0x0000000000000100) #define CPU_FTR_HPTE_TABLE ASM_CONST(0x0000000000000200) #define CPU_FTR_CAN_NAP ASM_CONST(0x0000000000000400) #define CPU_FTR_L3CR ASM_CONST(0x0000000000000800) #define CPU_FTR_L3_DISABLE_NAP ASM_CONST(0x0000000000001000) #define CPU_FTR_NAP_DISABLE_L2_PR ASM_CONST(0x0000000000002000) #define CPU_FTR_DUAL_PLL_750FX ASM_CONST(0x0000000000004000) #define CPU_FTR_NO_DPM ASM_CONST(0x0000000000008000) #define CPU_FTR_HAS_HIGH_BATS ASM_CONST(0x0000000000010000) #define CPU_FTR_NEED_COHERENT ASM_CONST(0x0000000000020000) #define CPU_FTR_NO_BTIC ASM_CONST(0x0000000000040000) #define CPU_FTR_BIG_PHYS ASM_CONST(0x0000000000080000) |
3d15910bf
|
127 |
#define CPU_FTR_NODSISRALIGN ASM_CONST(0x0000000000100000) |
fab5db97e
|
128 129 |
#define CPU_FTR_PPC_LE ASM_CONST(0x0000000000200000) #define CPU_FTR_REAL_LE ASM_CONST(0x0000000000400000) |
aa42c69c6
|
130 |
#define CPU_FTR_FPU_UNAVAILABLE ASM_CONST(0x0000000000800000) |
4508dc21f
|
131 |
#define CPU_FTR_UNIFIED_ID_CACHE ASM_CONST(0x0000000001000000) |
10b35d997
|
132 |
|
3965f8c59
|
133 134 135 136 |
/* * Add the 64-bit processor unique features in the top half of the word; * on 32-bit, make the names available but defined to be 0. */ |
10b35d997
|
137 |
#ifdef __powerpc64__ |
3965f8c59
|
138 |
#define LONG_ASM_CONST(x) ASM_CONST(x) |
10b35d997
|
139 |
#else |
3965f8c59
|
140 |
#define LONG_ASM_CONST(x) 0 |
10b35d997
|
141 |
#endif |
3965f8c59
|
142 143 144 145 146 147 148 149 |
#define CPU_FTR_SLB LONG_ASM_CONST(0x0000000100000000) #define CPU_FTR_16M_PAGE LONG_ASM_CONST(0x0000000200000000) #define CPU_FTR_TLBIEL LONG_ASM_CONST(0x0000000400000000) #define CPU_FTR_NOEXECUTE LONG_ASM_CONST(0x0000000800000000) #define CPU_FTR_IABR LONG_ASM_CONST(0x0000002000000000) #define CPU_FTR_MMCRA LONG_ASM_CONST(0x0000004000000000) #define CPU_FTR_CTRL LONG_ASM_CONST(0x0000008000000000) #define CPU_FTR_SMT LONG_ASM_CONST(0x0000010000000000) |
3965f8c59
|
150 151 152 153 |
#define CPU_FTR_LOCKLESS_TLBIE LONG_ASM_CONST(0x0000040000000000) #define CPU_FTR_CI_LARGE_PAGE LONG_ASM_CONST(0x0000100000000000) #define CPU_FTR_PAUSE_ZERO LONG_ASM_CONST(0x0000200000000000) #define CPU_FTR_PURR LONG_ASM_CONST(0x0000400000000000) |
859deea94
|
154 |
#define CPU_FTR_CELL_TB_BUG LONG_ASM_CONST(0x0000800000000000) |
974a76f51
|
155 |
#define CPU_FTR_SPURR LONG_ASM_CONST(0x0001000000000000) |
4c198557c
|
156 |
#define CPU_FTR_DSCR LONG_ASM_CONST(0x0002000000000000) |
3965f8c59
|
157 |
|
10b35d997
|
158 |
#ifndef __ASSEMBLY__ |
0470466db
|
159 160 161 |
#define CPU_FTR_PPCAS_ARCH_V2 (CPU_FTR_SLB | \ CPU_FTR_TLBIEL | CPU_FTR_NOEXECUTE | \ CPU_FTR_NODSISRALIGN | CPU_FTR_16M_PAGE) |
10b35d997
|
162 163 164 165 166 167 168 169 170 171 172 173 174 |
/* We only set the altivec features if the kernel was compiled with altivec * support */ #ifdef CONFIG_ALTIVEC #define CPU_FTR_ALTIVEC_COMP CPU_FTR_ALTIVEC #define PPC_FEATURE_HAS_ALTIVEC_COMP PPC_FEATURE_HAS_ALTIVEC #else #define CPU_FTR_ALTIVEC_COMP 0 #define PPC_FEATURE_HAS_ALTIVEC_COMP 0 #endif /* We need to mark all pages as being coherent if we're SMP or we |
1775dbbcd
|
175 176 |
* have a 74[45]x and an MPC107 host bridge. Also 83xx requires * it for PCI "streaming/prefetch" to work properly. |
10b35d997
|
177 |
*/ |
1775dbbcd
|
178 179 |
#if defined(CONFIG_SMP) || defined(CONFIG_MPC10X_BRIDGE) \ || defined(CONFIG_PPC_83xx) |
10b35d997
|
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
#define CPU_FTR_COMMON CPU_FTR_NEED_COHERENT #else #define CPU_FTR_COMMON 0 #endif /* The powersave features NAP & DOZE seems to confuse BDI when debugging. So if a BDI is used, disable theses */ #ifndef CONFIG_BDI_SWITCH #define CPU_FTR_MAYBE_CAN_DOZE CPU_FTR_CAN_DOZE #define CPU_FTR_MAYBE_CAN_NAP CPU_FTR_CAN_NAP #else #define CPU_FTR_MAYBE_CAN_DOZE 0 #define CPU_FTR_MAYBE_CAN_NAP 0 #endif #define CLASSIC_PPC (!defined(CONFIG_8xx) && !defined(CONFIG_4xx) && \ !defined(CONFIG_POWER3) && !defined(CONFIG_POWER4) && \ !defined(CONFIG_BOOKE)) |
4508dc21f
|
199 200 201 |
#define CPU_FTRS_PPC601 (CPU_FTR_COMMON | CPU_FTR_601 | CPU_FTR_HPTE_TABLE | \ CPU_FTR_COHERENT_ICACHE | CPU_FTR_UNIFIED_ID_CACHE) #define CPU_FTRS_603 (CPU_FTR_COMMON | \ |
7c92943c7
|
202 |
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | \ |
fab5db97e
|
203 |
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE) |
4508dc21f
|
204 |
#define CPU_FTRS_604 (CPU_FTR_COMMON | \ |
fab5db97e
|
205 206 |
CPU_FTR_USE_TB | CPU_FTR_604_PERF_MON | CPU_FTR_HPTE_TABLE | \ CPU_FTR_PPC_LE) |
4508dc21f
|
207 |
#define CPU_FTRS_740_NOTAU (CPU_FTR_COMMON | \ |
7c92943c7
|
208 |
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ |
fab5db97e
|
209 |
CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE) |
4508dc21f
|
210 |
#define CPU_FTRS_740 (CPU_FTR_COMMON | \ |
7c92943c7
|
211 |
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ |
fab5db97e
|
212 213 |
CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \ CPU_FTR_PPC_LE) |
4508dc21f
|
214 |
#define CPU_FTRS_750 (CPU_FTR_COMMON | \ |
7c92943c7
|
215 |
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ |
fab5db97e
|
216 217 |
CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \ CPU_FTR_PPC_LE) |
b6f41cc83
|
218 219 220 221 222 223 |
#define CPU_FTRS_750CL (CPU_FTRS_750 | CPU_FTR_HAS_HIGH_BATS) #define CPU_FTRS_750FX1 (CPU_FTRS_750 | CPU_FTR_DUAL_PLL_750FX | CPU_FTR_NO_DPM) #define CPU_FTRS_750FX2 (CPU_FTRS_750 | CPU_FTR_NO_DPM) #define CPU_FTRS_750FX (CPU_FTRS_750 | CPU_FTR_DUAL_PLL_750FX | \ CPU_FTR_HAS_HIGH_BATS) #define CPU_FTRS_750GX (CPU_FTRS_750FX) |
4508dc21f
|
224 |
#define CPU_FTRS_7400_NOTAU (CPU_FTR_COMMON | \ |
7c92943c7
|
225 226 |
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ CPU_FTR_ALTIVEC_COMP | CPU_FTR_HPTE_TABLE | \ |
fab5db97e
|
227 |
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE) |
4508dc21f
|
228 |
#define CPU_FTRS_7400 (CPU_FTR_COMMON | \ |
7c92943c7
|
229 230 |
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \ CPU_FTR_TAU | CPU_FTR_ALTIVEC_COMP | CPU_FTR_HPTE_TABLE | \ |
fab5db97e
|
231 |
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE) |
4508dc21f
|
232 |
#define CPU_FTRS_7450_20 (CPU_FTR_COMMON | \ |
7c92943c7
|
233 234 |
CPU_FTR_USE_TB | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ |
fab5db97e
|
235 |
CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) |
4508dc21f
|
236 |
#define CPU_FTRS_7450_21 (CPU_FTR_COMMON | \ |
7c92943c7
|
237 238 239 240 |
CPU_FTR_USE_TB | \ CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_L3_DISABLE_NAP | \ |
fab5db97e
|
241 |
CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) |
4508dc21f
|
242 |
#define CPU_FTRS_7450_23 (CPU_FTR_COMMON | \ |
7c92943c7
|
243 244 245 |
CPU_FTR_USE_TB | \ CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ |
fab5db97e
|
246 |
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) |
4508dc21f
|
247 |
#define CPU_FTRS_7455_1 (CPU_FTR_COMMON | \ |
7c92943c7
|
248 249 250 |
CPU_FTR_USE_TB | \ CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR | \ CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | CPU_FTR_HAS_HIGH_BATS | \ |
fab5db97e
|
251 |
CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) |
4508dc21f
|
252 |
#define CPU_FTRS_7455_20 (CPU_FTR_COMMON | \ |
7c92943c7
|
253 254 255 256 |
CPU_FTR_USE_TB | \ CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_L3_DISABLE_NAP | \ |
fab5db97e
|
257 |
CPU_FTR_NEED_COHERENT | CPU_FTR_HAS_HIGH_BATS | CPU_FTR_PPC_LE) |
4508dc21f
|
258 |
#define CPU_FTRS_7455 (CPU_FTR_COMMON | \ |
7c92943c7
|
259 260 261 262 |
CPU_FTR_USE_TB | \ CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \ |
fab5db97e
|
263 |
CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) |
4508dc21f
|
264 |
#define CPU_FTRS_7447_10 (CPU_FTR_COMMON | \ |
7c92943c7
|
265 266 267 268 |
CPU_FTR_USE_TB | \ CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \ |
fab5db97e
|
269 |
CPU_FTR_NEED_COHERENT | CPU_FTR_NO_BTIC | CPU_FTR_PPC_LE) |
4508dc21f
|
270 |
#define CPU_FTRS_7447 (CPU_FTR_COMMON | \ |
7c92943c7
|
271 272 273 274 |
CPU_FTR_USE_TB | \ CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \ |
fab5db97e
|
275 |
CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) |
4508dc21f
|
276 |
#define CPU_FTRS_7447A (CPU_FTR_COMMON | \ |
7c92943c7
|
277 278 279 280 |
CPU_FTR_USE_TB | \ CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \ |
fab5db97e
|
281 |
CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE) |
4508dc21f
|
282 |
#define CPU_FTRS_7448 (CPU_FTR_COMMON | \ |
3d372548b
|
283 284 285 286 287 |
CPU_FTR_USE_TB | \ CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \ CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \ CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS | \ CPU_FTR_PPC_LE) |
4508dc21f
|
288 |
#define CPU_FTRS_82XX (CPU_FTR_COMMON | \ |
7c92943c7
|
289 |
CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB) |
4508dc21f
|
290 |
#define CPU_FTRS_G2_LE (CPU_FTR_MAYBE_CAN_DOZE | \ |
7c92943c7
|
291 |
CPU_FTR_USE_TB | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_HAS_HIGH_BATS) |
4508dc21f
|
292 |
#define CPU_FTRS_E300 (CPU_FTR_MAYBE_CAN_DOZE | \ |
7c92943c7
|
293 294 |
CPU_FTR_USE_TB | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_HAS_HIGH_BATS | \ CPU_FTR_COMMON) |
4508dc21f
|
295 |
#define CPU_FTRS_E300C2 (CPU_FTR_MAYBE_CAN_DOZE | \ |
aa42c69c6
|
296 297 |
CPU_FTR_USE_TB | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_HAS_HIGH_BATS | \ CPU_FTR_COMMON | CPU_FTR_FPU_UNAVAILABLE) |
4508dc21f
|
298 |
#define CPU_FTRS_CLASSIC32 (CPU_FTR_COMMON | \ |
7c92943c7
|
299 |
CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE) |
4508dc21f
|
300 301 302 303 304 305 306 |
#define CPU_FTRS_8XX (CPU_FTR_USE_TB) #define CPU_FTRS_40X (CPU_FTR_USE_TB | CPU_FTR_NODSISRALIGN) #define CPU_FTRS_44X (CPU_FTR_USE_TB | CPU_FTR_NODSISRALIGN) #define CPU_FTRS_E200 (CPU_FTR_USE_TB | CPU_FTR_NODSISRALIGN | \ CPU_FTR_COHERENT_ICACHE | CPU_FTR_UNIFIED_ID_CACHE) #define CPU_FTRS_E500 (CPU_FTR_USE_TB | CPU_FTR_NODSISRALIGN) #define CPU_FTRS_E500_2 (CPU_FTR_USE_TB | \ |
7c92943c7
|
307 308 |
CPU_FTR_BIG_PHYS | CPU_FTR_NODSISRALIGN) #define CPU_FTRS_GENERIC_32 (CPU_FTR_COMMON | CPU_FTR_NODSISRALIGN) |
0b8e2e131
|
309 310 |
/* 64-bit CPUs */ |
4508dc21f
|
311 |
#define CPU_FTRS_POWER3 (CPU_FTR_USE_TB | \ |
fab5db97e
|
312 |
CPU_FTR_HPTE_TABLE | CPU_FTR_IABR | CPU_FTR_PPC_LE) |
4508dc21f
|
313 |
#define CPU_FTRS_RS64 (CPU_FTR_USE_TB | \ |
7c92943c7
|
314 315 |
CPU_FTR_HPTE_TABLE | CPU_FTR_IABR | \ CPU_FTR_MMCRA | CPU_FTR_CTRL) |
4508dc21f
|
316 |
#define CPU_FTRS_POWER4 (CPU_FTR_USE_TB | \ |
002430000
|
317 318 |
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ CPU_FTR_MMCRA) |
4508dc21f
|
319 |
#define CPU_FTRS_PPC970 (CPU_FTR_USE_TB | \ |
002430000
|
320 |
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ |
7c92943c7
|
321 |
CPU_FTR_ALTIVEC_COMP | CPU_FTR_CAN_NAP | CPU_FTR_MMCRA) |
4508dc21f
|
322 |
#define CPU_FTRS_POWER5 (CPU_FTR_USE_TB | \ |
002430000
|
323 |
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ |
7c92943c7
|
324 325 |
CPU_FTR_MMCRA | CPU_FTR_SMT | \ CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ |
e78dbc800
|
326 |
CPU_FTR_PURR) |
4508dc21f
|
327 |
#define CPU_FTRS_POWER6 (CPU_FTR_USE_TB | \ |
002430000
|
328 |
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ |
03054d51a
|
329 330 |
CPU_FTR_MMCRA | CPU_FTR_SMT | \ CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \ |
4c198557c
|
331 332 |
CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \ CPU_FTR_DSCR) |
4508dc21f
|
333 |
#define CPU_FTRS_CELL (CPU_FTR_USE_TB | \ |
002430000
|
334 |
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \ |
7c92943c7
|
335 |
CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \ |
859deea94
|
336 |
CPU_FTR_PAUSE_ZERO | CPU_FTR_CI_LARGE_PAGE | CPU_FTR_CELL_TB_BUG) |
4508dc21f
|
337 |
#define CPU_FTRS_PA6T (CPU_FTR_USE_TB | \ |
b3ebd1d86
|
338 339 340 |
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | \ CPU_FTR_ALTIVEC_COMP | CPU_FTR_CI_LARGE_PAGE | \ CPU_FTR_PURR | CPU_FTR_REAL_LE) |
4508dc21f
|
341 |
#define CPU_FTRS_COMPATIBLE (CPU_FTR_USE_TB | \ |
7c92943c7
|
342 |
CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2) |
10b35d997
|
343 |
|
2406f6063
|
344 |
#ifdef __powerpc64__ |
7c92943c7
|
345 346 |
#define CPU_FTRS_POSSIBLE \ (CPU_FTRS_POWER3 | CPU_FTRS_RS64 | CPU_FTRS_POWER4 | \ |
03054d51a
|
347 |
CPU_FTRS_PPC970 | CPU_FTRS_POWER5 | CPU_FTRS_POWER6 | \ |
b3ebd1d86
|
348 |
CPU_FTRS_CELL | CPU_FTRS_PA6T) |
2406f6063
|
349 |
#else |
7c92943c7
|
350 351 |
enum { CPU_FTRS_POSSIBLE = |
10b35d997
|
352 353 354 355 356 357 358 359 |
#if CLASSIC_PPC CPU_FTRS_PPC601 | CPU_FTRS_603 | CPU_FTRS_604 | CPU_FTRS_740_NOTAU | CPU_FTRS_740 | CPU_FTRS_750 | CPU_FTRS_750FX1 | CPU_FTRS_750FX2 | CPU_FTRS_750FX | CPU_FTRS_750GX | CPU_FTRS_7400_NOTAU | CPU_FTRS_7400 | CPU_FTRS_7450_20 | CPU_FTRS_7450_21 | CPU_FTRS_7450_23 | CPU_FTRS_7455_1 | CPU_FTRS_7455_20 | CPU_FTRS_7455 | CPU_FTRS_7447_10 | CPU_FTRS_7447 | CPU_FTRS_7447A | CPU_FTRS_82XX | |
aa42c69c6
|
360 361 |
CPU_FTRS_G2_LE | CPU_FTRS_E300 | CPU_FTRS_E300C2 | CPU_FTRS_CLASSIC32 | |
10b35d997
|
362 363 364 |
#else CPU_FTRS_GENERIC_32 | #endif |
10b35d997
|
365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 |
#ifdef CONFIG_8xx CPU_FTRS_8XX | #endif #ifdef CONFIG_40x CPU_FTRS_40X | #endif #ifdef CONFIG_44x CPU_FTRS_44X | #endif #ifdef CONFIG_E200 CPU_FTRS_E200 | #endif #ifdef CONFIG_E500 CPU_FTRS_E500 | CPU_FTRS_E500_2 | #endif |
10b35d997
|
380 |
0, |
7c92943c7
|
381 382 |
}; #endif /* __powerpc64__ */ |
10b35d997
|
383 |
|
2406f6063
|
384 |
#ifdef __powerpc64__ |
7c92943c7
|
385 386 |
#define CPU_FTRS_ALWAYS \ (CPU_FTRS_POWER3 & CPU_FTRS_RS64 & CPU_FTRS_POWER4 & \ |
03054d51a
|
387 |
CPU_FTRS_PPC970 & CPU_FTRS_POWER5 & CPU_FTRS_POWER6 & \ |
b3ebd1d86
|
388 |
CPU_FTRS_CELL & CPU_FTRS_PA6T & CPU_FTRS_POSSIBLE) |
2406f6063
|
389 |
#else |
7c92943c7
|
390 391 |
enum { CPU_FTRS_ALWAYS = |
10b35d997
|
392 393 394 395 396 397 398 399 |
#if CLASSIC_PPC CPU_FTRS_PPC601 & CPU_FTRS_603 & CPU_FTRS_604 & CPU_FTRS_740_NOTAU & CPU_FTRS_740 & CPU_FTRS_750 & CPU_FTRS_750FX1 & CPU_FTRS_750FX2 & CPU_FTRS_750FX & CPU_FTRS_750GX & CPU_FTRS_7400_NOTAU & CPU_FTRS_7400 & CPU_FTRS_7450_20 & CPU_FTRS_7450_21 & CPU_FTRS_7450_23 & CPU_FTRS_7455_1 & CPU_FTRS_7455_20 & CPU_FTRS_7455 & CPU_FTRS_7447_10 & CPU_FTRS_7447 & CPU_FTRS_7447A & CPU_FTRS_82XX & |
aa42c69c6
|
400 401 |
CPU_FTRS_G2_LE & CPU_FTRS_E300 & CPU_FTRS_E300C2 & CPU_FTRS_CLASSIC32 & |
10b35d997
|
402 403 404 |
#else CPU_FTRS_GENERIC_32 & #endif |
10b35d997
|
405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 |
#ifdef CONFIG_8xx CPU_FTRS_8XX & #endif #ifdef CONFIG_40x CPU_FTRS_40X & #endif #ifdef CONFIG_44x CPU_FTRS_44X & #endif #ifdef CONFIG_E200 CPU_FTRS_E200 & #endif #ifdef CONFIG_E500 CPU_FTRS_E500 & CPU_FTRS_E500_2 & #endif |
10b35d997
|
420 421 |
CPU_FTRS_POSSIBLE, }; |
7c92943c7
|
422 |
#endif /* __powerpc64__ */ |
10b35d997
|
423 424 425 426 427 |
static inline int cpu_has_feature(unsigned long feature) { return (CPU_FTRS_ALWAYS & feature) || (CPU_FTRS_POSSIBLE |
10b35d997
|
428 |
& cur_cpu_spec->cpu_features |
10b35d997
|
429 430 431 432 433 434 |
& feature); } #endif /* !__ASSEMBLY__ */ #ifdef __ASSEMBLY__ |
7aeb73242
|
435 |
#define BEGIN_FTR_SECTION_NESTED(label) label: |
0909c8c2d
|
436 |
#define BEGIN_FTR_SECTION BEGIN_FTR_SECTION_NESTED(97) |
7aeb73242
|
437 |
#define END_FTR_SECTION_NESTED(msk, val, label) \ |
0909c8c2d
|
438 |
MAKE_FTR_SECTION_ENTRY(msk, val, label, __ftr_fixup) |
7aeb73242
|
439 |
#define END_FTR_SECTION(msk, val) \ |
0909c8c2d
|
440 |
END_FTR_SECTION_NESTED(msk, val, 97) |
7aeb73242
|
441 |
|
10b35d997
|
442 443 444 445 446 447 |
#define END_FTR_SECTION_IFSET(msk) END_FTR_SECTION((msk), (msk)) #define END_FTR_SECTION_IFCLR(msk) END_FTR_SECTION((msk), 0) #endif /* __ASSEMBLY__ */ #endif /* __KERNEL__ */ #endif /* __ASM_POWERPC_CPUTABLE_H */ |