1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/*
3 *  Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org)
4 */
5
6#define COMMON_USER_BOOKE	(PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU | \
7				 PPC_FEATURE_BOOKE)
8
9static struct cpu_spec cpu_specs[] __initdata = {
10	{
11		.pvr_mask		= 0xf0000fff,
12		.pvr_value		= 0x40000850,
13		.cpu_name		= "440GR Rev. A",
14		.cpu_features		= CPU_FTRS_44X,
15		.cpu_user_features	= COMMON_USER_BOOKE,
16		.mmu_features		= MMU_FTR_TYPE_44x,
17		.icache_bsize		= 32,
18		.dcache_bsize		= 32,
19		.machine_check		= machine_check_4xx,
20		.platform		= "ppc440",
21	},
22	{ /* Use logical PVR for 440EP (logical pvr = pvr | 0x8) */
23		.pvr_mask		= 0xf0000fff,
24		.pvr_value		= 0x40000858,
25		.cpu_name		= "440EP Rev. A",
26		.cpu_features		= CPU_FTRS_44X,
27		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
28		.mmu_features		= MMU_FTR_TYPE_44x,
29		.icache_bsize		= 32,
30		.dcache_bsize		= 32,
31		.cpu_setup		= __setup_cpu_440ep,
32		.machine_check		= machine_check_4xx,
33		.platform		= "ppc440",
34	},
35	{
36		.pvr_mask		= 0xf0000fff,
37		.pvr_value		= 0x400008d3,
38		.cpu_name		= "440GR Rev. B",
39		.cpu_features		= CPU_FTRS_44X,
40		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
41		.mmu_features		= MMU_FTR_TYPE_44x,
42		.icache_bsize		= 32,
43		.dcache_bsize		= 32,
44		.machine_check		= machine_check_4xx,
45		.platform		= "ppc440",
46	},
47	{ /* Matches both physical and logical PVR for 440EP (logical pvr = pvr | 0x8) */
48		.pvr_mask		= 0xf0000ff7,
49		.pvr_value		= 0x400008d4,
50		.cpu_name		= "440EP Rev. C",
51		.cpu_features		= CPU_FTRS_44X,
52		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
53		.mmu_features		= MMU_FTR_TYPE_44x,
54		.icache_bsize		= 32,
55		.dcache_bsize		= 32,
56		.cpu_setup		= __setup_cpu_440ep,
57		.machine_check		= machine_check_4xx,
58		.platform		= "ppc440",
59	},
60	{ /* Use logical PVR for 440EP (logical pvr = pvr | 0x8) */
61		.pvr_mask		= 0xf0000fff,
62		.pvr_value		= 0x400008db,
63		.cpu_name		= "440EP Rev. B",
64		.cpu_features		= CPU_FTRS_44X,
65		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
66		.mmu_features		= MMU_FTR_TYPE_44x,
67		.icache_bsize		= 32,
68		.dcache_bsize		= 32,
69		.cpu_setup		= __setup_cpu_440ep,
70		.machine_check		= machine_check_4xx,
71		.platform		= "ppc440",
72	},
73	{ /* 440GRX */
74		.pvr_mask		= 0xf0000ffb,
75		.pvr_value		= 0x200008D0,
76		.cpu_name		= "440GRX",
77		.cpu_features		= CPU_FTRS_44X,
78		.cpu_user_features	= COMMON_USER_BOOKE,
79		.mmu_features		= MMU_FTR_TYPE_44x,
80		.icache_bsize		= 32,
81		.dcache_bsize		= 32,
82		.cpu_setup		= __setup_cpu_440grx,
83		.machine_check		= machine_check_440A,
84		.platform		= "ppc440",
85	},
86	{ /* Use logical PVR for 440EPx (logical pvr = pvr | 0x8) */
87		.pvr_mask		= 0xf0000ffb,
88		.pvr_value		= 0x200008D8,
89		.cpu_name		= "440EPX",
90		.cpu_features		= CPU_FTRS_44X,
91		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
92		.mmu_features		= MMU_FTR_TYPE_44x,
93		.icache_bsize		= 32,
94		.dcache_bsize		= 32,
95		.cpu_setup		= __setup_cpu_440epx,
96		.machine_check		= machine_check_440A,
97		.platform		= "ppc440",
98	},
99	{	/* 440GP Rev. B */
100		.pvr_mask		= 0xf0000fff,
101		.pvr_value		= 0x40000440,
102		.cpu_name		= "440GP Rev. B",
103		.cpu_features		= CPU_FTRS_44X,
104		.cpu_user_features	= COMMON_USER_BOOKE,
105		.mmu_features		= MMU_FTR_TYPE_44x,
106		.icache_bsize		= 32,
107		.dcache_bsize		= 32,
108		.machine_check		= machine_check_4xx,
109		.platform		= "ppc440gp",
110	},
111	{	/* 440GP Rev. C */
112		.pvr_mask		= 0xf0000fff,
113		.pvr_value		= 0x40000481,
114		.cpu_name		= "440GP Rev. C",
115		.cpu_features		= CPU_FTRS_44X,
116		.cpu_user_features	= COMMON_USER_BOOKE,
117		.mmu_features		= MMU_FTR_TYPE_44x,
118		.icache_bsize		= 32,
119		.dcache_bsize		= 32,
120		.machine_check		= machine_check_4xx,
121		.platform		= "ppc440gp",
122	},
123	{ /* 440GX Rev. A */
124		.pvr_mask		= 0xf0000fff,
125		.pvr_value		= 0x50000850,
126		.cpu_name		= "440GX Rev. A",
127		.cpu_features		= CPU_FTRS_44X,
128		.cpu_user_features	= COMMON_USER_BOOKE,
129		.mmu_features		= MMU_FTR_TYPE_44x,
130		.icache_bsize		= 32,
131		.dcache_bsize		= 32,
132		.cpu_setup		= __setup_cpu_440gx,
133		.machine_check		= machine_check_440A,
134		.platform		= "ppc440",
135	},
136	{ /* 440GX Rev. B */
137		.pvr_mask		= 0xf0000fff,
138		.pvr_value		= 0x50000851,
139		.cpu_name		= "440GX Rev. B",
140		.cpu_features		= CPU_FTRS_44X,
141		.cpu_user_features	= COMMON_USER_BOOKE,
142		.mmu_features		= MMU_FTR_TYPE_44x,
143		.icache_bsize		= 32,
144		.dcache_bsize		= 32,
145		.cpu_setup		= __setup_cpu_440gx,
146		.machine_check		= machine_check_440A,
147		.platform		= "ppc440",
148	},
149	{ /* 440GX Rev. C */
150		.pvr_mask		= 0xf0000fff,
151		.pvr_value		= 0x50000892,
152		.cpu_name		= "440GX Rev. C",
153		.cpu_features		= CPU_FTRS_44X,
154		.cpu_user_features	= COMMON_USER_BOOKE,
155		.mmu_features		= MMU_FTR_TYPE_44x,
156		.icache_bsize		= 32,
157		.dcache_bsize		= 32,
158		.cpu_setup		= __setup_cpu_440gx,
159		.machine_check		= machine_check_440A,
160		.platform		= "ppc440",
161	},
162	{ /* 440GX Rev. F */
163		.pvr_mask		= 0xf0000fff,
164		.pvr_value		= 0x50000894,
165		.cpu_name		= "440GX Rev. F",
166		.cpu_features		= CPU_FTRS_44X,
167		.cpu_user_features	= COMMON_USER_BOOKE,
168		.mmu_features		= MMU_FTR_TYPE_44x,
169		.icache_bsize		= 32,
170		.dcache_bsize		= 32,
171		.cpu_setup		= __setup_cpu_440gx,
172		.machine_check		= machine_check_440A,
173		.platform		= "ppc440",
174	},
175	{ /* 440SP Rev. A */
176		.pvr_mask		= 0xfff00fff,
177		.pvr_value		= 0x53200891,
178		.cpu_name		= "440SP Rev. A",
179		.cpu_features		= CPU_FTRS_44X,
180		.cpu_user_features	= COMMON_USER_BOOKE,
181		.mmu_features		= MMU_FTR_TYPE_44x,
182		.icache_bsize		= 32,
183		.dcache_bsize		= 32,
184		.machine_check		= machine_check_4xx,
185		.platform		= "ppc440",
186	},
187	{ /* 440SPe Rev. A */
188		.pvr_mask               = 0xfff00fff,
189		.pvr_value              = 0x53400890,
190		.cpu_name               = "440SPe Rev. A",
191		.cpu_features		= CPU_FTRS_44X,
192		.cpu_user_features      = COMMON_USER_BOOKE,
193		.mmu_features		= MMU_FTR_TYPE_44x,
194		.icache_bsize           = 32,
195		.dcache_bsize           = 32,
196		.cpu_setup		= __setup_cpu_440spe,
197		.machine_check		= machine_check_440A,
198		.platform               = "ppc440",
199	},
200	{ /* 440SPe Rev. B */
201		.pvr_mask		= 0xfff00fff,
202		.pvr_value		= 0x53400891,
203		.cpu_name		= "440SPe Rev. B",
204		.cpu_features		= CPU_FTRS_44X,
205		.cpu_user_features	= COMMON_USER_BOOKE,
206		.mmu_features		= MMU_FTR_TYPE_44x,
207		.icache_bsize		= 32,
208		.dcache_bsize		= 32,
209		.cpu_setup		= __setup_cpu_440spe,
210		.machine_check		= machine_check_440A,
211		.platform		= "ppc440",
212	},
213	{ /* 460EX */
214		.pvr_mask		= 0xffff0006,
215		.pvr_value		= 0x13020002,
216		.cpu_name		= "460EX",
217		.cpu_features		= CPU_FTRS_440x6,
218		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
219		.mmu_features		= MMU_FTR_TYPE_44x,
220		.icache_bsize		= 32,
221		.dcache_bsize		= 32,
222		.cpu_setup		= __setup_cpu_460ex,
223		.machine_check		= machine_check_440A,
224		.platform		= "ppc440",
225	},
226	{ /* 460EX Rev B */
227		.pvr_mask		= 0xffff0007,
228		.pvr_value		= 0x13020004,
229		.cpu_name		= "460EX Rev. B",
230		.cpu_features		= CPU_FTRS_440x6,
231		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
232		.mmu_features		= MMU_FTR_TYPE_44x,
233		.icache_bsize		= 32,
234		.dcache_bsize		= 32,
235		.cpu_setup		= __setup_cpu_460ex,
236		.machine_check		= machine_check_440A,
237		.platform		= "ppc440",
238	},
239	{ /* 460GT */
240		.pvr_mask		= 0xffff0006,
241		.pvr_value		= 0x13020000,
242		.cpu_name		= "460GT",
243		.cpu_features		= CPU_FTRS_440x6,
244		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
245		.mmu_features		= MMU_FTR_TYPE_44x,
246		.icache_bsize		= 32,
247		.dcache_bsize		= 32,
248		.cpu_setup		= __setup_cpu_460gt,
249		.machine_check		= machine_check_440A,
250		.platform		= "ppc440",
251	},
252	{ /* 460GT Rev B */
253		.pvr_mask		= 0xffff0007,
254		.pvr_value		= 0x13020005,
255		.cpu_name		= "460GT Rev. B",
256		.cpu_features		= CPU_FTRS_440x6,
257		.cpu_user_features	= COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
258		.mmu_features		= MMU_FTR_TYPE_44x,
259		.icache_bsize		= 32,
260		.dcache_bsize		= 32,
261		.cpu_setup		= __setup_cpu_460gt,
262		.machine_check		= machine_check_440A,
263		.platform		= "ppc440",
264	},
265	{ /* 460SX */
266		.pvr_mask		= 0xffffff00,
267		.pvr_value		= 0x13541800,
268		.cpu_name		= "460SX",
269		.cpu_features		= CPU_FTRS_44X,
270		.cpu_user_features	= COMMON_USER_BOOKE,
271		.mmu_features		= MMU_FTR_TYPE_44x,
272		.icache_bsize		= 32,
273		.dcache_bsize		= 32,
274		.cpu_setup		= __setup_cpu_460sx,
275		.machine_check		= machine_check_440A,
276		.platform		= "ppc440",
277	},
278	{ /* 464 in APM821xx */
279		.pvr_mask		= 0xfffffff0,
280		.pvr_value		= 0x12C41C80,
281		.cpu_name		= "APM821XX",
282		.cpu_features		= CPU_FTRS_44X,
283		.cpu_user_features	= COMMON_USER_BOOKE |
284			PPC_FEATURE_HAS_FPU,
285		.mmu_features		= MMU_FTR_TYPE_44x,
286		.icache_bsize		= 32,
287		.dcache_bsize		= 32,
288		.cpu_setup		= __setup_cpu_apm821xx,
289		.machine_check		= machine_check_440A,
290		.platform		= "ppc440",
291	},
292	{	/* default match */
293		.pvr_mask		= 0x00000000,
294		.pvr_value		= 0x00000000,
295		.cpu_name		= "(generic 44x PPC)",
296		.cpu_features		= CPU_FTRS_44X,
297		.cpu_user_features	= COMMON_USER_BOOKE,
298		.mmu_features		= MMU_FTR_TYPE_44x,
299		.icache_bsize		= 32,
300		.dcache_bsize		= 32,
301		.machine_check		= machine_check_4xx,
302		.platform		= "ppc440",
303	}
304};
305