Blame view

include/asm-powerpc/cputable.h 16.9 KB
10b35d997   Kumar Gala   [PATCH] powerpc: ...
1
2
  #ifndef __ASM_POWERPC_CPUTABLE_H
  #define __ASM_POWERPC_CPUTABLE_H
3ddfbcf19   David Gibson   [PATCH] powerpc: ...
3
  #include <asm/asm-compat.h>
10b35d997   Kumar Gala   [PATCH] powerpc: ...
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   Paul Mackerras   Merge changes fro...
16
  #define PPC_FEATURE_NO_TB		0x00100000
a7ddc5e85   Paul Mackerras   powerpc: Add user...
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   Paul Mackerras   powerpc: Provide ...
21
  #define PPC_FEATURE_BOOKE		0x00008000
aa5cb0214   Benjamin Herrenschmidt   [PATCH] powerpc: ...
22
23
  #define PPC_FEATURE_SMT			0x00004000
  #define PPC_FEATURE_ICACHE_SNOOP	0x00002000
03054d51a   Anton Blanchard   [PATCH] powerpc: ...
24
  #define PPC_FEATURE_ARCH_2_05		0x00001000
b3ebd1d86   Olof Johansson   [POWERPC] powerpc...
25
  #define PPC_FEATURE_PA6T		0x00000800
974a76f51   Paul Mackerras   [POWERPC] Disting...
26
27
  #define PPC_FEATURE_HAS_DFP		0x00000400
  #define PPC_FEATURE_POWER6_EXT		0x00000200
10b35d997   Kumar Gala   [PATCH] powerpc: ...
28

fab5db97e   Paul Mackerras   [PATCH] powerpc: ...
29
30
  #define PPC_FEATURE_TRUE_LE		0x00000002
  #define PPC_FEATURE_PPC_LE		0x00000001
10b35d997   Kumar Gala   [PATCH] powerpc: ...
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   Kumar Gala   [PATCH] powerpc: ...
38

10b35d997   Kumar Gala   [PATCH] powerpc: ...
39
  typedef	void (*cpu_setup_t)(unsigned long offset, struct cpu_spec* spec);
f39b7a55a   Olof Johansson   [POWERPC] Cleanup...
40
  typedef	void (*cpu_restore_t)(void);
10b35d997   Kumar Gala   [PATCH] powerpc: ...
41

32a33994d   Anton Blanchard   [PATCH] ppc64: Fi...
42
  enum powerpc_oprofile_type {
7a45fb19c   Andy Whitcroft   [PATCH] powerpc: ...
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   Maynard Johnson   [POWERPC] cell: A...
48
  	PPC_OPROFILE_CELL = 5,
25fc530ee   Olof Johansson   [POWERPC] pasemi:...
49
  	PPC_OPROFILE_PA6T = 6,
32a33994d   Anton Blanchard   [PATCH] ppc64: Fi...
50
  };
1bd2e5ae1   Olof Johansson   [POWERPC] Add PMC...
51
52
53
54
55
  enum powerpc_pmc_type {
  	PPC_PMC_DEFAULT = 0,
  	PPC_PMC_IBM = 1,
  	PPC_PMC_PA6T = 2,
  };
10b35d997   Kumar Gala   [PATCH] powerpc: ...
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   Olof Johansson   [POWERPC] Add PMC...
71
  	enum powerpc_pmc_type pmc_type;
10b35d997   Kumar Gala   [PATCH] powerpc: ...
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   Olof Johansson   [POWERPC] Cleanup...
77
78
  	/* Used to restore cpu setup on secondary processors and at resume */
  	cpu_restore_t	cpu_restore;
10b35d997   Kumar Gala   [PATCH] powerpc: ...
79
80
81
82
83
  
  	/* Used by oprofile userspace to select the right counters */
  	char		*oprofile_cpu_type;
  
  	/* Processor specific oprofile operations */
32a33994d   Anton Blanchard   [PATCH] ppc64: Fi...
84
  	enum powerpc_oprofile_type oprofile_type;
80f15dc70   Paul Mackerras   powerpc: Provide ...
85

