xref: /linux/include/linux/soc/pxa/cpu.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1*08d3df8cSArnd Bergmann /* SPDX-License-Identifier: GPL-2.0-only */
2*08d3df8cSArnd Bergmann /*
3*08d3df8cSArnd Bergmann  *  Author:	Nicolas Pitre
4*08d3df8cSArnd Bergmann  *  Created:	Jun 15, 2001
5*08d3df8cSArnd Bergmann  *  Copyright:	MontaVista Software Inc.
6*08d3df8cSArnd Bergmann  */
7*08d3df8cSArnd Bergmann 
8*08d3df8cSArnd Bergmann #ifndef __SOC_PXA_CPU_H
9*08d3df8cSArnd Bergmann #define __SOC_PXA_CPU_H
10*08d3df8cSArnd Bergmann 
11*08d3df8cSArnd Bergmann #ifdef CONFIG_ARM
12*08d3df8cSArnd Bergmann #include <asm/cputype.h>
13*08d3df8cSArnd Bergmann #endif
14*08d3df8cSArnd Bergmann 
15*08d3df8cSArnd Bergmann /*
16*08d3df8cSArnd Bergmann  *   CPU     Stepping     CPU_ID         JTAG_ID
17*08d3df8cSArnd Bergmann  *
18*08d3df8cSArnd Bergmann  *  PXA210	B0	0x69052922	0x2926C013
19*08d3df8cSArnd Bergmann  *  PXA210	B1	0x69052923	0x3926C013
20*08d3df8cSArnd Bergmann  *  PXA210	B2	0x69052924	0x4926C013
21*08d3df8cSArnd Bergmann  *  PXA210	C0	0x69052D25	0x5926C013
22*08d3df8cSArnd Bergmann  *
23*08d3df8cSArnd Bergmann  *  PXA250	A0	0x69052100	0x09264013
24*08d3df8cSArnd Bergmann  *  PXA250	A1	0x69052101	0x19264013
25*08d3df8cSArnd Bergmann  *  PXA250	B0	0x69052902	0x29264013
26*08d3df8cSArnd Bergmann  *  PXA250	B1	0x69052903	0x39264013
27*08d3df8cSArnd Bergmann  *  PXA250	B2	0x69052904	0x49264013
28*08d3df8cSArnd Bergmann  *  PXA250	C0	0x69052D05	0x59264013
29*08d3df8cSArnd Bergmann  *
30*08d3df8cSArnd Bergmann  *  PXA255	A0	0x69052D06	0x69264013
31*08d3df8cSArnd Bergmann  *
32*08d3df8cSArnd Bergmann  *  PXA26x	A0	0x69052903	0x39264013
33*08d3df8cSArnd Bergmann  *  PXA26x	B0	0x69052D05	0x59264013
34*08d3df8cSArnd Bergmann  *
35*08d3df8cSArnd Bergmann  *  PXA27x	A0	0x69054110	0x09265013
36*08d3df8cSArnd Bergmann  *  PXA27x	A1	0x69054111	0x19265013
37*08d3df8cSArnd Bergmann  *  PXA27x	B0	0x69054112	0x29265013
38*08d3df8cSArnd Bergmann  *  PXA27x	B1	0x69054113	0x39265013
39*08d3df8cSArnd Bergmann  *  PXA27x	C0	0x69054114	0x49265013
40*08d3df8cSArnd Bergmann  *  PXA27x	C5	0x69054117	0x79265013
41*08d3df8cSArnd Bergmann  *
42*08d3df8cSArnd Bergmann  *  PXA30x	A0	0x69056880	0x0E648013
43*08d3df8cSArnd Bergmann  *  PXA30x	A1	0x69056881	0x1E648013
44*08d3df8cSArnd Bergmann  *  PXA31x	A0	0x69056890	0x0E649013
45*08d3df8cSArnd Bergmann  *  PXA31x	A1	0x69056891	0x1E649013
46*08d3df8cSArnd Bergmann  *  PXA31x	A2	0x69056892	0x2E649013
47*08d3df8cSArnd Bergmann  *  PXA32x	B1	0x69056825	0x5E642013
48*08d3df8cSArnd Bergmann  *  PXA32x	B2	0x69056826	0x6E642013
49*08d3df8cSArnd Bergmann  *
50*08d3df8cSArnd Bergmann  *  PXA930	B0	0x69056835	0x5E643013
51*08d3df8cSArnd Bergmann  *  PXA930	B1	0x69056837	0x7E643013
52*08d3df8cSArnd Bergmann  *  PXA930	B2	0x69056838	0x8E643013
53*08d3df8cSArnd Bergmann  *
54*08d3df8cSArnd Bergmann  *  PXA935	A0	0x56056931	0x1E653013
55*08d3df8cSArnd Bergmann  *  PXA935	B0	0x56056936	0x6E653013
56*08d3df8cSArnd Bergmann  *  PXA935	B1	0x56056938	0x8E653013
57*08d3df8cSArnd Bergmann  */
58*08d3df8cSArnd Bergmann #ifdef CONFIG_PXA25x
59*08d3df8cSArnd Bergmann #define __cpu_is_pxa210(id)				\
60*08d3df8cSArnd Bergmann 	({						\
61*08d3df8cSArnd Bergmann 		unsigned int _id = (id) & 0xf3f0;	\
62*08d3df8cSArnd Bergmann 		_id == 0x2120;				\
63*08d3df8cSArnd Bergmann 	})
64*08d3df8cSArnd Bergmann 
65*08d3df8cSArnd Bergmann #define __cpu_is_pxa250(id)				\
66*08d3df8cSArnd Bergmann 	({						\
67*08d3df8cSArnd Bergmann 		unsigned int _id = (id) & 0xf3ff;	\
68*08d3df8cSArnd Bergmann 		_id <= 0x2105;				\
69*08d3df8cSArnd Bergmann 	})
70*08d3df8cSArnd Bergmann 
71*08d3df8cSArnd Bergmann #define __cpu_is_pxa255(id)				\
72*08d3df8cSArnd Bergmann 	({						\
73*08d3df8cSArnd Bergmann 		unsigned int _id = (id) & 0xffff;	\
74*08d3df8cSArnd Bergmann 		_id == 0x2d06;				\
75*08d3df8cSArnd Bergmann 	})
76*08d3df8cSArnd Bergmann 
77*08d3df8cSArnd Bergmann #define __cpu_is_pxa25x(id)				\
78*08d3df8cSArnd Bergmann 	({						\
79*08d3df8cSArnd Bergmann 		unsigned int _id = (id) & 0xf300;	\
80*08d3df8cSArnd Bergmann 		_id == 0x2100;				\
81*08d3df8cSArnd Bergmann 	})
82*08d3df8cSArnd Bergmann #else
83*08d3df8cSArnd Bergmann #define __cpu_is_pxa210(id)	(0)
84*08d3df8cSArnd Bergmann #define __cpu_is_pxa250(id)	(0)
85*08d3df8cSArnd Bergmann #define __cpu_is_pxa255(id)	(0)
86*08d3df8cSArnd Bergmann #define __cpu_is_pxa25x(id)	(0)
87*08d3df8cSArnd Bergmann #endif
88*08d3df8cSArnd Bergmann 
89*08d3df8cSArnd Bergmann #ifdef CONFIG_PXA27x
90*08d3df8cSArnd Bergmann #define __cpu_is_pxa27x(id)				\
91*08d3df8cSArnd Bergmann 	({						\
92*08d3df8cSArnd Bergmann 		unsigned int _id = (id) >> 4 & 0xfff;	\
93*08d3df8cSArnd Bergmann 		_id == 0x411;				\
94*08d3df8cSArnd Bergmann 	})
95*08d3df8cSArnd Bergmann #else
96*08d3df8cSArnd Bergmann #define __cpu_is_pxa27x(id)	(0)
97*08d3df8cSArnd Bergmann #endif
98*08d3df8cSArnd Bergmann 
99*08d3df8cSArnd Bergmann #ifdef CONFIG_CPU_PXA300
100*08d3df8cSArnd Bergmann #define __cpu_is_pxa300(id)				\
101*08d3df8cSArnd Bergmann 	({						\
102*08d3df8cSArnd Bergmann 		unsigned int _id = (id) >> 4 & 0xfff;	\
103*08d3df8cSArnd Bergmann 		_id == 0x688;				\
104*08d3df8cSArnd Bergmann 	 })
105*08d3df8cSArnd Bergmann #else
106*08d3df8cSArnd Bergmann #define __cpu_is_pxa300(id)	(0)
107*08d3df8cSArnd Bergmann #endif
108*08d3df8cSArnd Bergmann 
109*08d3df8cSArnd Bergmann #ifdef CONFIG_CPU_PXA310
110*08d3df8cSArnd Bergmann #define __cpu_is_pxa310(id)				\
111*08d3df8cSArnd Bergmann 	({						\
112*08d3df8cSArnd Bergmann 		unsigned int _id = (id) >> 4 & 0xfff;	\
113*08d3df8cSArnd Bergmann 		_id == 0x689;				\
114*08d3df8cSArnd Bergmann 	 })
115*08d3df8cSArnd Bergmann #else
116*08d3df8cSArnd Bergmann #define __cpu_is_pxa310(id)	(0)
117*08d3df8cSArnd Bergmann #endif
118*08d3df8cSArnd Bergmann 
119*08d3df8cSArnd Bergmann #ifdef CONFIG_CPU_PXA320
120*08d3df8cSArnd Bergmann #define __cpu_is_pxa320(id)				\
121*08d3df8cSArnd Bergmann 	({						\
122*08d3df8cSArnd Bergmann 		unsigned int _id = (id) >> 4 & 0xfff;	\
123*08d3df8cSArnd Bergmann 		_id == 0x603 || _id == 0x682;		\
124*08d3df8cSArnd Bergmann 	 })
125*08d3df8cSArnd Bergmann #else
126*08d3df8cSArnd Bergmann #define __cpu_is_pxa320(id)	(0)
127*08d3df8cSArnd Bergmann #endif
128*08d3df8cSArnd Bergmann 
129*08d3df8cSArnd Bergmann #ifdef CONFIG_CPU_PXA930
130*08d3df8cSArnd Bergmann #define __cpu_is_pxa930(id)				\
131*08d3df8cSArnd Bergmann 	({						\
132*08d3df8cSArnd Bergmann 		unsigned int _id = (id) >> 4 & 0xfff;	\
133*08d3df8cSArnd Bergmann 		_id == 0x683;				\
134*08d3df8cSArnd Bergmann 	 })
135*08d3df8cSArnd Bergmann #else
136*08d3df8cSArnd Bergmann #define __cpu_is_pxa930(id)	(0)
137*08d3df8cSArnd Bergmann #endif
138*08d3df8cSArnd Bergmann 
139*08d3df8cSArnd Bergmann #ifdef CONFIG_CPU_PXA935
140*08d3df8cSArnd Bergmann #define __cpu_is_pxa935(id)				\
141*08d3df8cSArnd Bergmann 	({						\
142*08d3df8cSArnd Bergmann 		unsigned int _id = (id) >> 4 & 0xfff;	\
143*08d3df8cSArnd Bergmann 		_id == 0x693;				\
144*08d3df8cSArnd Bergmann 	 })
145*08d3df8cSArnd Bergmann #else
146*08d3df8cSArnd Bergmann #define __cpu_is_pxa935(id)	(0)
147*08d3df8cSArnd Bergmann #endif
148*08d3df8cSArnd Bergmann 
149*08d3df8cSArnd Bergmann #define cpu_is_pxa210()					\
150*08d3df8cSArnd Bergmann 	({						\
151*08d3df8cSArnd Bergmann 		__cpu_is_pxa210(read_cpuid_id());	\
152*08d3df8cSArnd Bergmann 	})
153*08d3df8cSArnd Bergmann 
154*08d3df8cSArnd Bergmann #define cpu_is_pxa250()					\
155*08d3df8cSArnd Bergmann 	({						\
156*08d3df8cSArnd Bergmann 		__cpu_is_pxa250(read_cpuid_id());	\
157*08d3df8cSArnd Bergmann 	})
158*08d3df8cSArnd Bergmann 
159*08d3df8cSArnd Bergmann #define cpu_is_pxa255()                                 \
160*08d3df8cSArnd Bergmann 	({                                              \
161*08d3df8cSArnd Bergmann 		__cpu_is_pxa255(read_cpuid_id());       \
162*08d3df8cSArnd Bergmann 	})
163*08d3df8cSArnd Bergmann 
164*08d3df8cSArnd Bergmann #define cpu_is_pxa25x()					\
165*08d3df8cSArnd Bergmann 	({						\
166*08d3df8cSArnd Bergmann 		__cpu_is_pxa25x(read_cpuid_id());	\
167*08d3df8cSArnd Bergmann 	})
168*08d3df8cSArnd Bergmann 
169*08d3df8cSArnd Bergmann #define cpu_is_pxa27x()					\
170*08d3df8cSArnd Bergmann 	({						\
171*08d3df8cSArnd Bergmann 		__cpu_is_pxa27x(read_cpuid_id());	\
172*08d3df8cSArnd Bergmann 	})
173*08d3df8cSArnd Bergmann 
174*08d3df8cSArnd Bergmann #define cpu_is_pxa300()					\
175*08d3df8cSArnd Bergmann 	({						\
176*08d3df8cSArnd Bergmann 		__cpu_is_pxa300(read_cpuid_id());	\
177*08d3df8cSArnd Bergmann 	 })
178*08d3df8cSArnd Bergmann 
179*08d3df8cSArnd Bergmann #define cpu_is_pxa310()					\
180*08d3df8cSArnd Bergmann 	({						\
181*08d3df8cSArnd Bergmann 		__cpu_is_pxa310(read_cpuid_id());	\
182*08d3df8cSArnd Bergmann 	 })
183*08d3df8cSArnd Bergmann 
184*08d3df8cSArnd Bergmann #define cpu_is_pxa320()					\
185*08d3df8cSArnd Bergmann 	({						\
186*08d3df8cSArnd Bergmann 		__cpu_is_pxa320(read_cpuid_id());	\
187*08d3df8cSArnd Bergmann 	 })
188*08d3df8cSArnd Bergmann 
189*08d3df8cSArnd Bergmann #define cpu_is_pxa930()					\
190*08d3df8cSArnd Bergmann 	({						\
191*08d3df8cSArnd Bergmann 		__cpu_is_pxa930(read_cpuid_id());	\
192*08d3df8cSArnd Bergmann 	 })
193*08d3df8cSArnd Bergmann 
194*08d3df8cSArnd Bergmann #define cpu_is_pxa935()					\
195*08d3df8cSArnd Bergmann 	({						\
196*08d3df8cSArnd Bergmann 		__cpu_is_pxa935(read_cpuid_id());	\
197*08d3df8cSArnd Bergmann 	 })
198*08d3df8cSArnd Bergmann 
199*08d3df8cSArnd Bergmann 
200*08d3df8cSArnd Bergmann 
201*08d3df8cSArnd Bergmann /*
202*08d3df8cSArnd Bergmann  * CPUID Core Generation Bit
203*08d3df8cSArnd Bergmann  * <= 0x2 for pxa21x/pxa25x/pxa26x/pxa27x
204*08d3df8cSArnd Bergmann  */
205*08d3df8cSArnd Bergmann #if defined(CONFIG_PXA25x) || defined(CONFIG_PXA27x)
206*08d3df8cSArnd Bergmann #define __cpu_is_pxa2xx(id)				\
207*08d3df8cSArnd Bergmann 	({						\
208*08d3df8cSArnd Bergmann 		unsigned int _id = (id) >> 13 & 0x7;	\
209*08d3df8cSArnd Bergmann 		_id <= 0x2;				\
210*08d3df8cSArnd Bergmann 	 })
211*08d3df8cSArnd Bergmann #else
212*08d3df8cSArnd Bergmann #define __cpu_is_pxa2xx(id)	(0)
213*08d3df8cSArnd Bergmann #endif
214*08d3df8cSArnd Bergmann 
215*08d3df8cSArnd Bergmann #ifdef CONFIG_PXA3xx
216*08d3df8cSArnd Bergmann #define __cpu_is_pxa3xx(id)				\
217*08d3df8cSArnd Bergmann 	({						\
218*08d3df8cSArnd Bergmann 		__cpu_is_pxa300(id)			\
219*08d3df8cSArnd Bergmann 			|| __cpu_is_pxa310(id)		\
220*08d3df8cSArnd Bergmann 			|| __cpu_is_pxa320(id)		\
221*08d3df8cSArnd Bergmann 			|| __cpu_is_pxa93x(id);		\
222*08d3df8cSArnd Bergmann 	 })
223*08d3df8cSArnd Bergmann #else
224*08d3df8cSArnd Bergmann #define __cpu_is_pxa3xx(id)	(0)
225*08d3df8cSArnd Bergmann #endif
226*08d3df8cSArnd Bergmann 
227*08d3df8cSArnd Bergmann #if defined(CONFIG_CPU_PXA930) || defined(CONFIG_CPU_PXA935)
228*08d3df8cSArnd Bergmann #define __cpu_is_pxa93x(id)				\
229*08d3df8cSArnd Bergmann 	({						\
230*08d3df8cSArnd Bergmann 		__cpu_is_pxa930(id)			\
231*08d3df8cSArnd Bergmann 			|| __cpu_is_pxa935(id);		\
232*08d3df8cSArnd Bergmann 	 })
233*08d3df8cSArnd Bergmann #else
234*08d3df8cSArnd Bergmann #define __cpu_is_pxa93x(id)	(0)
235*08d3df8cSArnd Bergmann #endif
236*08d3df8cSArnd Bergmann 
237*08d3df8cSArnd Bergmann #define cpu_is_pxa2xx()					\
238*08d3df8cSArnd Bergmann 	({						\
239*08d3df8cSArnd Bergmann 		__cpu_is_pxa2xx(read_cpuid_id());	\
240*08d3df8cSArnd Bergmann 	 })
241*08d3df8cSArnd Bergmann 
242*08d3df8cSArnd Bergmann #define cpu_is_pxa3xx()					\
243*08d3df8cSArnd Bergmann 	({						\
244*08d3df8cSArnd Bergmann 		__cpu_is_pxa3xx(read_cpuid_id());	\
245*08d3df8cSArnd Bergmann 	 })
246*08d3df8cSArnd Bergmann 
247*08d3df8cSArnd Bergmann #define cpu_is_pxa93x()					\
248*08d3df8cSArnd Bergmann 	({						\
249*08d3df8cSArnd Bergmann 		__cpu_is_pxa93x(read_cpuid_id());	\
250*08d3df8cSArnd Bergmann 	 })
251*08d3df8cSArnd Bergmann 
252*08d3df8cSArnd Bergmann #endif
253