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

source code of linux/include/linux/soc/pxa/cpu.h