e78dbc800   Michael Neuling   [PATCH] powerpc: ...
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   Paul Mackerras   powerpc: Provide ...
92
93
  	/* Name of processor class, for the ELF AT_PLATFORM entry */
  	char		*platform;
10b35d997   Kumar Gala   [PATCH] powerpc: ...
94
  };
10b35d997   Kumar Gala   [PATCH] powerpc: ...
95
  extern struct cpu_spec		*cur_cpu_spec;
10b35d997   Kumar Gala   [PATCH] powerpc: ...
96

42c4aaadb   Benjamin Herrenschmidt   [POWERPC] Consoli...
97
  extern unsigned int __start___ftr_fixup, __stop___ftr_fixup;
974a76f51   Paul Mackerras   [POWERPC] Disting...
98
  extern struct cpu_spec *identify_cpu(unsigned long offset, unsigned int pvr);
0909c8c2d   Benjamin Herrenschmidt   [POWERPC] Support...
99
100
  extern void do_feature_fixups(unsigned long value, void *fixup_start,
  			      void *fixup_end);
9b6b563c0   Paul Mackerras   powerpc: Merge in...
101

10b35d997   Kumar Gala   [PATCH] powerpc: ...
102
103
104
105
106
  #endif /* __ASSEMBLY__ */
  
  /* CPU kernel features */
  
  /* Retain the 32b definitions all use bottom half of word */
4508dc21f   David Gibson   [POWERPC] Merge C...
107
  #define CPU_FTR_COHERENT_ICACHE		ASM_CONST(0x0000000000000001)
10b35d997   Kumar Gala   [PATCH] powerpc: ...
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   Michael Ellerman   [PATCH] powerpc: ...
127
  #define CPU_FTR_NODSISRALIGN		ASM_CONST(0x0000000000100000)
fab5db97e   Paul Mackerras   [PATCH] powerpc: ...
128
129
  #define CPU_FTR_PPC_LE			ASM_CONST(0x0000000000200000)
  #define CPU_FTR_REAL_LE			ASM_CONST(0x0000000000400000)
aa42c69c6   Kim Phillips   [POWERPC] Add sup...
130
  #define CPU_FTR_FPU_UNAVAILABLE		ASM_CONST(0x0000000000800000)
4508dc21f   David Gibson   [POWERPC] Merge C...
131
  #define CPU_FTR_UNIFIED_ID_CACHE	ASM_CONST(0x0000000001000000)
10b35d997   Kumar Gala   [PATCH] powerpc: ...
132

3965f8c59   Paul Mackerras   [POWERPC] Simplif...
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   Kumar Gala   [PATCH] powerpc: ...
137
  #ifdef __powerpc64__
3965f8c59   Paul Mackerras   [POWERPC] Simplif...
138
  #define LONG_ASM_CONST(x)		ASM_CONST(x)
10b35d997   Kumar Gala   [PATCH] powerpc: ...
139
  #else
3965f8c59   Paul Mackerras   [POWERPC] Simplif...
140
  #define LONG_ASM_CONST(x)		0
10b35d997   Kumar Gala   [PATCH] powerpc: ...
141
  #endif
3965f8c59   Paul Mackerras   [POWERPC] Simplif...
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   Paul Mackerras   [POWERPC] Simplif...
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   Benjamin Herrenschmidt   [POWERPC] Cell ti...
154
  #define CPU_FTR_CELL_TB_BUG		LONG_ASM_CONST(0x0000800000000000)
974a76f51   Paul Mackerras   [POWERPC] Disting...
155
  #define CPU_FTR_SPURR			LONG_ASM_CONST(0x0001000000000000)
4c198557c   Anton Blanchard   [POWERPC] Add DSC...
156
  #define CPU_FTR_DSCR			LONG_ASM_CONST(0x0002000000000000)
3965f8c59   Paul Mackerras   [POWERPC] Simplif...
157

10b35d997   Kumar Gala   [PATCH] powerpc: ...
158
  #ifndef __ASSEMBLY__
0470466db   Stephen Rothwell   [POWERPC] Fix cpu...
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   Kumar Gala   [PATCH] powerpc: ...
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   Kumar Gala   [PATCH] powerpc: ...
175
176
   * have a 74[45]x and an MPC107 host bridge. Also 83xx requires
   * it for PCI "streaming/prefetch" to work properly.
