xref: /OK3568_Linux_fs/kernel/arch/arm/mm/Kconfig (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyuncomment "Processor Type"
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun# Select CPU types depending on the architecture selected.  This selects
5*4882a593Smuzhiyun# which CPUs we support in the kernel image, and the compiler instruction
6*4882a593Smuzhiyun# optimiser behaviour.
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun# ARM7TDMI
9*4882a593Smuzhiyunconfig CPU_ARM7TDMI
10*4882a593Smuzhiyun	bool
11*4882a593Smuzhiyun	depends on !MMU
12*4882a593Smuzhiyun	select CPU_32v4T
13*4882a593Smuzhiyun	select CPU_ABRT_LV4T
14*4882a593Smuzhiyun	select CPU_CACHE_V4
15*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
16*4882a593Smuzhiyun	help
17*4882a593Smuzhiyun	  A 32-bit RISC microprocessor based on the ARM7 processor core
18*4882a593Smuzhiyun	  which has no memory control unit and cache.
19*4882a593Smuzhiyun
20*4882a593Smuzhiyun	  Say Y if you want support for the ARM7TDMI processor.
21*4882a593Smuzhiyun	  Otherwise, say N.
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun# ARM720T
24*4882a593Smuzhiyunconfig CPU_ARM720T
25*4882a593Smuzhiyun	bool
26*4882a593Smuzhiyun	select CPU_32v4T
27*4882a593Smuzhiyun	select CPU_ABRT_LV4T
28*4882a593Smuzhiyun	select CPU_CACHE_V4
29*4882a593Smuzhiyun	select CPU_CACHE_VIVT
30*4882a593Smuzhiyun	select CPU_COPY_V4WT if MMU
31*4882a593Smuzhiyun	select CPU_CP15_MMU
32*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
33*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
34*4882a593Smuzhiyun	select CPU_TLB_V4WT if MMU
35*4882a593Smuzhiyun	help
36*4882a593Smuzhiyun	  A 32-bit RISC processor with 8kByte Cache, Write Buffer and
37*4882a593Smuzhiyun	  MMU built around an ARM7TDMI core.
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun	  Say Y if you want support for the ARM720T processor.
40*4882a593Smuzhiyun	  Otherwise, say N.
41*4882a593Smuzhiyun
42*4882a593Smuzhiyun# ARM740T
43*4882a593Smuzhiyunconfig CPU_ARM740T
44*4882a593Smuzhiyun	bool
45*4882a593Smuzhiyun	depends on !MMU
46*4882a593Smuzhiyun	select CPU_32v4T
47*4882a593Smuzhiyun	select CPU_ABRT_LV4T
48*4882a593Smuzhiyun	select CPU_CACHE_V4
49*4882a593Smuzhiyun	select CPU_CP15_MPU
50*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
51*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
52*4882a593Smuzhiyun	help
53*4882a593Smuzhiyun	  A 32-bit RISC processor with 8KB cache or 4KB variants,
54*4882a593Smuzhiyun	  write buffer and MPU(Protection Unit) built around
55*4882a593Smuzhiyun	  an ARM7TDMI core.
56*4882a593Smuzhiyun
57*4882a593Smuzhiyun	  Say Y if you want support for the ARM740T processor.
58*4882a593Smuzhiyun	  Otherwise, say N.
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun# ARM9TDMI
61*4882a593Smuzhiyunconfig CPU_ARM9TDMI
62*4882a593Smuzhiyun	bool
63*4882a593Smuzhiyun	depends on !MMU
64*4882a593Smuzhiyun	select CPU_32v4T
65*4882a593Smuzhiyun	select CPU_ABRT_NOMMU
66*4882a593Smuzhiyun	select CPU_CACHE_V4
67*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
68*4882a593Smuzhiyun	help
69*4882a593Smuzhiyun	  A 32-bit RISC microprocessor based on the ARM9 processor core
70*4882a593Smuzhiyun	  which has no memory control unit and cache.
71*4882a593Smuzhiyun
72*4882a593Smuzhiyun	  Say Y if you want support for the ARM9TDMI processor.
73*4882a593Smuzhiyun	  Otherwise, say N.
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun# ARM920T
76*4882a593Smuzhiyunconfig CPU_ARM920T
77*4882a593Smuzhiyun	bool
78*4882a593Smuzhiyun	select CPU_32v4T
79*4882a593Smuzhiyun	select CPU_ABRT_EV4T
80*4882a593Smuzhiyun	select CPU_CACHE_V4WT
81*4882a593Smuzhiyun	select CPU_CACHE_VIVT
82*4882a593Smuzhiyun	select CPU_COPY_V4WB if MMU
83*4882a593Smuzhiyun	select CPU_CP15_MMU
84*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
85*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
86*4882a593Smuzhiyun	select CPU_TLB_V4WBI if MMU
87*4882a593Smuzhiyun	help
88*4882a593Smuzhiyun	  The ARM920T is licensed to be produced by numerous vendors,
89*4882a593Smuzhiyun	  and is used in the Cirrus EP93xx and the Samsung S3C2410.
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun	  Say Y if you want support for the ARM920T processor.
92*4882a593Smuzhiyun	  Otherwise, say N.
93*4882a593Smuzhiyun
94*4882a593Smuzhiyun# ARM922T
95*4882a593Smuzhiyunconfig CPU_ARM922T
96*4882a593Smuzhiyun	bool
97*4882a593Smuzhiyun	select CPU_32v4T
98*4882a593Smuzhiyun	select CPU_ABRT_EV4T
99*4882a593Smuzhiyun	select CPU_CACHE_V4WT
100*4882a593Smuzhiyun	select CPU_CACHE_VIVT
101*4882a593Smuzhiyun	select CPU_COPY_V4WB if MMU
102*4882a593Smuzhiyun	select CPU_CP15_MMU
103*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
104*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
105*4882a593Smuzhiyun	select CPU_TLB_V4WBI if MMU
106*4882a593Smuzhiyun	help
107*4882a593Smuzhiyun	  The ARM922T is a version of the ARM920T, but with smaller
108*4882a593Smuzhiyun	  instruction and data caches. It is used in Altera's
109*4882a593Smuzhiyun	  Excalibur XA device family and the ARM Integrator.
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun	  Say Y if you want support for the ARM922T processor.
112*4882a593Smuzhiyun	  Otherwise, say N.
113*4882a593Smuzhiyun
114*4882a593Smuzhiyun# ARM925T
115*4882a593Smuzhiyunconfig CPU_ARM925T
116*4882a593Smuzhiyun	bool
117*4882a593Smuzhiyun	select CPU_32v4T
118*4882a593Smuzhiyun	select CPU_ABRT_EV4T
119*4882a593Smuzhiyun	select CPU_CACHE_V4WT
120*4882a593Smuzhiyun	select CPU_CACHE_VIVT
121*4882a593Smuzhiyun	select CPU_COPY_V4WB if MMU
122*4882a593Smuzhiyun	select CPU_CP15_MMU
123*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
124*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
125*4882a593Smuzhiyun	select CPU_TLB_V4WBI if MMU
126*4882a593Smuzhiyun 	help
127*4882a593Smuzhiyun 	  The ARM925T is a mix between the ARM920T and ARM926T, but with
128*4882a593Smuzhiyun	  different instruction and data caches. It is used in TI's OMAP
129*4882a593Smuzhiyun 	  device family.
130*4882a593Smuzhiyun
131*4882a593Smuzhiyun 	  Say Y if you want support for the ARM925T processor.
132*4882a593Smuzhiyun 	  Otherwise, say N.
133*4882a593Smuzhiyun
134*4882a593Smuzhiyun# ARM926T
135*4882a593Smuzhiyunconfig CPU_ARM926T
136*4882a593Smuzhiyun	bool
137*4882a593Smuzhiyun	select CPU_32v5
138*4882a593Smuzhiyun	select CPU_ABRT_EV5TJ
139*4882a593Smuzhiyun	select CPU_CACHE_VIVT
140*4882a593Smuzhiyun	select CPU_COPY_V4WB if MMU
141*4882a593Smuzhiyun	select CPU_CP15_MMU
142*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
143*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
144*4882a593Smuzhiyun	select CPU_TLB_V4WBI if MMU
145*4882a593Smuzhiyun	help
146*4882a593Smuzhiyun	  This is a variant of the ARM920.  It has slightly different
147*4882a593Smuzhiyun	  instruction sequences for cache and TLB operations.  Curiously,
148*4882a593Smuzhiyun	  there is no documentation on it at the ARM corporate website.
149*4882a593Smuzhiyun
150*4882a593Smuzhiyun	  Say Y if you want support for the ARM926T processor.
151*4882a593Smuzhiyun	  Otherwise, say N.
152*4882a593Smuzhiyun
153*4882a593Smuzhiyun# FA526
154*4882a593Smuzhiyunconfig CPU_FA526
155*4882a593Smuzhiyun	bool
156*4882a593Smuzhiyun	select CPU_32v4
157*4882a593Smuzhiyun	select CPU_ABRT_EV4
158*4882a593Smuzhiyun	select CPU_CACHE_FA
159*4882a593Smuzhiyun	select CPU_CACHE_VIVT
160*4882a593Smuzhiyun	select CPU_COPY_FA if MMU
161*4882a593Smuzhiyun	select CPU_CP15_MMU
162*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
163*4882a593Smuzhiyun	select CPU_TLB_FA if MMU
164*4882a593Smuzhiyun	help
165*4882a593Smuzhiyun	  The FA526 is a version of the ARMv4 compatible processor with
166*4882a593Smuzhiyun	  Branch Target Buffer, Unified TLB and cache line size 16.
167*4882a593Smuzhiyun
168*4882a593Smuzhiyun	  Say Y if you want support for the FA526 processor.
169*4882a593Smuzhiyun	  Otherwise, say N.
170*4882a593Smuzhiyun
171*4882a593Smuzhiyun# ARM940T
172*4882a593Smuzhiyunconfig CPU_ARM940T
173*4882a593Smuzhiyun	bool
174*4882a593Smuzhiyun	depends on !MMU
175*4882a593Smuzhiyun	select CPU_32v4T
176*4882a593Smuzhiyun	select CPU_ABRT_NOMMU
177*4882a593Smuzhiyun	select CPU_CACHE_VIVT
178*4882a593Smuzhiyun	select CPU_CP15_MPU
179*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
180*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
181*4882a593Smuzhiyun	help
182*4882a593Smuzhiyun	  ARM940T is a member of the ARM9TDMI family of general-
183*4882a593Smuzhiyun	  purpose microprocessors with MPU and separate 4KB
184*4882a593Smuzhiyun	  instruction and 4KB data cases, each with a 4-word line
185*4882a593Smuzhiyun	  length.
186*4882a593Smuzhiyun
187*4882a593Smuzhiyun	  Say Y if you want support for the ARM940T processor.
188*4882a593Smuzhiyun	  Otherwise, say N.
189*4882a593Smuzhiyun
190*4882a593Smuzhiyun# ARM946E-S
191*4882a593Smuzhiyunconfig CPU_ARM946E
192*4882a593Smuzhiyun	bool
193*4882a593Smuzhiyun	depends on !MMU
194*4882a593Smuzhiyun	select CPU_32v5
195*4882a593Smuzhiyun	select CPU_ABRT_NOMMU
196*4882a593Smuzhiyun	select CPU_CACHE_VIVT
197*4882a593Smuzhiyun	select CPU_CP15_MPU
198*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
199*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
200*4882a593Smuzhiyun	help
201*4882a593Smuzhiyun	  ARM946E-S is a member of the ARM9E-S family of high-
202*4882a593Smuzhiyun	  performance, 32-bit system-on-chip processor solutions.
203*4882a593Smuzhiyun	  The TCM and ARMv5TE 32-bit instruction set is supported.
204*4882a593Smuzhiyun
205*4882a593Smuzhiyun	  Say Y if you want support for the ARM946E-S processor.
206*4882a593Smuzhiyun	  Otherwise, say N.
207*4882a593Smuzhiyun
208*4882a593Smuzhiyun# ARM1020 - needs validating
209*4882a593Smuzhiyunconfig CPU_ARM1020
210*4882a593Smuzhiyun	bool
211*4882a593Smuzhiyun	select CPU_32v5
212*4882a593Smuzhiyun	select CPU_ABRT_EV4T
213*4882a593Smuzhiyun	select CPU_CACHE_V4WT
214*4882a593Smuzhiyun	select CPU_CACHE_VIVT
215*4882a593Smuzhiyun	select CPU_COPY_V4WB if MMU
216*4882a593Smuzhiyun	select CPU_CP15_MMU
217*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
218*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
219*4882a593Smuzhiyun	select CPU_TLB_V4WBI if MMU
220*4882a593Smuzhiyun	help
221*4882a593Smuzhiyun	  The ARM1020 is the 32K cached version of the ARM10 processor,
222*4882a593Smuzhiyun	  with an addition of a floating-point unit.
223*4882a593Smuzhiyun
224*4882a593Smuzhiyun	  Say Y if you want support for the ARM1020 processor.
225*4882a593Smuzhiyun	  Otherwise, say N.
226*4882a593Smuzhiyun
227*4882a593Smuzhiyun# ARM1020E - needs validating
228*4882a593Smuzhiyunconfig CPU_ARM1020E
229*4882a593Smuzhiyun	bool
230*4882a593Smuzhiyun	depends on n
231*4882a593Smuzhiyun	select CPU_32v5
232*4882a593Smuzhiyun	select CPU_ABRT_EV4T
233*4882a593Smuzhiyun	select CPU_CACHE_V4WT
234*4882a593Smuzhiyun	select CPU_CACHE_VIVT
235*4882a593Smuzhiyun	select CPU_COPY_V4WB if MMU
236*4882a593Smuzhiyun	select CPU_CP15_MMU
237*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
238*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
239*4882a593Smuzhiyun	select CPU_TLB_V4WBI if MMU
240*4882a593Smuzhiyun
241*4882a593Smuzhiyun# ARM1022E
242*4882a593Smuzhiyunconfig CPU_ARM1022
243*4882a593Smuzhiyun	bool
244*4882a593Smuzhiyun	select CPU_32v5
245*4882a593Smuzhiyun	select CPU_ABRT_EV4T
246*4882a593Smuzhiyun	select CPU_CACHE_VIVT
247*4882a593Smuzhiyun	select CPU_COPY_V4WB if MMU # can probably do better
248*4882a593Smuzhiyun	select CPU_CP15_MMU
249*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
250*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
251*4882a593Smuzhiyun	select CPU_TLB_V4WBI if MMU
252*4882a593Smuzhiyun	help
253*4882a593Smuzhiyun	  The ARM1022E is an implementation of the ARMv5TE architecture
254*4882a593Smuzhiyun	  based upon the ARM10 integer core with a 16KiB L1 Harvard cache,
255*4882a593Smuzhiyun	  embedded trace macrocell, and a floating-point unit.
256*4882a593Smuzhiyun
257*4882a593Smuzhiyun	  Say Y if you want support for the ARM1022E processor.
258*4882a593Smuzhiyun	  Otherwise, say N.
259*4882a593Smuzhiyun
260*4882a593Smuzhiyun# ARM1026EJ-S
261*4882a593Smuzhiyunconfig CPU_ARM1026
262*4882a593Smuzhiyun	bool
263*4882a593Smuzhiyun	select CPU_32v5
264*4882a593Smuzhiyun	select CPU_ABRT_EV5T # But need Jazelle, but EV5TJ ignores bit 10
265*4882a593Smuzhiyun	select CPU_CACHE_VIVT
266*4882a593Smuzhiyun	select CPU_COPY_V4WB if MMU # can probably do better
267*4882a593Smuzhiyun	select CPU_CP15_MMU
268*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
269*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
270*4882a593Smuzhiyun	select CPU_TLB_V4WBI if MMU
271*4882a593Smuzhiyun	help
272*4882a593Smuzhiyun	  The ARM1026EJ-S is an implementation of the ARMv5TEJ architecture
273*4882a593Smuzhiyun	  based upon the ARM10 integer core.
274*4882a593Smuzhiyun
275*4882a593Smuzhiyun	  Say Y if you want support for the ARM1026EJ-S processor.
276*4882a593Smuzhiyun	  Otherwise, say N.
277*4882a593Smuzhiyun
278*4882a593Smuzhiyun# SA110
279*4882a593Smuzhiyunconfig CPU_SA110
280*4882a593Smuzhiyun	bool
281*4882a593Smuzhiyun	select CPU_32v3 if ARCH_RPC
282*4882a593Smuzhiyun	select CPU_32v4 if !ARCH_RPC
283*4882a593Smuzhiyun	select CPU_ABRT_EV4
284*4882a593Smuzhiyun	select CPU_CACHE_V4WB
285*4882a593Smuzhiyun	select CPU_CACHE_VIVT
286*4882a593Smuzhiyun	select CPU_COPY_V4WB if MMU
287*4882a593Smuzhiyun	select CPU_CP15_MMU
288*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
289*4882a593Smuzhiyun	select CPU_TLB_V4WB if MMU
290*4882a593Smuzhiyun	help
291*4882a593Smuzhiyun	  The Intel StrongARM(R) SA-110 is a 32-bit microprocessor and
292*4882a593Smuzhiyun	  is available at five speeds ranging from 100 MHz to 233 MHz.
293*4882a593Smuzhiyun	  More information is available at
294*4882a593Smuzhiyun	  <http://developer.intel.com/design/strong/sa110.htm>.
295*4882a593Smuzhiyun
296*4882a593Smuzhiyun	  Say Y if you want support for the SA-110 processor.
297*4882a593Smuzhiyun	  Otherwise, say N.
298*4882a593Smuzhiyun
299*4882a593Smuzhiyun# SA1100
300*4882a593Smuzhiyunconfig CPU_SA1100
301*4882a593Smuzhiyun	bool
302*4882a593Smuzhiyun	select CPU_32v4
303*4882a593Smuzhiyun	select CPU_ABRT_EV4
304*4882a593Smuzhiyun	select CPU_CACHE_V4WB
305*4882a593Smuzhiyun	select CPU_CACHE_VIVT
306*4882a593Smuzhiyun	select CPU_CP15_MMU
307*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
308*4882a593Smuzhiyun	select CPU_TLB_V4WB if MMU
309*4882a593Smuzhiyun
310*4882a593Smuzhiyun# XScale
311*4882a593Smuzhiyunconfig CPU_XSCALE
312*4882a593Smuzhiyun	bool
313*4882a593Smuzhiyun	select CPU_32v5
314*4882a593Smuzhiyun	select CPU_ABRT_EV5T
315*4882a593Smuzhiyun	select CPU_CACHE_VIVT
316*4882a593Smuzhiyun	select CPU_CP15_MMU
317*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
318*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
319*4882a593Smuzhiyun	select CPU_TLB_V4WBI if MMU
320*4882a593Smuzhiyun
321*4882a593Smuzhiyun# XScale Core Version 3
322*4882a593Smuzhiyunconfig CPU_XSC3
323*4882a593Smuzhiyun	bool
324*4882a593Smuzhiyun	select CPU_32v5
325*4882a593Smuzhiyun	select CPU_ABRT_EV5T
326*4882a593Smuzhiyun	select CPU_CACHE_VIVT
327*4882a593Smuzhiyun	select CPU_CP15_MMU
328*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
329*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
330*4882a593Smuzhiyun	select CPU_TLB_V4WBI if MMU
331*4882a593Smuzhiyun	select IO_36
332*4882a593Smuzhiyun
333*4882a593Smuzhiyun# Marvell PJ1 (Mohawk)
334*4882a593Smuzhiyunconfig CPU_MOHAWK
335*4882a593Smuzhiyun	bool
336*4882a593Smuzhiyun	select CPU_32v5
337*4882a593Smuzhiyun	select CPU_ABRT_EV5T
338*4882a593Smuzhiyun	select CPU_CACHE_VIVT
339*4882a593Smuzhiyun	select CPU_COPY_V4WB if MMU
340*4882a593Smuzhiyun	select CPU_CP15_MMU
341*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
342*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
343*4882a593Smuzhiyun	select CPU_TLB_V4WBI if MMU
344*4882a593Smuzhiyun
345*4882a593Smuzhiyun# Feroceon
346*4882a593Smuzhiyunconfig CPU_FEROCEON
347*4882a593Smuzhiyun	bool
348*4882a593Smuzhiyun	select CPU_32v5
349*4882a593Smuzhiyun	select CPU_ABRT_EV5T
350*4882a593Smuzhiyun	select CPU_CACHE_VIVT
351*4882a593Smuzhiyun	select CPU_COPY_FEROCEON if MMU
352*4882a593Smuzhiyun	select CPU_CP15_MMU
353*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
354*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
355*4882a593Smuzhiyun	select CPU_TLB_FEROCEON if MMU
356*4882a593Smuzhiyun
357*4882a593Smuzhiyunconfig CPU_FEROCEON_OLD_ID
358*4882a593Smuzhiyun	bool "Accept early Feroceon cores with an ARM926 ID"
359*4882a593Smuzhiyun	depends on CPU_FEROCEON && !CPU_ARM926T
360*4882a593Smuzhiyun	default y
361*4882a593Smuzhiyun	help
362*4882a593Smuzhiyun	  This enables the usage of some old Feroceon cores
363*4882a593Smuzhiyun	  for which the CPU ID is equal to the ARM926 ID.
364*4882a593Smuzhiyun	  Relevant for Feroceon-1850 and early Feroceon-2850.
365*4882a593Smuzhiyun
366*4882a593Smuzhiyun# Marvell PJ4
367*4882a593Smuzhiyunconfig CPU_PJ4
368*4882a593Smuzhiyun	bool
369*4882a593Smuzhiyun	select ARM_THUMBEE
370*4882a593Smuzhiyun	select CPU_V7
371*4882a593Smuzhiyun
372*4882a593Smuzhiyunconfig CPU_PJ4B
373*4882a593Smuzhiyun	bool
374*4882a593Smuzhiyun	select CPU_V7
375*4882a593Smuzhiyun
376*4882a593Smuzhiyun# ARMv6
377*4882a593Smuzhiyunconfig CPU_V6
378*4882a593Smuzhiyun	bool
379*4882a593Smuzhiyun	select CPU_32v6
380*4882a593Smuzhiyun	select CPU_ABRT_EV6
381*4882a593Smuzhiyun	select CPU_CACHE_V6
382*4882a593Smuzhiyun	select CPU_CACHE_VIPT
383*4882a593Smuzhiyun	select CPU_COPY_V6 if MMU
384*4882a593Smuzhiyun	select CPU_CP15_MMU
385*4882a593Smuzhiyun	select CPU_HAS_ASID if MMU
386*4882a593Smuzhiyun	select CPU_PABRT_V6
387*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
388*4882a593Smuzhiyun	select CPU_TLB_V6 if MMU
389*4882a593Smuzhiyun
390*4882a593Smuzhiyun# ARMv6k
391*4882a593Smuzhiyunconfig CPU_V6K
392*4882a593Smuzhiyun	bool
393*4882a593Smuzhiyun	select CPU_32v6
394*4882a593Smuzhiyun	select CPU_32v6K
395*4882a593Smuzhiyun	select CPU_ABRT_EV6
396*4882a593Smuzhiyun	select CPU_CACHE_V6
397*4882a593Smuzhiyun	select CPU_CACHE_VIPT
398*4882a593Smuzhiyun	select CPU_COPY_V6 if MMU
399*4882a593Smuzhiyun	select CPU_CP15_MMU
400*4882a593Smuzhiyun	select CPU_HAS_ASID if MMU
401*4882a593Smuzhiyun	select CPU_PABRT_V6
402*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
403*4882a593Smuzhiyun	select CPU_TLB_V6 if MMU
404*4882a593Smuzhiyun
405*4882a593Smuzhiyun# ARMv7
406*4882a593Smuzhiyunconfig CPU_V7
407*4882a593Smuzhiyun	bool
408*4882a593Smuzhiyun	select CPU_32v6K
409*4882a593Smuzhiyun	select CPU_32v7
410*4882a593Smuzhiyun	select CPU_ABRT_EV7
411*4882a593Smuzhiyun	select CPU_CACHE_V7
412*4882a593Smuzhiyun	select CPU_CACHE_VIPT
413*4882a593Smuzhiyun	select CPU_COPY_V6 if MMU
414*4882a593Smuzhiyun	select CPU_CP15_MMU if MMU
415*4882a593Smuzhiyun	select CPU_CP15_MPU if !MMU
416*4882a593Smuzhiyun	select CPU_HAS_ASID if MMU
417*4882a593Smuzhiyun	select CPU_PABRT_V7
418*4882a593Smuzhiyun	select CPU_SPECTRE if MMU
419*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
420*4882a593Smuzhiyun	select CPU_TLB_V7 if MMU
421*4882a593Smuzhiyun
422*4882a593Smuzhiyun# ARMv7M
423*4882a593Smuzhiyunconfig CPU_V7M
424*4882a593Smuzhiyun	bool
425*4882a593Smuzhiyun	select CPU_32v7M
426*4882a593Smuzhiyun	select CPU_ABRT_NOMMU
427*4882a593Smuzhiyun	select CPU_CACHE_V7M
428*4882a593Smuzhiyun	select CPU_CACHE_NOP
429*4882a593Smuzhiyun	select CPU_PABRT_LEGACY
430*4882a593Smuzhiyun	select CPU_THUMBONLY
431*4882a593Smuzhiyun
432*4882a593Smuzhiyunconfig CPU_THUMBONLY
433*4882a593Smuzhiyun	bool
434*4882a593Smuzhiyun	select CPU_THUMB_CAPABLE
435*4882a593Smuzhiyun	# There are no CPUs available with MMU that don't implement an ARM ISA:
436*4882a593Smuzhiyun	depends on !MMU
437*4882a593Smuzhiyun	help
438*4882a593Smuzhiyun	  Select this if your CPU doesn't support the 32 bit ARM instructions.
439*4882a593Smuzhiyun
440*4882a593Smuzhiyunconfig CPU_THUMB_CAPABLE
441*4882a593Smuzhiyun	bool
442*4882a593Smuzhiyun	help
443*4882a593Smuzhiyun	  Select this if your CPU can support Thumb mode.
444*4882a593Smuzhiyun
445*4882a593Smuzhiyun# Figure out what processor architecture version we should be using.
446*4882a593Smuzhiyun# This defines the compiler instruction set which depends on the machine type.
447*4882a593Smuzhiyunconfig CPU_32v3
448*4882a593Smuzhiyun	bool
449*4882a593Smuzhiyun	select CPU_USE_DOMAINS if MMU
450*4882a593Smuzhiyun	select NEED_KUSER_HELPERS
451*4882a593Smuzhiyun	select TLS_REG_EMUL if SMP || !MMU
452*4882a593Smuzhiyun	select CPU_NO_EFFICIENT_FFS
453*4882a593Smuzhiyun
454*4882a593Smuzhiyunconfig CPU_32v4
455*4882a593Smuzhiyun	bool
456*4882a593Smuzhiyun	select CPU_USE_DOMAINS if MMU
457*4882a593Smuzhiyun	select NEED_KUSER_HELPERS
458*4882a593Smuzhiyun	select TLS_REG_EMUL if SMP || !MMU
459*4882a593Smuzhiyun	select CPU_NO_EFFICIENT_FFS
460*4882a593Smuzhiyun
461*4882a593Smuzhiyunconfig CPU_32v4T
462*4882a593Smuzhiyun	bool
463*4882a593Smuzhiyun	select CPU_USE_DOMAINS if MMU
464*4882a593Smuzhiyun	select NEED_KUSER_HELPERS
465*4882a593Smuzhiyun	select TLS_REG_EMUL if SMP || !MMU
466*4882a593Smuzhiyun	select CPU_NO_EFFICIENT_FFS
467*4882a593Smuzhiyun
468*4882a593Smuzhiyunconfig CPU_32v5
469*4882a593Smuzhiyun	bool
470*4882a593Smuzhiyun	select CPU_USE_DOMAINS if MMU
471*4882a593Smuzhiyun	select NEED_KUSER_HELPERS
472*4882a593Smuzhiyun	select TLS_REG_EMUL if SMP || !MMU
473*4882a593Smuzhiyun
474*4882a593Smuzhiyunconfig CPU_32v6
475*4882a593Smuzhiyun	bool
476*4882a593Smuzhiyun	select TLS_REG_EMUL if !CPU_32v6K && !MMU
477*4882a593Smuzhiyun
478*4882a593Smuzhiyunconfig CPU_32v6K
479*4882a593Smuzhiyun	bool
480*4882a593Smuzhiyun
481*4882a593Smuzhiyunconfig CPU_32v7
482*4882a593Smuzhiyun	bool
483*4882a593Smuzhiyun
484*4882a593Smuzhiyunconfig CPU_32v7M
485*4882a593Smuzhiyun	bool
486*4882a593Smuzhiyun
487*4882a593Smuzhiyun# The abort model
488*4882a593Smuzhiyunconfig CPU_ABRT_NOMMU
489*4882a593Smuzhiyun	bool
490*4882a593Smuzhiyun
491*4882a593Smuzhiyunconfig CPU_ABRT_EV4
492*4882a593Smuzhiyun	bool
493*4882a593Smuzhiyun
494*4882a593Smuzhiyunconfig CPU_ABRT_EV4T
495*4882a593Smuzhiyun	bool
496*4882a593Smuzhiyun
497*4882a593Smuzhiyunconfig CPU_ABRT_LV4T
498*4882a593Smuzhiyun	bool
499*4882a593Smuzhiyun
500*4882a593Smuzhiyunconfig CPU_ABRT_EV5T
501*4882a593Smuzhiyun	bool
502*4882a593Smuzhiyun
503*4882a593Smuzhiyunconfig CPU_ABRT_EV5TJ
504*4882a593Smuzhiyun	bool
505*4882a593Smuzhiyun
506*4882a593Smuzhiyunconfig CPU_ABRT_EV6
507*4882a593Smuzhiyun	bool
508*4882a593Smuzhiyun
509*4882a593Smuzhiyunconfig CPU_ABRT_EV7
510*4882a593Smuzhiyun	bool
511*4882a593Smuzhiyun
512*4882a593Smuzhiyunconfig CPU_PABRT_LEGACY
513*4882a593Smuzhiyun	bool
514*4882a593Smuzhiyun
515*4882a593Smuzhiyunconfig CPU_PABRT_V6
516*4882a593Smuzhiyun	bool
517*4882a593Smuzhiyun
518*4882a593Smuzhiyunconfig CPU_PABRT_V7
519*4882a593Smuzhiyun	bool
520*4882a593Smuzhiyun
521*4882a593Smuzhiyun# The cache model
522*4882a593Smuzhiyunconfig CPU_CACHE_V4
523*4882a593Smuzhiyun	bool
524*4882a593Smuzhiyun
525*4882a593Smuzhiyunconfig CPU_CACHE_V4WT
526*4882a593Smuzhiyun	bool
527*4882a593Smuzhiyun
528*4882a593Smuzhiyunconfig CPU_CACHE_V4WB
529*4882a593Smuzhiyun	bool
530*4882a593Smuzhiyun
531*4882a593Smuzhiyunconfig CPU_CACHE_V6
532*4882a593Smuzhiyun	bool
533*4882a593Smuzhiyun
534*4882a593Smuzhiyunconfig CPU_CACHE_V7
535*4882a593Smuzhiyun	bool
536*4882a593Smuzhiyun
537*4882a593Smuzhiyunconfig CPU_CACHE_NOP
538*4882a593Smuzhiyun	bool
539*4882a593Smuzhiyun
540*4882a593Smuzhiyunconfig CPU_CACHE_VIVT
541*4882a593Smuzhiyun	bool
542*4882a593Smuzhiyun
543*4882a593Smuzhiyunconfig CPU_CACHE_VIPT
544*4882a593Smuzhiyun	bool
545*4882a593Smuzhiyun
546*4882a593Smuzhiyunconfig CPU_CACHE_FA
547*4882a593Smuzhiyun	bool
548*4882a593Smuzhiyun
549*4882a593Smuzhiyunconfig CPU_CACHE_V7M
550*4882a593Smuzhiyun	bool
551*4882a593Smuzhiyun
552*4882a593Smuzhiyunif MMU
553*4882a593Smuzhiyun# The copy-page model
554*4882a593Smuzhiyunconfig CPU_COPY_V4WT
555*4882a593Smuzhiyun	bool
556*4882a593Smuzhiyun
557*4882a593Smuzhiyunconfig CPU_COPY_V4WB
558*4882a593Smuzhiyun	bool
559*4882a593Smuzhiyun
560*4882a593Smuzhiyunconfig CPU_COPY_FEROCEON
561*4882a593Smuzhiyun	bool
562*4882a593Smuzhiyun
563*4882a593Smuzhiyunconfig CPU_COPY_FA
564*4882a593Smuzhiyun	bool
565*4882a593Smuzhiyun
566*4882a593Smuzhiyunconfig CPU_COPY_V6
567*4882a593Smuzhiyun	bool
568*4882a593Smuzhiyun
569*4882a593Smuzhiyun# This selects the TLB model
570*4882a593Smuzhiyunconfig CPU_TLB_V4WT
571*4882a593Smuzhiyun	bool
572*4882a593Smuzhiyun	help
573*4882a593Smuzhiyun	  ARM Architecture Version 4 TLB with writethrough cache.
574*4882a593Smuzhiyun
575*4882a593Smuzhiyunconfig CPU_TLB_V4WB
576*4882a593Smuzhiyun	bool
577*4882a593Smuzhiyun	help
578*4882a593Smuzhiyun	  ARM Architecture Version 4 TLB with writeback cache.
579*4882a593Smuzhiyun
580*4882a593Smuzhiyunconfig CPU_TLB_V4WBI
581*4882a593Smuzhiyun	bool
582*4882a593Smuzhiyun	help
583*4882a593Smuzhiyun	  ARM Architecture Version 4 TLB with writeback cache and invalidate
584*4882a593Smuzhiyun	  instruction cache entry.
585*4882a593Smuzhiyun
586*4882a593Smuzhiyunconfig CPU_TLB_FEROCEON
587*4882a593Smuzhiyun	bool
588*4882a593Smuzhiyun	help
589*4882a593Smuzhiyun	  Feroceon TLB (v4wbi with non-outer-cachable page table walks).
590*4882a593Smuzhiyun
591*4882a593Smuzhiyunconfig CPU_TLB_FA
592*4882a593Smuzhiyun	bool
593*4882a593Smuzhiyun	help
594*4882a593Smuzhiyun	  Faraday ARM FA526 architecture, unified TLB with writeback cache
595*4882a593Smuzhiyun	  and invalidate instruction cache entry. Branch target buffer is
596*4882a593Smuzhiyun	  also supported.
597*4882a593Smuzhiyun
598*4882a593Smuzhiyunconfig CPU_TLB_V6
599*4882a593Smuzhiyun	bool
600*4882a593Smuzhiyun
601*4882a593Smuzhiyunconfig CPU_TLB_V7
602*4882a593Smuzhiyun	bool
603*4882a593Smuzhiyun
604*4882a593Smuzhiyunconfig VERIFY_PERMISSION_FAULT
605*4882a593Smuzhiyun	bool
606*4882a593Smuzhiyunendif
607*4882a593Smuzhiyun
608*4882a593Smuzhiyunconfig CPU_HAS_ASID
609*4882a593Smuzhiyun	bool
610*4882a593Smuzhiyun	help
611*4882a593Smuzhiyun	  This indicates whether the CPU has the ASID register; used to
612*4882a593Smuzhiyun	  tag TLB and possibly cache entries.
613*4882a593Smuzhiyun
614*4882a593Smuzhiyunconfig CPU_CP15
615*4882a593Smuzhiyun	bool
616*4882a593Smuzhiyun	help
617*4882a593Smuzhiyun	  Processor has the CP15 register.
618*4882a593Smuzhiyun
619*4882a593Smuzhiyunconfig CPU_CP15_MMU
620*4882a593Smuzhiyun	bool
621*4882a593Smuzhiyun	select CPU_CP15
622*4882a593Smuzhiyun	help
623*4882a593Smuzhiyun	  Processor has the CP15 register, which has MMU related registers.
624*4882a593Smuzhiyun
625*4882a593Smuzhiyunconfig CPU_CP15_MPU
626*4882a593Smuzhiyun	bool
627*4882a593Smuzhiyun	select CPU_CP15
628*4882a593Smuzhiyun	help
629*4882a593Smuzhiyun	  Processor has the CP15 register, which has MPU related registers.
630*4882a593Smuzhiyun
631*4882a593Smuzhiyunconfig CPU_USE_DOMAINS
632*4882a593Smuzhiyun	bool
633*4882a593Smuzhiyun	help
634*4882a593Smuzhiyun	  This option enables or disables the use of domain switching
635*4882a593Smuzhiyun	  via the set_fs() function.
636*4882a593Smuzhiyun
637*4882a593Smuzhiyunconfig CPU_V7M_NUM_IRQ
638*4882a593Smuzhiyun	int "Number of external interrupts connected to the NVIC"
639*4882a593Smuzhiyun	depends on CPU_V7M
640*4882a593Smuzhiyun	default 90 if ARCH_STM32
641*4882a593Smuzhiyun	default 38 if ARCH_EFM32
642*4882a593Smuzhiyun	default 112 if SOC_VF610
643*4882a593Smuzhiyun	default 240
644*4882a593Smuzhiyun	help
645*4882a593Smuzhiyun	  This option indicates the number of interrupts connected to the NVIC.
646*4882a593Smuzhiyun	  The value can be larger than the real number of interrupts supported
647*4882a593Smuzhiyun	  by the system, but must not be lower.
648*4882a593Smuzhiyun	  The default value is 240, corresponding to the maximum number of
649*4882a593Smuzhiyun	  interrupts supported by the NVIC on Cortex-M family.
650*4882a593Smuzhiyun
651*4882a593Smuzhiyun	  If unsure, keep default value.
652*4882a593Smuzhiyun
653*4882a593Smuzhiyun#
654*4882a593Smuzhiyun# CPU supports 36-bit I/O
655*4882a593Smuzhiyun#
656*4882a593Smuzhiyunconfig IO_36
657*4882a593Smuzhiyun	bool
658*4882a593Smuzhiyun
659*4882a593Smuzhiyuncomment "Processor Features"
660*4882a593Smuzhiyun
661*4882a593Smuzhiyunconfig ARM_LPAE
662*4882a593Smuzhiyun	bool "Support for the Large Physical Address Extension"
663*4882a593Smuzhiyun	depends on MMU && CPU_32v7 && !CPU_32v6 && !CPU_32v5 && \
664*4882a593Smuzhiyun		!CPU_32v4 && !CPU_32v3
665*4882a593Smuzhiyun	select PHYS_ADDR_T_64BIT
666*4882a593Smuzhiyun	select SWIOTLB
667*4882a593Smuzhiyun	help
668*4882a593Smuzhiyun	  Say Y if you have an ARMv7 processor supporting the LPAE page
669*4882a593Smuzhiyun	  table format and you would like to access memory beyond the
670*4882a593Smuzhiyun	  4GB limit. The resulting kernel image will not run on
671*4882a593Smuzhiyun	  processors without the LPA extension.
672*4882a593Smuzhiyun
673*4882a593Smuzhiyun	  If unsure, say N.
674*4882a593Smuzhiyun
675*4882a593Smuzhiyunconfig ARM_PV_FIXUP
676*4882a593Smuzhiyun	def_bool y
677*4882a593Smuzhiyun	depends on ARM_LPAE && ARM_PATCH_PHYS_VIRT && ARCH_KEYSTONE
678*4882a593Smuzhiyun
679*4882a593Smuzhiyunconfig ARM_THUMB
680*4882a593Smuzhiyun	bool "Support Thumb user binaries" if !CPU_THUMBONLY && EXPERT
681*4882a593Smuzhiyun	depends on CPU_THUMB_CAPABLE
682*4882a593Smuzhiyun	default y
683*4882a593Smuzhiyun	help
684*4882a593Smuzhiyun	  Say Y if you want to include kernel support for running user space
685*4882a593Smuzhiyun	  Thumb binaries.
686*4882a593Smuzhiyun
687*4882a593Smuzhiyun	  The Thumb instruction set is a compressed form of the standard ARM
688*4882a593Smuzhiyun	  instruction set resulting in smaller binaries at the expense of
689*4882a593Smuzhiyun	  slightly less efficient code.
690*4882a593Smuzhiyun
691*4882a593Smuzhiyun	  If this option is disabled, and you run userspace that switches to
692*4882a593Smuzhiyun	  Thumb mode, signal handling will not work correctly, resulting in
693*4882a593Smuzhiyun	  segmentation faults or illegal instruction aborts.
694*4882a593Smuzhiyun
695*4882a593Smuzhiyun	  If you don't know what this all is, saying Y is a safe choice.
696*4882a593Smuzhiyun
697*4882a593Smuzhiyunconfig ARM_THUMBEE
698*4882a593Smuzhiyun	bool "Enable ThumbEE CPU extension"
699*4882a593Smuzhiyun	depends on CPU_V7
700*4882a593Smuzhiyun	help
701*4882a593Smuzhiyun	  Say Y here if you have a CPU with the ThumbEE extension and code to
702*4882a593Smuzhiyun	  make use of it. Say N for code that can run on CPUs without ThumbEE.
703*4882a593Smuzhiyun
704*4882a593Smuzhiyunconfig ARM_VIRT_EXT
705*4882a593Smuzhiyun	bool
706*4882a593Smuzhiyun	default y if CPU_V7
707*4882a593Smuzhiyun	help
708*4882a593Smuzhiyun	  Enable the kernel to make use of the ARM Virtualization
709*4882a593Smuzhiyun	  Extensions to install hypervisors without run-time firmware
710*4882a593Smuzhiyun	  assistance.
711*4882a593Smuzhiyun
712*4882a593Smuzhiyun	  A compliant bootloader is required in order to make maximum
713*4882a593Smuzhiyun	  use of this feature.  Refer to Documentation/arm/booting.rst for
714*4882a593Smuzhiyun	  details.
715*4882a593Smuzhiyun
716*4882a593Smuzhiyunconfig SWP_EMULATE
717*4882a593Smuzhiyun	bool "Emulate SWP/SWPB instructions" if !SMP
718*4882a593Smuzhiyun	depends on CPU_V7
719*4882a593Smuzhiyun	default y if SMP
720*4882a593Smuzhiyun	select HAVE_PROC_CPU if PROC_FS
721*4882a593Smuzhiyun	help
722*4882a593Smuzhiyun	  ARMv6 architecture deprecates use of the SWP/SWPB instructions.
723*4882a593Smuzhiyun	  ARMv7 multiprocessing extensions introduce the ability to disable
724*4882a593Smuzhiyun	  these instructions, triggering an undefined instruction exception
725*4882a593Smuzhiyun	  when executed. Say Y here to enable software emulation of these
726*4882a593Smuzhiyun	  instructions for userspace (not kernel) using LDREX/STREX.
727*4882a593Smuzhiyun	  Also creates /proc/cpu/swp_emulation for statistics.
728*4882a593Smuzhiyun
729*4882a593Smuzhiyun	  In some older versions of glibc [<=2.8] SWP is used during futex
730*4882a593Smuzhiyun	  trylock() operations with the assumption that the code will not
731*4882a593Smuzhiyun	  be preempted. This invalid assumption may be more likely to fail
732*4882a593Smuzhiyun	  with SWP emulation enabled, leading to deadlock of the user
733*4882a593Smuzhiyun	  application.
734*4882a593Smuzhiyun
735*4882a593Smuzhiyun	  NOTE: when accessing uncached shared regions, LDREX/STREX rely
736*4882a593Smuzhiyun	  on an external transaction monitoring block called a global
737*4882a593Smuzhiyun	  monitor to maintain update atomicity. If your system does not
738*4882a593Smuzhiyun	  implement a global monitor, this option can cause programs that
739*4882a593Smuzhiyun	  perform SWP operations to uncached memory to deadlock.
740*4882a593Smuzhiyun
741*4882a593Smuzhiyun	  If unsure, say Y.
742*4882a593Smuzhiyun
743*4882a593Smuzhiyunconfig CPU_BIG_ENDIAN
744*4882a593Smuzhiyun	bool "Build big-endian kernel"
745*4882a593Smuzhiyun	depends on ARCH_SUPPORTS_BIG_ENDIAN
746*4882a593Smuzhiyun	depends on !LD_IS_LLD
747*4882a593Smuzhiyun	help
748*4882a593Smuzhiyun	  Say Y if you plan on running a kernel in big-endian mode.
749*4882a593Smuzhiyun	  Note that your board must be properly built and your board
750*4882a593Smuzhiyun	  port must properly enable any big-endian related features
751*4882a593Smuzhiyun	  of your chipset/board/processor.
752*4882a593Smuzhiyun
753*4882a593Smuzhiyunconfig CPU_ENDIAN_BE8
754*4882a593Smuzhiyun	bool
755*4882a593Smuzhiyun	depends on CPU_BIG_ENDIAN
756*4882a593Smuzhiyun	default CPU_V6 || CPU_V6K || CPU_V7 || CPU_V7M
757*4882a593Smuzhiyun	help
758*4882a593Smuzhiyun	  Support for the BE-8 (big-endian) mode on ARMv6 and ARMv7 processors.
759*4882a593Smuzhiyun
760*4882a593Smuzhiyunconfig CPU_ENDIAN_BE32
761*4882a593Smuzhiyun	bool
762*4882a593Smuzhiyun	depends on CPU_BIG_ENDIAN
763*4882a593Smuzhiyun	default !CPU_ENDIAN_BE8
764*4882a593Smuzhiyun	help
765*4882a593Smuzhiyun	  Support for the BE-32 (big-endian) mode on pre-ARMv6 processors.
766*4882a593Smuzhiyun
767*4882a593Smuzhiyunconfig CPU_HIGH_VECTOR
768*4882a593Smuzhiyun	depends on !MMU && CPU_CP15 && !CPU_ARM740T
769*4882a593Smuzhiyun	bool "Select the High exception vector"
770*4882a593Smuzhiyun	help
771*4882a593Smuzhiyun	  Say Y here to select high exception vector(0xFFFF0000~).
772*4882a593Smuzhiyun	  The exception vector can vary depending on the platform
773*4882a593Smuzhiyun	  design in nommu mode. If your platform needs to select
774*4882a593Smuzhiyun	  high exception vector, say Y.
775*4882a593Smuzhiyun	  Otherwise or if you are unsure, say N, and the low exception
776*4882a593Smuzhiyun	  vector (0x00000000~) will be used.
777*4882a593Smuzhiyun
778*4882a593Smuzhiyunconfig CPU_ICACHE_DISABLE
779*4882a593Smuzhiyun	bool "Disable I-Cache (I-bit)"
780*4882a593Smuzhiyun	depends on (CPU_CP15 && !(CPU_ARM720T || CPU_ARM740T || CPU_XSCALE || CPU_XSC3)) || CPU_V7M
781*4882a593Smuzhiyun	help
782*4882a593Smuzhiyun	  Say Y here to disable the processor instruction cache. Unless
783*4882a593Smuzhiyun	  you have a reason not to or are unsure, say N.
784*4882a593Smuzhiyun
785*4882a593Smuzhiyunconfig CPU_ICACHE_MISMATCH_WORKAROUND
786*4882a593Smuzhiyun	bool "Workaround for I-Cache line size mismatch between CPU cores"
787*4882a593Smuzhiyun	depends on SMP && CPU_V7
788*4882a593Smuzhiyun	help
789*4882a593Smuzhiyun	  Some big.LITTLE systems have I-Cache line size mismatch between
790*4882a593Smuzhiyun	  LITTLE and big cores.  Say Y here to enable a workaround for
791*4882a593Smuzhiyun	  proper I-Cache support on such systems.  If unsure, say N.
792*4882a593Smuzhiyun
793*4882a593Smuzhiyunconfig CPU_DCACHE_DISABLE
794*4882a593Smuzhiyun	bool "Disable D-Cache (C-bit)"
795*4882a593Smuzhiyun	depends on (CPU_CP15 && !SMP) || CPU_V7M
796*4882a593Smuzhiyun	help
797*4882a593Smuzhiyun	  Say Y here to disable the processor data cache. Unless
798*4882a593Smuzhiyun	  you have a reason not to or are unsure, say N.
799*4882a593Smuzhiyun
800*4882a593Smuzhiyunconfig CPU_DCACHE_SIZE
801*4882a593Smuzhiyun	hex
802*4882a593Smuzhiyun	depends on CPU_ARM740T || CPU_ARM946E
803*4882a593Smuzhiyun	default 0x00001000 if CPU_ARM740T
804*4882a593Smuzhiyun	default 0x00002000 # default size for ARM946E-S
805*4882a593Smuzhiyun	help
806*4882a593Smuzhiyun	  Some cores are synthesizable to have various sized cache. For
807*4882a593Smuzhiyun	  ARM946E-S case, it can vary from 0KB to 1MB.
808*4882a593Smuzhiyun	  To support such cache operations, it is efficient to know the size
809*4882a593Smuzhiyun	  before compile time.
810*4882a593Smuzhiyun	  If your SoC is configured to have a different size, define the value
811*4882a593Smuzhiyun	  here with proper conditions.
812*4882a593Smuzhiyun
813*4882a593Smuzhiyunconfig CPU_DCACHE_WRITETHROUGH
814*4882a593Smuzhiyun	bool "Force write through D-cache"
815*4882a593Smuzhiyun	depends on (CPU_ARM740T || CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM940T || CPU_ARM946E || CPU_ARM1020 || CPU_FA526) && !CPU_DCACHE_DISABLE
816*4882a593Smuzhiyun	default y if CPU_ARM925T
817*4882a593Smuzhiyun	help
818*4882a593Smuzhiyun	  Say Y here to use the data cache in writethrough mode. Unless you
819*4882a593Smuzhiyun	  specifically require this or are unsure, say N.
820*4882a593Smuzhiyun
821*4882a593Smuzhiyunconfig CPU_CACHE_ROUND_ROBIN
822*4882a593Smuzhiyun	bool "Round robin I and D cache replacement algorithm"
823*4882a593Smuzhiyun	depends on (CPU_ARM926T || CPU_ARM946E || CPU_ARM1020) && (!CPU_ICACHE_DISABLE || !CPU_DCACHE_DISABLE)
824*4882a593Smuzhiyun	help
825*4882a593Smuzhiyun	  Say Y here to use the predictable round-robin cache replacement
826*4882a593Smuzhiyun	  policy.  Unless you specifically require this or are unsure, say N.
827*4882a593Smuzhiyun
828*4882a593Smuzhiyunconfig CPU_BPREDICT_DISABLE
829*4882a593Smuzhiyun	bool "Disable branch prediction"
830*4882a593Smuzhiyun	depends on CPU_ARM1020 || CPU_V6 || CPU_V6K || CPU_MOHAWK || CPU_XSC3 || CPU_V7 || CPU_FA526 || CPU_V7M
831*4882a593Smuzhiyun	help
832*4882a593Smuzhiyun	  Say Y here to disable branch prediction.  If unsure, say N.
833*4882a593Smuzhiyun
834*4882a593Smuzhiyunconfig CPU_SPECTRE
835*4882a593Smuzhiyun	bool
836*4882a593Smuzhiyun	select GENERIC_CPU_VULNERABILITIES
837*4882a593Smuzhiyun
838*4882a593Smuzhiyunconfig HARDEN_BRANCH_PREDICTOR
839*4882a593Smuzhiyun	bool "Harden the branch predictor against aliasing attacks" if EXPERT
840*4882a593Smuzhiyun	depends on CPU_SPECTRE
841*4882a593Smuzhiyun	default y
842*4882a593Smuzhiyun	help
843*4882a593Smuzhiyun	   Speculation attacks against some high-performance processors rely
844*4882a593Smuzhiyun	   on being able to manipulate the branch predictor for a victim
845*4882a593Smuzhiyun	   context by executing aliasing branches in the attacker context.
846*4882a593Smuzhiyun	   Such attacks can be partially mitigated against by clearing
847*4882a593Smuzhiyun	   internal branch predictor state and limiting the prediction
848*4882a593Smuzhiyun	   logic in some situations.
849*4882a593Smuzhiyun
850*4882a593Smuzhiyun	   This config option will take CPU-specific actions to harden
851*4882a593Smuzhiyun	   the branch predictor against aliasing attacks and may rely on
852*4882a593Smuzhiyun	   specific instruction sequences or control bits being set by
853*4882a593Smuzhiyun	   the system firmware.
854*4882a593Smuzhiyun
855*4882a593Smuzhiyun	   If unsure, say Y.
856*4882a593Smuzhiyun
857*4882a593Smuzhiyunconfig HARDEN_BRANCH_HISTORY
858*4882a593Smuzhiyun	bool "Harden Spectre style attacks against branch history" if EXPERT
859*4882a593Smuzhiyun	depends on CPU_SPECTRE
860*4882a593Smuzhiyun	default y
861*4882a593Smuzhiyun	help
862*4882a593Smuzhiyun	  Speculation attacks against some high-performance processors can
863*4882a593Smuzhiyun	  make use of branch history to influence future speculation. When
864*4882a593Smuzhiyun	  taking an exception, a sequence of branches overwrites the branch
865*4882a593Smuzhiyun	  history, or branch history is invalidated.
866*4882a593Smuzhiyun
867*4882a593Smuzhiyunconfig TLS_REG_EMUL
868*4882a593Smuzhiyun	bool
869*4882a593Smuzhiyun	select NEED_KUSER_HELPERS
870*4882a593Smuzhiyun	help
871*4882a593Smuzhiyun	  An SMP system using a pre-ARMv6 processor (there are apparently
872*4882a593Smuzhiyun	  a few prototypes like that in existence) and therefore access to
873*4882a593Smuzhiyun	  that required register must be emulated.
874*4882a593Smuzhiyun
875*4882a593Smuzhiyunconfig NEED_KUSER_HELPERS
876*4882a593Smuzhiyun	bool
877*4882a593Smuzhiyun
878*4882a593Smuzhiyunconfig KUSER_HELPERS
879*4882a593Smuzhiyun	bool "Enable kuser helpers in vector page" if !NEED_KUSER_HELPERS
880*4882a593Smuzhiyun	depends on MMU
881*4882a593Smuzhiyun	default y
882*4882a593Smuzhiyun	help
883*4882a593Smuzhiyun	  Warning: disabling this option may break user programs.
884*4882a593Smuzhiyun
885*4882a593Smuzhiyun	  Provide kuser helpers in the vector page.  The kernel provides
886*4882a593Smuzhiyun	  helper code to userspace in read only form at a fixed location
887*4882a593Smuzhiyun	  in the high vector page to allow userspace to be independent of
888*4882a593Smuzhiyun	  the CPU type fitted to the system.  This permits binaries to be
889*4882a593Smuzhiyun	  run on ARMv4 through to ARMv7 without modification.
890*4882a593Smuzhiyun
891*4882a593Smuzhiyun	  See Documentation/arm/kernel_user_helpers.rst for details.
892*4882a593Smuzhiyun
893*4882a593Smuzhiyun	  However, the fixed address nature of these helpers can be used
894*4882a593Smuzhiyun	  by ROP (return orientated programming) authors when creating
895*4882a593Smuzhiyun	  exploits.
896*4882a593Smuzhiyun
897*4882a593Smuzhiyun	  If all of the binaries and libraries which run on your platform
898*4882a593Smuzhiyun	  are built specifically for your platform, and make no use of
899*4882a593Smuzhiyun	  these helpers, then you can turn this option off to hinder
900*4882a593Smuzhiyun	  such exploits. However, in that case, if a binary or library
901*4882a593Smuzhiyun	  relying on those helpers is run, it will receive a SIGILL signal,
902*4882a593Smuzhiyun	  which will terminate the program.
903*4882a593Smuzhiyun
904*4882a593Smuzhiyun	  Say N here only if you are absolutely certain that you do not
905*4882a593Smuzhiyun	  need these helpers; otherwise, the safe option is to say Y.
906*4882a593Smuzhiyun
907*4882a593Smuzhiyunconfig VDSO
908*4882a593Smuzhiyun	bool "Enable VDSO for acceleration of some system calls"
909*4882a593Smuzhiyun	depends on AEABI && MMU && CPU_V7
910*4882a593Smuzhiyun	default y if ARM_ARCH_TIMER
911*4882a593Smuzhiyun	select HAVE_GENERIC_VDSO
912*4882a593Smuzhiyun	select GENERIC_TIME_VSYSCALL
913*4882a593Smuzhiyun	select GENERIC_VDSO_32
914*4882a593Smuzhiyun	select GENERIC_GETTIMEOFDAY
915*4882a593Smuzhiyun	help
916*4882a593Smuzhiyun	  Place in the process address space an ELF shared object
917*4882a593Smuzhiyun	  providing fast implementations of gettimeofday and
918*4882a593Smuzhiyun	  clock_gettime.  Systems that implement the ARM architected
919*4882a593Smuzhiyun	  timer will receive maximum benefit.
920*4882a593Smuzhiyun
921*4882a593Smuzhiyun	  You must have glibc 2.22 or later for programs to seamlessly
922*4882a593Smuzhiyun	  take advantage of this.
923*4882a593Smuzhiyun
924*4882a593Smuzhiyunconfig DMA_CACHE_RWFO
925*4882a593Smuzhiyun	bool "Enable read/write for ownership DMA cache maintenance"
926*4882a593Smuzhiyun	depends on CPU_V6K && SMP
927*4882a593Smuzhiyun	default y
928*4882a593Smuzhiyun	help
929*4882a593Smuzhiyun	  The Snoop Control Unit on ARM11MPCore does not detect the
930*4882a593Smuzhiyun	  cache maintenance operations and the dma_{map,unmap}_area()
931*4882a593Smuzhiyun	  functions may leave stale cache entries on other CPUs. By
932*4882a593Smuzhiyun	  enabling this option, Read or Write For Ownership in the ARMv6
933*4882a593Smuzhiyun	  DMA cache maintenance functions is performed. These LDR/STR
934*4882a593Smuzhiyun	  instructions change the cache line state to shared or modified
935*4882a593Smuzhiyun	  so that the cache operation has the desired effect.
936*4882a593Smuzhiyun
937*4882a593Smuzhiyun	  Note that the workaround is only valid on processors that do
938*4882a593Smuzhiyun	  not perform speculative loads into the D-cache. For such
939*4882a593Smuzhiyun	  processors, if cache maintenance operations are not broadcast
940*4882a593Smuzhiyun	  in hardware, other workarounds are needed (e.g. cache
941*4882a593Smuzhiyun	  maintenance broadcasting in software via FIQ).
942*4882a593Smuzhiyun
943*4882a593Smuzhiyunconfig OUTER_CACHE
944*4882a593Smuzhiyun	bool
945*4882a593Smuzhiyun
946*4882a593Smuzhiyunconfig OUTER_CACHE_SYNC
947*4882a593Smuzhiyun	bool
948*4882a593Smuzhiyun	select ARM_HEAVY_MB
949*4882a593Smuzhiyun	help
950*4882a593Smuzhiyun	  The outer cache has a outer_cache_fns.sync function pointer
951*4882a593Smuzhiyun	  that can be used to drain the write buffer of the outer cache.
952*4882a593Smuzhiyun
953*4882a593Smuzhiyunconfig CACHE_B15_RAC
954*4882a593Smuzhiyun	bool "Enable the Broadcom Brahma-B15 read-ahead cache controller"
955*4882a593Smuzhiyun	depends on ARCH_BRCMSTB
956*4882a593Smuzhiyun	default y
957*4882a593Smuzhiyun	help
958*4882a593Smuzhiyun	  This option enables the Broadcom Brahma-B15 read-ahead cache
959*4882a593Smuzhiyun	  controller. If disabled, the read-ahead cache remains off.
960*4882a593Smuzhiyun
961*4882a593Smuzhiyunconfig CACHE_FEROCEON_L2
962*4882a593Smuzhiyun	bool "Enable the Feroceon L2 cache controller"
963*4882a593Smuzhiyun	depends on ARCH_MV78XX0 || ARCH_MVEBU
964*4882a593Smuzhiyun	default y
965*4882a593Smuzhiyun	select OUTER_CACHE
966*4882a593Smuzhiyun	help
967*4882a593Smuzhiyun	  This option enables the Feroceon L2 cache controller.
968*4882a593Smuzhiyun
969*4882a593Smuzhiyunconfig CACHE_FEROCEON_L2_WRITETHROUGH
970*4882a593Smuzhiyun	bool "Force Feroceon L2 cache write through"
971*4882a593Smuzhiyun	depends on CACHE_FEROCEON_L2
972*4882a593Smuzhiyun	help
973*4882a593Smuzhiyun	  Say Y here to use the Feroceon L2 cache in writethrough mode.
974*4882a593Smuzhiyun	  Unless you specifically require this, say N for writeback mode.
975*4882a593Smuzhiyun
976*4882a593Smuzhiyunconfig MIGHT_HAVE_CACHE_L2X0
977*4882a593Smuzhiyun	bool
978*4882a593Smuzhiyun	help
979*4882a593Smuzhiyun	  This option should be selected by machines which have a L2x0
980*4882a593Smuzhiyun	  or PL310 cache controller, but where its use is optional.
981*4882a593Smuzhiyun
982*4882a593Smuzhiyun	  The only effect of this option is to make CACHE_L2X0 and
983*4882a593Smuzhiyun	  related options available to the user for configuration.
984*4882a593Smuzhiyun
985*4882a593Smuzhiyun	  Boards or SoCs which always require the cache controller
986*4882a593Smuzhiyun	  support to be present should select CACHE_L2X0 directly
987*4882a593Smuzhiyun	  instead of this option, thus preventing the user from
988*4882a593Smuzhiyun	  inadvertently configuring a broken kernel.
989*4882a593Smuzhiyun
990*4882a593Smuzhiyunconfig CACHE_L2X0
991*4882a593Smuzhiyun	bool "Enable the L2x0 outer cache controller" if MIGHT_HAVE_CACHE_L2X0
992*4882a593Smuzhiyun	default MIGHT_HAVE_CACHE_L2X0
993*4882a593Smuzhiyun	select OUTER_CACHE
994*4882a593Smuzhiyun	select OUTER_CACHE_SYNC
995*4882a593Smuzhiyun	help
996*4882a593Smuzhiyun	  This option enables the L2x0 PrimeCell.
997*4882a593Smuzhiyun
998*4882a593Smuzhiyunconfig CACHE_L2X0_PMU
999*4882a593Smuzhiyun	bool "L2x0 performance monitor support" if CACHE_L2X0
1000*4882a593Smuzhiyun	depends on PERF_EVENTS
1001*4882a593Smuzhiyun	help
1002*4882a593Smuzhiyun	  This option enables support for the performance monitoring features
1003*4882a593Smuzhiyun	  of the L220 and PL310 outer cache controllers.
1004*4882a593Smuzhiyun
1005*4882a593Smuzhiyunif CACHE_L2X0
1006*4882a593Smuzhiyun
1007*4882a593Smuzhiyunconfig PL310_ERRATA_588369
1008*4882a593Smuzhiyun	bool "PL310 errata: Clean & Invalidate maintenance operations do not invalidate clean lines"
1009*4882a593Smuzhiyun	help
1010*4882a593Smuzhiyun	   The PL310 L2 cache controller implements three types of Clean &
1011*4882a593Smuzhiyun	   Invalidate maintenance operations: by Physical Address
1012*4882a593Smuzhiyun	   (offset 0x7F0), by Index/Way (0x7F8) and by Way (0x7FC).
1013*4882a593Smuzhiyun	   They are architecturally defined to behave as the execution of a
1014*4882a593Smuzhiyun	   clean operation followed immediately by an invalidate operation,
1015*4882a593Smuzhiyun	   both performing to the same memory location. This functionality
1016*4882a593Smuzhiyun	   is not correctly implemented in PL310 prior to r2p0 (fixed in r2p0)
1017*4882a593Smuzhiyun	   as clean lines are not invalidated as a result of these operations.
1018*4882a593Smuzhiyun
1019*4882a593Smuzhiyunconfig PL310_ERRATA_727915
1020*4882a593Smuzhiyun	bool "PL310 errata: Background Clean & Invalidate by Way operation can cause data corruption"
1021*4882a593Smuzhiyun	help
1022*4882a593Smuzhiyun	  PL310 implements the Clean & Invalidate by Way L2 cache maintenance
1023*4882a593Smuzhiyun	  operation (offset 0x7FC). This operation runs in background so that
1024*4882a593Smuzhiyun	  PL310 can handle normal accesses while it is in progress. Under very
1025*4882a593Smuzhiyun	  rare circumstances, due to this erratum, write data can be lost when
1026*4882a593Smuzhiyun	  PL310 treats a cacheable write transaction during a Clean &
1027*4882a593Smuzhiyun	  Invalidate by Way operation.  Revisions prior to r3p1 are affected by
1028*4882a593Smuzhiyun	  this errata (fixed in r3p1).
1029*4882a593Smuzhiyun
1030*4882a593Smuzhiyunconfig PL310_ERRATA_753970
1031*4882a593Smuzhiyun	bool "PL310 errata: cache sync operation may be faulty"
1032*4882a593Smuzhiyun	help
1033*4882a593Smuzhiyun	  This option enables the workaround for the 753970 PL310 (r3p0) erratum.
1034*4882a593Smuzhiyun
1035*4882a593Smuzhiyun	  Under some condition the effect of cache sync operation on
1036*4882a593Smuzhiyun	  the store buffer still remains when the operation completes.
1037*4882a593Smuzhiyun	  This means that the store buffer is always asked to drain and
1038*4882a593Smuzhiyun	  this prevents it from merging any further writes. The workaround
1039*4882a593Smuzhiyun	  is to replace the normal offset of cache sync operation (0x730)
1040*4882a593Smuzhiyun	  by another offset targeting an unmapped PL310 register 0x740.
1041*4882a593Smuzhiyun	  This has the same effect as the cache sync operation: store buffer
1042*4882a593Smuzhiyun	  drain and waiting for all buffers empty.
1043*4882a593Smuzhiyun
1044*4882a593Smuzhiyunconfig PL310_ERRATA_769419
1045*4882a593Smuzhiyun	bool "PL310 errata: no automatic Store Buffer drain"
1046*4882a593Smuzhiyun	help
1047*4882a593Smuzhiyun	  On revisions of the PL310 prior to r3p2, the Store Buffer does
1048*4882a593Smuzhiyun	  not automatically drain. This can cause normal, non-cacheable
1049*4882a593Smuzhiyun	  writes to be retained when the memory system is idle, leading
1050*4882a593Smuzhiyun	  to suboptimal I/O performance for drivers using coherent DMA.
1051*4882a593Smuzhiyun	  This option adds a write barrier to the cpu_idle loop so that,
1052*4882a593Smuzhiyun	  on systems with an outer cache, the store buffer is drained
1053*4882a593Smuzhiyun	  explicitly.
1054*4882a593Smuzhiyun
1055*4882a593Smuzhiyunendif
1056*4882a593Smuzhiyun
1057*4882a593Smuzhiyunconfig CACHE_TAUROS2
1058*4882a593Smuzhiyun	bool "Enable the Tauros2 L2 cache controller"
1059*4882a593Smuzhiyun	depends on (CPU_MOHAWK || CPU_PJ4)
1060*4882a593Smuzhiyun	default y
1061*4882a593Smuzhiyun	select OUTER_CACHE
1062*4882a593Smuzhiyun	help
1063*4882a593Smuzhiyun	  This option enables the Tauros2 L2 cache controller (as
1064*4882a593Smuzhiyun	  found on PJ1/PJ4).
1065*4882a593Smuzhiyun
1066*4882a593Smuzhiyunconfig CACHE_UNIPHIER
1067*4882a593Smuzhiyun	bool "Enable the UniPhier outer cache controller"
1068*4882a593Smuzhiyun	depends on ARCH_UNIPHIER
1069*4882a593Smuzhiyun	select ARM_L1_CACHE_SHIFT_7
1070*4882a593Smuzhiyun	select OUTER_CACHE
1071*4882a593Smuzhiyun	select OUTER_CACHE_SYNC
1072*4882a593Smuzhiyun	help
1073*4882a593Smuzhiyun	  This option enables the UniPhier outer cache (system cache)
1074*4882a593Smuzhiyun	  controller.
1075*4882a593Smuzhiyun
1076*4882a593Smuzhiyunconfig CACHE_XSC3L2
1077*4882a593Smuzhiyun	bool "Enable the L2 cache on XScale3"
1078*4882a593Smuzhiyun	depends on CPU_XSC3
1079*4882a593Smuzhiyun	default y
1080*4882a593Smuzhiyun	select OUTER_CACHE
1081*4882a593Smuzhiyun	help
1082*4882a593Smuzhiyun	  This option enables the L2 cache on XScale3.
1083*4882a593Smuzhiyun
1084*4882a593Smuzhiyunconfig ARM_L1_CACHE_SHIFT_6
1085*4882a593Smuzhiyun	bool
1086*4882a593Smuzhiyun	default y if CPU_V7
1087*4882a593Smuzhiyun	help
1088*4882a593Smuzhiyun	  Setting ARM L1 cache line size to 64 Bytes.
1089*4882a593Smuzhiyun
1090*4882a593Smuzhiyunconfig ARM_L1_CACHE_SHIFT_7
1091*4882a593Smuzhiyun	bool
1092*4882a593Smuzhiyun	help
1093*4882a593Smuzhiyun	  Setting ARM L1 cache line size to 128 Bytes.
1094*4882a593Smuzhiyun
1095*4882a593Smuzhiyunconfig ARM_L1_CACHE_SHIFT
1096*4882a593Smuzhiyun	int
1097*4882a593Smuzhiyun	default 7 if ARM_L1_CACHE_SHIFT_7
1098*4882a593Smuzhiyun	default 6 if ARM_L1_CACHE_SHIFT_6
1099*4882a593Smuzhiyun	default 5
1100*4882a593Smuzhiyun
1101*4882a593Smuzhiyunconfig ARM_DMA_MEM_BUFFERABLE
1102*4882a593Smuzhiyun	bool "Use non-cacheable memory for DMA" if (CPU_V6 || CPU_V6K || CPU_V7M) && !CPU_V7
1103*4882a593Smuzhiyun	default y if CPU_V6 || CPU_V6K || CPU_V7 || CPU_V7M
1104*4882a593Smuzhiyun	help
1105*4882a593Smuzhiyun	  Historically, the kernel has used strongly ordered mappings to
1106*4882a593Smuzhiyun	  provide DMA coherent memory.  With the advent of ARMv7, mapping
1107*4882a593Smuzhiyun	  memory with differing types results in unpredictable behaviour,
1108*4882a593Smuzhiyun	  so on these CPUs, this option is forced on.
1109*4882a593Smuzhiyun
1110*4882a593Smuzhiyun	  Multiple mappings with differing attributes is also unpredictable
1111*4882a593Smuzhiyun	  on ARMv6 CPUs, but since they do not have aggressive speculative
1112*4882a593Smuzhiyun	  prefetch, no harm appears to occur.
1113*4882a593Smuzhiyun
1114*4882a593Smuzhiyun	  However, drivers may be missing the necessary barriers for ARMv6,
1115*4882a593Smuzhiyun	  and therefore turning this on may result in unpredictable driver
1116*4882a593Smuzhiyun	  behaviour.  Therefore, we offer this as an option.
1117*4882a593Smuzhiyun
1118*4882a593Smuzhiyun	  On some of the beefier ARMv7-M machines (with DMA and write
1119*4882a593Smuzhiyun	  buffers) you likely want this enabled, while those that
1120*4882a593Smuzhiyun	  didn't need it until now also won't need it in the future.
1121*4882a593Smuzhiyun
1122*4882a593Smuzhiyun	  You are recommended say 'Y' here and debug any affected drivers.
1123*4882a593Smuzhiyun
1124*4882a593Smuzhiyunconfig ARM_HEAVY_MB
1125*4882a593Smuzhiyun	bool
1126*4882a593Smuzhiyun
1127*4882a593Smuzhiyunconfig ARCH_SUPPORTS_BIG_ENDIAN
1128*4882a593Smuzhiyun	bool
1129*4882a593Smuzhiyun	help
1130*4882a593Smuzhiyun	  This option specifies the architecture can support big endian
1131*4882a593Smuzhiyun	  operation.
1132*4882a593Smuzhiyun
1133*4882a593Smuzhiyunconfig DEBUG_ALIGN_RODATA
1134*4882a593Smuzhiyun	bool "Make rodata strictly non-executable"
1135*4882a593Smuzhiyun	depends on STRICT_KERNEL_RWX
1136*4882a593Smuzhiyun	default y
1137*4882a593Smuzhiyun	help
1138*4882a593Smuzhiyun	  If this is set, rodata will be made explicitly non-executable. This
1139*4882a593Smuzhiyun	  provides protection on the rare chance that attackers might find and
1140*4882a593Smuzhiyun	  use ROP gadgets that exist in the rodata section. This adds an
1141*4882a593Smuzhiyun	  additional section-aligned split of rodata from kernel text so it
1142*4882a593Smuzhiyun	  can be made explicitly non-executable. This padding may waste memory
1143*4882a593Smuzhiyun	  space to gain the additional protection.
1144