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