10b35d997   Kumar Gala   [PATCH] powerpc: ...
177
   */
1775dbbcd   Kumar Gala   [PATCH] powerpc: ...
178
179
  #if defined(CONFIG_SMP) || defined(CONFIG_MPC10X_BRIDGE) \
  	|| defined(CONFIG_PPC_83xx)
10b35d997   Kumar Gala   [PATCH] powerpc: ...
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   David Gibson   [POWERPC] Merge C...
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   Stephen Rothwell   [PATCH] powerpc: ...
202
  	    CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | \
fab5db97e   Paul Mackerras   [PATCH] powerpc: ...
203
  	    CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE)
4508dc21f   David Gibson   [POWERPC] Merge C...
204
  #define CPU_FTRS_604	(CPU_FTR_COMMON | \
fab5db97e   Paul Mackerras   [PATCH] powerpc: ...
205
206
  	    CPU_FTR_USE_TB | CPU_FTR_604_PERF_MON | CPU_FTR_HPTE_TABLE | \
  	    CPU_FTR_PPC_LE)
4508dc21f   David Gibson   [POWERPC] Merge C...
207
  #define CPU_FTRS_740_NOTAU	(CPU_FTR_COMMON | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
208
  	    CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \
fab5db97e   Paul Mackerras   [PATCH] powerpc: ...
209
  	    CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE)
4508dc21f   David Gibson   [POWERPC] Merge C...
210
  #define CPU_FTRS_740	(CPU_FTR_COMMON | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
211
  	    CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \
fab5db97e   Paul Mackerras   [PATCH] powerpc: ...
212
213
  	    CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \
  	    CPU_FTR_PPC_LE)
4508dc21f   David Gibson   [POWERPC] Merge C...
214
  #define CPU_FTRS_750	(CPU_FTR_COMMON | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
215
  	    CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \
fab5db97e   Paul Mackerras   [PATCH] powerpc: ...
216
217
  	    CPU_FTR_TAU | CPU_FTR_HPTE_TABLE | CPU_FTR_MAYBE_CAN_NAP | \
  	    CPU_FTR_PPC_LE)
b6f41cc83   Josh Boyer   [POWERPC] Consoli...
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   David Gibson   [POWERPC] Merge C...
224
  #define CPU_FTRS_7400_NOTAU	(CPU_FTR_COMMON | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
225
226
  	    CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB | CPU_FTR_L2CR | \
  	    CPU_FTR_ALTIVEC_COMP | CPU_FTR_HPTE_TABLE | \
fab5db97e   Paul Mackerras   [PATCH] powerpc: ...
227
  	    CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE)
4508dc21f   David Gibson   [POWERPC] Merge C...
228
  #define CPU_FTRS_7400	(CPU_FTR_COMMON | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
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   Paul Mackerras   [PATCH] powerpc: ...
231
  	    CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_PPC_LE)
4508dc21f   David Gibson   [POWERPC] Merge C...
232
  #define CPU_FTRS_7450_20	(CPU_FTR_COMMON | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
233
234
  	    CPU_FTR_USE_TB | CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | \
  	    CPU_FTR_L3CR | CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 | \
fab5db97e   Paul Mackerras   [PATCH] powerpc: ...
235
  	    CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE)
4508dc21f   David Gibson   [POWERPC] Merge C...
236
  #define CPU_FTRS_7450_21	(CPU_FTR_COMMON | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
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   Paul Mackerras   [PATCH] powerpc: ...
241
  	    CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE)
4508dc21f   David Gibson   [POWERPC] Merge C...
242
  #define CPU_FTRS_7450_23	(CPU_FTR_COMMON | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
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   Paul Mackerras   [PATCH] powerpc: ...
246
  	    CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE)
4508dc21f   David Gibson   [POWERPC] Merge C...
247
  #define CPU_FTRS_7455_1	(CPU_FTR_COMMON | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
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   Paul Mackerras   [PATCH] powerpc: ...
251
  	    CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE)
