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