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