4508dc21f   David Gibson   [POWERPC] Merge C...
252
  #define CPU_FTRS_7455_20	(CPU_FTR_COMMON | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
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   Paul Mackerras   [PATCH] powerpc: ...
257
  	    CPU_FTR_NEED_COHERENT | CPU_FTR_HAS_HIGH_BATS | CPU_FTR_PPC_LE)
4508dc21f   David Gibson   [POWERPC] Merge C...
258
  #define CPU_FTRS_7455	(CPU_FTR_COMMON | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
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   Paul Mackerras   [PATCH] powerpc: ...
263
  	    CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE)
4508dc21f   David Gibson   [POWERPC] Merge C...
264
  #define CPU_FTRS_7447_10	(CPU_FTR_COMMON | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
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   Paul Mackerras   [PATCH] powerpc: ...
269
  	    CPU_FTR_NEED_COHERENT | CPU_FTR_NO_BTIC | CPU_FTR_PPC_LE)
4508dc21f   David Gibson   [POWERPC] Merge C...
270
  #define CPU_FTRS_7447	(CPU_FTR_COMMON | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
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   Paul Mackerras   [PATCH] powerpc: ...
275
  	    CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE)
4508dc21f   David Gibson   [POWERPC] Merge C...
276
  #define CPU_FTRS_7447A	(CPU_FTR_COMMON | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
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   Paul Mackerras   [PATCH] powerpc: ...
281
  	    CPU_FTR_NEED_COHERENT | CPU_FTR_PPC_LE)
4508dc21f   David Gibson   [POWERPC] Merge C...
282
  #define CPU_FTRS_7448	(CPU_FTR_COMMON | \
3d372548b   James.Yang   [POWERPC] Remove ...
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   David Gibson   [POWERPC] Merge C...
288
  #define CPU_FTRS_82XX	(CPU_FTR_COMMON | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
289
  	    CPU_FTR_MAYBE_CAN_DOZE | CPU_FTR_USE_TB)
4508dc21f   David Gibson   [POWERPC] Merge C...
290
  #define CPU_FTRS_G2_LE	(CPU_FTR_MAYBE_CAN_DOZE | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
291
  	    CPU_FTR_USE_TB | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_HAS_HIGH_BATS)
4508dc21f   David Gibson   [POWERPC] Merge C...
292
  #define CPU_FTRS_E300	(CPU_FTR_MAYBE_CAN_DOZE | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
293
294
  	    CPU_FTR_USE_TB | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_HAS_HIGH_BATS | \
  	    CPU_FTR_COMMON)
4508dc21f   David Gibson   [POWERPC] Merge C...
295
  #define CPU_FTRS_E300C2	(CPU_FTR_MAYBE_CAN_DOZE | \
aa42c69c6   Kim Phillips   [POWERPC] Add sup...
296
297
  	    CPU_FTR_USE_TB | CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_HAS_HIGH_BATS | \
  	    CPU_FTR_COMMON | CPU_FTR_FPU_UNAVAILABLE)
4508dc21f   David Gibson   [POWERPC] Merge C...
298
  #define CPU_FTRS_CLASSIC32	(CPU_FTR_COMMON | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
299
  	    CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE)
4508dc21f   David Gibson   [POWERPC] Merge C...
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   Stephen Rothwell   [PATCH] powerpc: ...
307
308
  	    CPU_FTR_BIG_PHYS | CPU_FTR_NODSISRALIGN)
  #define CPU_FTRS_GENERIC_32	(CPU_FTR_COMMON | CPU_FTR_NODSISRALIGN)
0b8e2e131   Michael Ellerman   [POWERPC] Make 64...
309
310
  
  /* 64-bit CPUs */
4508dc21f   David Gibson   [POWERPC] Merge C...
311
  #define CPU_FTRS_POWER3	(CPU_FTR_USE_TB | \
fab5db97e   Paul Mackerras   [PATCH] powerpc: ...
312
  	    CPU_FTR_HPTE_TABLE | CPU_FTR_IABR | CPU_FTR_PPC_LE)
4508dc21f   David Gibson   [POWERPC] Merge C...
313
  #define CPU_FTRS_RS64	(CPU_FTR_USE_TB | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
314
315
  	    CPU_FTR_HPTE_TABLE | CPU_FTR_IABR | \
  	    CPU_FTR_MMCRA | CPU_FTR_CTRL)
4508dc21f   David Gibson   [POWERPC] Merge C...
316
  #define CPU_FTRS_POWER4	(CPU_FTR_USE_TB | \
002430000   Olof Johansson   [POWERPC] powerpc...
317
318
  	    CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
  	    CPU_FTR_MMCRA)
4508dc21f   David Gibson   [POWERPC] Merge C...
319
  #define CPU_FTRS_PPC970	(CPU_FTR_USE_TB | \
002430000   Olof Johansson   [POWERPC] powerpc...
320
  	    CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
321
  	    CPU_FTR_ALTIVEC_COMP | CPU_FTR_CAN_NAP | CPU_FTR_MMCRA)
4508dc21f   David Gibson   [POWERPC] Merge C...
322
  #define CPU_FTRS_POWER5	(CPU_FTR_USE_TB | \
002430000   Olof Johansson   [POWERPC] powerpc...
323
  	    CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
324
325
  	    CPU_FTR_MMCRA | CPU_FTR_SMT | \
  	    CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \
e78dbc800   Michael Neuling   [PATCH] powerpc: ...
326
  	    CPU_FTR_PURR)
4508dc21f   David Gibson   [POWERPC] Merge C...
327
  #define CPU_FTRS_POWER6 (CPU_FTR_USE_TB | \
002430000   Olof Johansson   [POWERPC] powerpc...
328
  	    CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
03054d51a   Anton Blanchard   [PATCH] powerpc: ...
329
330
  	    CPU_FTR_MMCRA | CPU_FTR_SMT | \
  	    CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE | \
4c198557c   Anton Blanchard   [POWERPC] Add DSC...
331
332
  	    CPU_FTR_PURR | CPU_FTR_SPURR | CPU_FTR_REAL_LE | \
  	    CPU_FTR_DSCR)
4508dc21f   David Gibson   [POWERPC] Merge C...
333
  #define CPU_FTRS_CELL	(CPU_FTR_USE_TB | \
002430000   Olof Johansson   [POWERPC] powerpc...
334
  	    CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_CTRL | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
335
  	    CPU_FTR_ALTIVEC_COMP | CPU_FTR_MMCRA | CPU_FTR_SMT | \
859deea94   Benjamin Herrenschmidt   [POWERPC] Cell ti...
336
  	    CPU_FTR_PAUSE_ZERO | CPU_FTR_CI_LARGE_PAGE | CPU_FTR_CELL_TB_BUG)
4508dc21f   David Gibson   [POWERPC] Merge C...
337
  #define CPU_FTRS_PA6T (CPU_FTR_USE_TB | \
b3ebd1d86   Olof Johansson   [POWERPC] powerpc...
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   David Gibson   [POWERPC] Merge C...
341
  #define CPU_FTRS_COMPATIBLE	(CPU_FTR_USE_TB | \
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
342
  	    CPU_FTR_HPTE_TABLE | CPU_FTR_PPCAS_ARCH_V2)
10b35d997   Kumar Gala   [PATCH] powerpc: ...
343

2406f6063   Anton Blanchard   [PATCH] powerpc: ...
344
  #ifdef __powerpc64__
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
345
346
  #define CPU_FTRS_POSSIBLE	\
  	    (CPU_FTRS_POWER3 | CPU_FTRS_RS64 | CPU_FTRS_POWER4 |	\
03054d51a   Anton Blanchard   [PATCH] powerpc: ...
347
  	    CPU_FTRS_PPC970 | CPU_FTRS_POWER5 | CPU_FTRS_POWER6 |	\
b3ebd1d86   Olof Johansson   [POWERPC] powerpc...
348
  	    CPU_FTRS_CELL | CPU_FTRS_PA6T)
2406f6063   Anton Blanchard   [PATCH] powerpc: ...
349
  #else
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
350
351
  enum {
  	CPU_FTRS_POSSIBLE =
10b35d997   Kumar Gala   [PATCH] powerpc: ...
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   Kim Phillips   [POWERPC] Add sup...
360
361
  	    CPU_FTRS_G2_LE | CPU_FTRS_E300 | CPU_FTRS_E300C2 |
  	    CPU_FTRS_CLASSIC32 |
10b35d997   Kumar Gala   [PATCH] powerpc: ...
362
363
364
  #else
  	    CPU_FTRS_GENERIC_32 |
  #endif
10b35d997   Kumar Gala   [PATCH] powerpc: ...
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   Kumar Gala   [PATCH] powerpc: ...
380
  	    0,
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
381
382
  };
  #endif /* __powerpc64__ */
10b35d997   Kumar Gala   [PATCH] powerpc: ...
383

2406f6063   Anton Blanchard   [PATCH] powerpc: ...
384
  #ifdef __powerpc64__
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
385
386
  #define CPU_FTRS_ALWAYS		\
  	    (CPU_FTRS_POWER3 & CPU_FTRS_RS64 & CPU_FTRS_POWER4 &	\
03054d51a   Anton Blanchard   [PATCH] powerpc: ...
387
  	    CPU_FTRS_PPC970 & CPU_FTRS_POWER5 & CPU_FTRS_POWER6 &	\
b3ebd1d86   Olof Johansson   [POWERPC] powerpc...
388
  	    CPU_FTRS_CELL & CPU_FTRS_PA6T & CPU_FTRS_POSSIBLE)
2406f6063   Anton Blanchard   [PATCH] powerpc: ...
389
  #else
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
390
391
  enum {
  	CPU_FTRS_ALWAYS =
10b35d997   Kumar Gala   [PATCH] powerpc: ...
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   Kim Phillips   [POWERPC] Add sup...
400
401
  	    CPU_FTRS_G2_LE & CPU_FTRS_E300 & CPU_FTRS_E300C2 &
  	    CPU_FTRS_CLASSIC32 &
10b35d997   Kumar Gala   [PATCH] powerpc: ...
402
403
404
  #else
  	    CPU_FTRS_GENERIC_32 &
  #endif
10b35d997   Kumar Gala   [PATCH] powerpc: ...
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   Kumar Gala   [PATCH] powerpc: ...
420
421
  	    CPU_FTRS_POSSIBLE,
  };
7c92943c7   Stephen Rothwell   [PATCH] powerpc: ...
422
  #endif /* __powerpc64__ */
10b35d997   Kumar Gala   [PATCH] powerpc: ...
423
424
425
426
427
  
  static inline int cpu_has_feature(unsigned long feature)
  {
  	return (CPU_FTRS_ALWAYS & feature) ||
  	       (CPU_FTRS_POSSIBLE
10b35d997   Kumar Gala   [PATCH] powerpc: ...
428
  		& cur_cpu_spec->cpu_features
10b35d997   Kumar Gala   [PATCH] powerpc: ...
429
430
431
432
433
434
  		& feature);
  }
  
  #endif /* !__ASSEMBLY__ */
  
  #ifdef __ASSEMBLY__
7aeb73242   Benjamin Herrenschmidt   [POWERPC] Support...
435
  #define BEGIN_FTR_SECTION_NESTED(label)	label:
0909c8c2d   Benjamin Herrenschmidt   [POWERPC] Support...
436
  #define BEGIN_FTR_SECTION		BEGIN_FTR_SECTION_NESTED(97)
7aeb73242   Benjamin Herrenschmidt   [POWERPC] Support...
437
  #define END_FTR_SECTION_NESTED(msk, val, label) \
0909c8c2d   Benjamin Herrenschmidt   [POWERPC] Support...
438
  	MAKE_FTR_SECTION_ENTRY(msk, val, label, __ftr_fixup)
7aeb73242   Benjamin Herrenschmidt   [POWERPC] Support...
439
  #define END_FTR_SECTION(msk, val)		\
0909c8c2d   Benjamin Herrenschmidt   [POWERPC] Support...
440
  	END_FTR_SECTION_NESTED(msk, val, 97)
7aeb73242   Benjamin Herrenschmidt   [POWERPC] Support...
441

10b35d997   Kumar Gala   [PATCH] powerpc: ...
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 */