162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_cicomment "Processor Type"
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci# Select CPU types depending on the architecture selected.  This selects
562306a36Sopenharmony_ci# which CPUs we support in the kernel image, and the compiler instruction
662306a36Sopenharmony_ci# optimiser behaviour.
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci# ARM7TDMI
962306a36Sopenharmony_ciconfig CPU_ARM7TDMI
1062306a36Sopenharmony_ci	bool
1162306a36Sopenharmony_ci	depends on !MMU
1262306a36Sopenharmony_ci	select CPU_32v4T
1362306a36Sopenharmony_ci	select CPU_ABRT_LV4T
1462306a36Sopenharmony_ci	select CPU_CACHE_V4
1562306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
1662306a36Sopenharmony_ci	help
1762306a36Sopenharmony_ci	  A 32-bit RISC microprocessor based on the ARM7 processor core
1862306a36Sopenharmony_ci	  which has no memory control unit and cache.
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci	  Say Y if you want support for the ARM7TDMI processor.
2162306a36Sopenharmony_ci	  Otherwise, say N.
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci# ARM720T
2462306a36Sopenharmony_ciconfig CPU_ARM720T
2562306a36Sopenharmony_ci	bool
2662306a36Sopenharmony_ci	select CPU_32v4T
2762306a36Sopenharmony_ci	select CPU_ABRT_LV4T
2862306a36Sopenharmony_ci	select CPU_CACHE_V4
2962306a36Sopenharmony_ci	select CPU_CACHE_VIVT
3062306a36Sopenharmony_ci	select CPU_COPY_V4WT if MMU
3162306a36Sopenharmony_ci	select CPU_CP15_MMU
3262306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
3362306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
3462306a36Sopenharmony_ci	select CPU_TLB_V4WT if MMU
3562306a36Sopenharmony_ci	help
3662306a36Sopenharmony_ci	  A 32-bit RISC processor with 8kByte Cache, Write Buffer and
3762306a36Sopenharmony_ci	  MMU built around an ARM7TDMI core.
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci	  Say Y if you want support for the ARM720T processor.
4062306a36Sopenharmony_ci	  Otherwise, say N.
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci# ARM740T
4362306a36Sopenharmony_ciconfig CPU_ARM740T
4462306a36Sopenharmony_ci	bool
4562306a36Sopenharmony_ci	depends on !MMU
4662306a36Sopenharmony_ci	select CPU_32v4T
4762306a36Sopenharmony_ci	select CPU_ABRT_LV4T
4862306a36Sopenharmony_ci	select CPU_CACHE_V4
4962306a36Sopenharmony_ci	select CPU_CP15_MPU
5062306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
5162306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
5262306a36Sopenharmony_ci	help
5362306a36Sopenharmony_ci	  A 32-bit RISC processor with 8KB cache or 4KB variants,
5462306a36Sopenharmony_ci	  write buffer and MPU(Protection Unit) built around
5562306a36Sopenharmony_ci	  an ARM7TDMI core.
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ci	  Say Y if you want support for the ARM740T processor.
5862306a36Sopenharmony_ci	  Otherwise, say N.
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci# ARM9TDMI
6162306a36Sopenharmony_ciconfig CPU_ARM9TDMI
6262306a36Sopenharmony_ci	bool
6362306a36Sopenharmony_ci	depends on !MMU
6462306a36Sopenharmony_ci	select CPU_32v4T
6562306a36Sopenharmony_ci	select CPU_ABRT_NOMMU
6662306a36Sopenharmony_ci	select CPU_CACHE_V4
6762306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
6862306a36Sopenharmony_ci	help
6962306a36Sopenharmony_ci	  A 32-bit RISC microprocessor based on the ARM9 processor core
7062306a36Sopenharmony_ci	  which has no memory control unit and cache.
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci	  Say Y if you want support for the ARM9TDMI processor.
7362306a36Sopenharmony_ci	  Otherwise, say N.
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci# ARM920T
7662306a36Sopenharmony_ciconfig CPU_ARM920T
7762306a36Sopenharmony_ci	bool
7862306a36Sopenharmony_ci	select CPU_32v4T
7962306a36Sopenharmony_ci	select CPU_ABRT_EV4T
8062306a36Sopenharmony_ci	select CPU_CACHE_V4WT
8162306a36Sopenharmony_ci	select CPU_CACHE_VIVT
8262306a36Sopenharmony_ci	select CPU_COPY_V4WB if MMU
8362306a36Sopenharmony_ci	select CPU_CP15_MMU
8462306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
8562306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
8662306a36Sopenharmony_ci	select CPU_TLB_V4WBI if MMU
8762306a36Sopenharmony_ci	help
8862306a36Sopenharmony_ci	  The ARM920T is licensed to be produced by numerous vendors,
8962306a36Sopenharmony_ci	  and is used in the Cirrus EP93xx and the Samsung S3C2410.
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci	  Say Y if you want support for the ARM920T processor.
9262306a36Sopenharmony_ci	  Otherwise, say N.
9362306a36Sopenharmony_ci
9462306a36Sopenharmony_ci# ARM922T
9562306a36Sopenharmony_ciconfig CPU_ARM922T
9662306a36Sopenharmony_ci	bool
9762306a36Sopenharmony_ci	select CPU_32v4T
9862306a36Sopenharmony_ci	select CPU_ABRT_EV4T
9962306a36Sopenharmony_ci	select CPU_CACHE_V4WT
10062306a36Sopenharmony_ci	select CPU_CACHE_VIVT
10162306a36Sopenharmony_ci	select CPU_COPY_V4WB if MMU
10262306a36Sopenharmony_ci	select CPU_CP15_MMU
10362306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
10462306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
10562306a36Sopenharmony_ci	select CPU_TLB_V4WBI if MMU
10662306a36Sopenharmony_ci	help
10762306a36Sopenharmony_ci	  The ARM922T is a version of the ARM920T, but with smaller
10862306a36Sopenharmony_ci	  instruction and data caches. It is used in Altera's
10962306a36Sopenharmony_ci	  Excalibur XA device family and the ARM Integrator.
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_ci	  Say Y if you want support for the ARM922T processor.
11262306a36Sopenharmony_ci	  Otherwise, say N.
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci# ARM925T
11562306a36Sopenharmony_ciconfig CPU_ARM925T
11662306a36Sopenharmony_ci	bool
11762306a36Sopenharmony_ci	select CPU_32v4T
11862306a36Sopenharmony_ci	select CPU_ABRT_EV4T
11962306a36Sopenharmony_ci	select CPU_CACHE_V4WT
12062306a36Sopenharmony_ci	select CPU_CACHE_VIVT
12162306a36Sopenharmony_ci	select CPU_COPY_V4WB if MMU
12262306a36Sopenharmony_ci	select CPU_CP15_MMU
12362306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
12462306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
12562306a36Sopenharmony_ci	select CPU_TLB_V4WBI if MMU
12662306a36Sopenharmony_ci 	help
12762306a36Sopenharmony_ci 	  The ARM925T is a mix between the ARM920T and ARM926T, but with
12862306a36Sopenharmony_ci	  different instruction and data caches. It is used in TI's OMAP
12962306a36Sopenharmony_ci 	  device family.
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ci 	  Say Y if you want support for the ARM925T processor.
13262306a36Sopenharmony_ci 	  Otherwise, say N.
13362306a36Sopenharmony_ci
13462306a36Sopenharmony_ci# ARM926T
13562306a36Sopenharmony_ciconfig CPU_ARM926T
13662306a36Sopenharmony_ci	bool
13762306a36Sopenharmony_ci	select CPU_32v5
13862306a36Sopenharmony_ci	select CPU_ABRT_EV5TJ
13962306a36Sopenharmony_ci	select CPU_CACHE_VIVT
14062306a36Sopenharmony_ci	select CPU_COPY_V4WB if MMU
14162306a36Sopenharmony_ci	select CPU_CP15_MMU
14262306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
14362306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
14462306a36Sopenharmony_ci	select CPU_TLB_V4WBI if MMU
14562306a36Sopenharmony_ci	help
14662306a36Sopenharmony_ci	  This is a variant of the ARM920.  It has slightly different
14762306a36Sopenharmony_ci	  instruction sequences for cache and TLB operations.  Curiously,
14862306a36Sopenharmony_ci	  there is no documentation on it at the ARM corporate website.
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_ci	  Say Y if you want support for the ARM926T processor.
15162306a36Sopenharmony_ci	  Otherwise, say N.
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_ci# FA526
15462306a36Sopenharmony_ciconfig CPU_FA526
15562306a36Sopenharmony_ci	bool
15662306a36Sopenharmony_ci	select CPU_32v4
15762306a36Sopenharmony_ci	select CPU_ABRT_EV4
15862306a36Sopenharmony_ci	select CPU_CACHE_FA
15962306a36Sopenharmony_ci	select CPU_CACHE_VIVT
16062306a36Sopenharmony_ci	select CPU_COPY_FA if MMU
16162306a36Sopenharmony_ci	select CPU_CP15_MMU
16262306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
16362306a36Sopenharmony_ci	select CPU_TLB_FA if MMU
16462306a36Sopenharmony_ci	help
16562306a36Sopenharmony_ci	  The FA526 is a version of the ARMv4 compatible processor with
16662306a36Sopenharmony_ci	  Branch Target Buffer, Unified TLB and cache line size 16.
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_ci	  Say Y if you want support for the FA526 processor.
16962306a36Sopenharmony_ci	  Otherwise, say N.
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci# ARM940T
17262306a36Sopenharmony_ciconfig CPU_ARM940T
17362306a36Sopenharmony_ci	bool
17462306a36Sopenharmony_ci	depends on !MMU
17562306a36Sopenharmony_ci	select CPU_32v4T
17662306a36Sopenharmony_ci	select CPU_ABRT_NOMMU
17762306a36Sopenharmony_ci	select CPU_CACHE_VIVT
17862306a36Sopenharmony_ci	select CPU_CP15_MPU
17962306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
18062306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
18162306a36Sopenharmony_ci	help
18262306a36Sopenharmony_ci	  ARM940T is a member of the ARM9TDMI family of general-
18362306a36Sopenharmony_ci	  purpose microprocessors with MPU and separate 4KB
18462306a36Sopenharmony_ci	  instruction and 4KB data cases, each with a 4-word line
18562306a36Sopenharmony_ci	  length.
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_ci	  Say Y if you want support for the ARM940T processor.
18862306a36Sopenharmony_ci	  Otherwise, say N.
18962306a36Sopenharmony_ci
19062306a36Sopenharmony_ci# ARM946E-S
19162306a36Sopenharmony_ciconfig CPU_ARM946E
19262306a36Sopenharmony_ci	bool
19362306a36Sopenharmony_ci	depends on !MMU
19462306a36Sopenharmony_ci	select CPU_32v5
19562306a36Sopenharmony_ci	select CPU_ABRT_NOMMU
19662306a36Sopenharmony_ci	select CPU_CACHE_VIVT
19762306a36Sopenharmony_ci	select CPU_CP15_MPU
19862306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
19962306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
20062306a36Sopenharmony_ci	help
20162306a36Sopenharmony_ci	  ARM946E-S is a member of the ARM9E-S family of high-
20262306a36Sopenharmony_ci	  performance, 32-bit system-on-chip processor solutions.
20362306a36Sopenharmony_ci	  The TCM and ARMv5TE 32-bit instruction set is supported.
20462306a36Sopenharmony_ci
20562306a36Sopenharmony_ci	  Say Y if you want support for the ARM946E-S processor.
20662306a36Sopenharmony_ci	  Otherwise, say N.
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ci# ARM1020 - needs validating
20962306a36Sopenharmony_ciconfig CPU_ARM1020
21062306a36Sopenharmony_ci	bool
21162306a36Sopenharmony_ci	select CPU_32v5
21262306a36Sopenharmony_ci	select CPU_ABRT_EV4T
21362306a36Sopenharmony_ci	select CPU_CACHE_V4WT
21462306a36Sopenharmony_ci	select CPU_CACHE_VIVT
21562306a36Sopenharmony_ci	select CPU_COPY_V4WB if MMU
21662306a36Sopenharmony_ci	select CPU_CP15_MMU
21762306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
21862306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
21962306a36Sopenharmony_ci	select CPU_TLB_V4WBI if MMU
22062306a36Sopenharmony_ci	help
22162306a36Sopenharmony_ci	  The ARM1020 is the 32K cached version of the ARM10 processor,
22262306a36Sopenharmony_ci	  with an addition of a floating-point unit.
22362306a36Sopenharmony_ci
22462306a36Sopenharmony_ci	  Say Y if you want support for the ARM1020 processor.
22562306a36Sopenharmony_ci	  Otherwise, say N.
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_ci# ARM1020E - needs validating
22862306a36Sopenharmony_ciconfig CPU_ARM1020E
22962306a36Sopenharmony_ci	bool
23062306a36Sopenharmony_ci	depends on n
23162306a36Sopenharmony_ci	select CPU_32v5
23262306a36Sopenharmony_ci	select CPU_ABRT_EV4T
23362306a36Sopenharmony_ci	select CPU_CACHE_V4WT
23462306a36Sopenharmony_ci	select CPU_CACHE_VIVT
23562306a36Sopenharmony_ci	select CPU_COPY_V4WB if MMU
23662306a36Sopenharmony_ci	select CPU_CP15_MMU
23762306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
23862306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
23962306a36Sopenharmony_ci	select CPU_TLB_V4WBI if MMU
24062306a36Sopenharmony_ci
24162306a36Sopenharmony_ci# ARM1022E
24262306a36Sopenharmony_ciconfig CPU_ARM1022
24362306a36Sopenharmony_ci	bool
24462306a36Sopenharmony_ci	select CPU_32v5
24562306a36Sopenharmony_ci	select CPU_ABRT_EV4T
24662306a36Sopenharmony_ci	select CPU_CACHE_VIVT
24762306a36Sopenharmony_ci	select CPU_COPY_V4WB if MMU # can probably do better
24862306a36Sopenharmony_ci	select CPU_CP15_MMU
24962306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
25062306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
25162306a36Sopenharmony_ci	select CPU_TLB_V4WBI if MMU
25262306a36Sopenharmony_ci	help
25362306a36Sopenharmony_ci	  The ARM1022E is an implementation of the ARMv5TE architecture
25462306a36Sopenharmony_ci	  based upon the ARM10 integer core with a 16KiB L1 Harvard cache,
25562306a36Sopenharmony_ci	  embedded trace macrocell, and a floating-point unit.
25662306a36Sopenharmony_ci
25762306a36Sopenharmony_ci	  Say Y if you want support for the ARM1022E processor.
25862306a36Sopenharmony_ci	  Otherwise, say N.
25962306a36Sopenharmony_ci
26062306a36Sopenharmony_ci# ARM1026EJ-S
26162306a36Sopenharmony_ciconfig CPU_ARM1026
26262306a36Sopenharmony_ci	bool
26362306a36Sopenharmony_ci	select CPU_32v5
26462306a36Sopenharmony_ci	select CPU_ABRT_EV5T # But need Jazelle, but EV5TJ ignores bit 10
26562306a36Sopenharmony_ci	select CPU_CACHE_VIVT
26662306a36Sopenharmony_ci	select CPU_COPY_V4WB if MMU # can probably do better
26762306a36Sopenharmony_ci	select CPU_CP15_MMU
26862306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
26962306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
27062306a36Sopenharmony_ci	select CPU_TLB_V4WBI if MMU
27162306a36Sopenharmony_ci	help
27262306a36Sopenharmony_ci	  The ARM1026EJ-S is an implementation of the ARMv5TEJ architecture
27362306a36Sopenharmony_ci	  based upon the ARM10 integer core.
27462306a36Sopenharmony_ci
27562306a36Sopenharmony_ci	  Say Y if you want support for the ARM1026EJ-S processor.
27662306a36Sopenharmony_ci	  Otherwise, say N.
27762306a36Sopenharmony_ci
27862306a36Sopenharmony_ci# SA110
27962306a36Sopenharmony_ciconfig CPU_SA110
28062306a36Sopenharmony_ci	bool
28162306a36Sopenharmony_ci	select CPU_32v3 if ARCH_RPC
28262306a36Sopenharmony_ci	select CPU_32v4 if !ARCH_RPC
28362306a36Sopenharmony_ci	select CPU_ABRT_EV4
28462306a36Sopenharmony_ci	select CPU_CACHE_V4WB
28562306a36Sopenharmony_ci	select CPU_CACHE_VIVT
28662306a36Sopenharmony_ci	select CPU_COPY_V4WB if MMU
28762306a36Sopenharmony_ci	select CPU_CP15_MMU
28862306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
28962306a36Sopenharmony_ci	select CPU_TLB_V4WB if MMU
29062306a36Sopenharmony_ci	help
29162306a36Sopenharmony_ci	  The Intel StrongARM(R) SA-110 is a 32-bit microprocessor and
29262306a36Sopenharmony_ci	  is available at five speeds ranging from 100 MHz to 233 MHz.
29362306a36Sopenharmony_ci	  More information is available at
29462306a36Sopenharmony_ci	  <http://developer.intel.com/design/strong/sa110.htm>.
29562306a36Sopenharmony_ci
29662306a36Sopenharmony_ci	  Say Y if you want support for the SA-110 processor.
29762306a36Sopenharmony_ci	  Otherwise, say N.
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ci# SA1100
30062306a36Sopenharmony_ciconfig CPU_SA1100
30162306a36Sopenharmony_ci	bool
30262306a36Sopenharmony_ci	select CPU_32v4
30362306a36Sopenharmony_ci	select CPU_ABRT_EV4
30462306a36Sopenharmony_ci	select CPU_CACHE_V4WB
30562306a36Sopenharmony_ci	select CPU_CACHE_VIVT
30662306a36Sopenharmony_ci	select CPU_CP15_MMU
30762306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
30862306a36Sopenharmony_ci	select CPU_TLB_V4WB if MMU
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ci# XScale
31162306a36Sopenharmony_ciconfig CPU_XSCALE
31262306a36Sopenharmony_ci	bool
31362306a36Sopenharmony_ci	select CPU_32v5
31462306a36Sopenharmony_ci	select CPU_ABRT_EV5T
31562306a36Sopenharmony_ci	select CPU_CACHE_VIVT
31662306a36Sopenharmony_ci	select CPU_CP15_MMU
31762306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
31862306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
31962306a36Sopenharmony_ci	select CPU_TLB_V4WBI if MMU
32062306a36Sopenharmony_ci
32162306a36Sopenharmony_ci# XScale Core Version 3
32262306a36Sopenharmony_ciconfig CPU_XSC3
32362306a36Sopenharmony_ci	bool
32462306a36Sopenharmony_ci	select CPU_32v5
32562306a36Sopenharmony_ci	select CPU_ABRT_EV5T
32662306a36Sopenharmony_ci	select CPU_CACHE_VIVT
32762306a36Sopenharmony_ci	select CPU_CP15_MMU
32862306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
32962306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
33062306a36Sopenharmony_ci	select CPU_TLB_V4WBI if MMU
33162306a36Sopenharmony_ci	select IO_36
33262306a36Sopenharmony_ci
33362306a36Sopenharmony_ci# Marvell PJ1 (Mohawk)
33462306a36Sopenharmony_ciconfig CPU_MOHAWK
33562306a36Sopenharmony_ci	bool
33662306a36Sopenharmony_ci	select CPU_32v5
33762306a36Sopenharmony_ci	select CPU_ABRT_EV5T
33862306a36Sopenharmony_ci	select CPU_CACHE_VIVT
33962306a36Sopenharmony_ci	select CPU_COPY_V4WB if MMU
34062306a36Sopenharmony_ci	select CPU_CP15_MMU
34162306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
34262306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
34362306a36Sopenharmony_ci	select CPU_TLB_V4WBI if MMU
34462306a36Sopenharmony_ci
34562306a36Sopenharmony_ci# Feroceon
34662306a36Sopenharmony_ciconfig CPU_FEROCEON
34762306a36Sopenharmony_ci	bool
34862306a36Sopenharmony_ci	select CPU_32v5
34962306a36Sopenharmony_ci	select CPU_ABRT_EV5T
35062306a36Sopenharmony_ci	select CPU_CACHE_VIVT
35162306a36Sopenharmony_ci	select CPU_COPY_FEROCEON if MMU
35262306a36Sopenharmony_ci	select CPU_CP15_MMU
35362306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
35462306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
35562306a36Sopenharmony_ci	select CPU_TLB_FEROCEON if MMU
35662306a36Sopenharmony_ci
35762306a36Sopenharmony_ciconfig CPU_FEROCEON_OLD_ID
35862306a36Sopenharmony_ci	bool "Accept early Feroceon cores with an ARM926 ID"
35962306a36Sopenharmony_ci	depends on CPU_FEROCEON && !CPU_ARM926T
36062306a36Sopenharmony_ci	default y
36162306a36Sopenharmony_ci	help
36262306a36Sopenharmony_ci	  This enables the usage of some old Feroceon cores
36362306a36Sopenharmony_ci	  for which the CPU ID is equal to the ARM926 ID.
36462306a36Sopenharmony_ci	  Relevant for Feroceon-1850 and early Feroceon-2850.
36562306a36Sopenharmony_ci
36662306a36Sopenharmony_ci# Marvell PJ4
36762306a36Sopenharmony_ciconfig CPU_PJ4
36862306a36Sopenharmony_ci	bool
36962306a36Sopenharmony_ci	select ARM_THUMBEE
37062306a36Sopenharmony_ci	select CPU_V7
37162306a36Sopenharmony_ci
37262306a36Sopenharmony_ciconfig CPU_PJ4B
37362306a36Sopenharmony_ci	bool
37462306a36Sopenharmony_ci	select CPU_V7
37562306a36Sopenharmony_ci
37662306a36Sopenharmony_ci# ARMv6
37762306a36Sopenharmony_ciconfig CPU_V6
37862306a36Sopenharmony_ci	bool
37962306a36Sopenharmony_ci	select CPU_32v6
38062306a36Sopenharmony_ci	select CPU_ABRT_EV6
38162306a36Sopenharmony_ci	select CPU_CACHE_V6
38262306a36Sopenharmony_ci	select CPU_CACHE_VIPT
38362306a36Sopenharmony_ci	select CPU_COPY_V6 if MMU
38462306a36Sopenharmony_ci	select CPU_CP15_MMU
38562306a36Sopenharmony_ci	select CPU_HAS_ASID if MMU
38662306a36Sopenharmony_ci	select CPU_PABRT_V6
38762306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
38862306a36Sopenharmony_ci	select CPU_TLB_V6 if MMU
38962306a36Sopenharmony_ci	select SMP_ON_UP if SMP
39062306a36Sopenharmony_ci
39162306a36Sopenharmony_ci# ARMv6k
39262306a36Sopenharmony_ciconfig CPU_V6K
39362306a36Sopenharmony_ci	bool
39462306a36Sopenharmony_ci	select CPU_32v6
39562306a36Sopenharmony_ci	select CPU_32v6K
39662306a36Sopenharmony_ci	select CPU_ABRT_EV6
39762306a36Sopenharmony_ci	select CPU_CACHE_V6
39862306a36Sopenharmony_ci	select CPU_CACHE_VIPT
39962306a36Sopenharmony_ci	select CPU_COPY_V6 if MMU
40062306a36Sopenharmony_ci	select CPU_CP15_MMU
40162306a36Sopenharmony_ci	select CPU_HAS_ASID if MMU
40262306a36Sopenharmony_ci	select CPU_PABRT_V6
40362306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
40462306a36Sopenharmony_ci	select CPU_TLB_V6 if MMU
40562306a36Sopenharmony_ci
40662306a36Sopenharmony_ci# ARMv7 and ARMv8 architectures
40762306a36Sopenharmony_ciconfig CPU_V7
40862306a36Sopenharmony_ci	bool
40962306a36Sopenharmony_ci	select CPU_32v6K
41062306a36Sopenharmony_ci	select CPU_32v7
41162306a36Sopenharmony_ci	select CPU_ABRT_EV7
41262306a36Sopenharmony_ci	select CPU_CACHE_V7
41362306a36Sopenharmony_ci	select CPU_CACHE_VIPT
41462306a36Sopenharmony_ci	select CPU_COPY_V6 if MMU
41562306a36Sopenharmony_ci	select CPU_CP15_MMU if MMU
41662306a36Sopenharmony_ci	select CPU_CP15_MPU if !MMU
41762306a36Sopenharmony_ci	select CPU_HAS_ASID if MMU
41862306a36Sopenharmony_ci	select CPU_PABRT_V7
41962306a36Sopenharmony_ci	select CPU_SPECTRE if MMU
42062306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
42162306a36Sopenharmony_ci	select CPU_TLB_V7 if MMU
42262306a36Sopenharmony_ci
42362306a36Sopenharmony_ci# ARMv7M
42462306a36Sopenharmony_ciconfig CPU_V7M
42562306a36Sopenharmony_ci	bool
42662306a36Sopenharmony_ci	select CPU_32v7M
42762306a36Sopenharmony_ci	select CPU_ABRT_NOMMU
42862306a36Sopenharmony_ci	select CPU_CACHE_V7M
42962306a36Sopenharmony_ci	select CPU_CACHE_NOP
43062306a36Sopenharmony_ci	select CPU_PABRT_LEGACY
43162306a36Sopenharmony_ci	select CPU_THUMBONLY
43262306a36Sopenharmony_ci
43362306a36Sopenharmony_ciconfig CPU_THUMBONLY
43462306a36Sopenharmony_ci	bool
43562306a36Sopenharmony_ci	select CPU_THUMB_CAPABLE
43662306a36Sopenharmony_ci	# There are no CPUs available with MMU that don't implement an ARM ISA:
43762306a36Sopenharmony_ci	depends on !MMU
43862306a36Sopenharmony_ci	help
43962306a36Sopenharmony_ci	  Select this if your CPU doesn't support the 32 bit ARM instructions.
44062306a36Sopenharmony_ci
44162306a36Sopenharmony_ciconfig CPU_THUMB_CAPABLE
44262306a36Sopenharmony_ci	bool
44362306a36Sopenharmony_ci	help
44462306a36Sopenharmony_ci	  Select this if your CPU can support Thumb mode.
44562306a36Sopenharmony_ci
44662306a36Sopenharmony_ci# Figure out what processor architecture version we should be using.
44762306a36Sopenharmony_ci# This defines the compiler instruction set which depends on the machine type.
44862306a36Sopenharmony_ciconfig CPU_32v3
44962306a36Sopenharmony_ci	bool
45062306a36Sopenharmony_ci	select CPU_USE_DOMAINS if MMU
45162306a36Sopenharmony_ci	select NEED_KUSER_HELPERS
45262306a36Sopenharmony_ci	select TLS_REG_EMUL if SMP || !MMU
45362306a36Sopenharmony_ci	select CPU_NO_EFFICIENT_FFS
45462306a36Sopenharmony_ci
45562306a36Sopenharmony_ciconfig CPU_32v4
45662306a36Sopenharmony_ci	bool
45762306a36Sopenharmony_ci	select CPU_USE_DOMAINS if MMU
45862306a36Sopenharmony_ci	select NEED_KUSER_HELPERS
45962306a36Sopenharmony_ci	select TLS_REG_EMUL if SMP || !MMU
46062306a36Sopenharmony_ci	select CPU_NO_EFFICIENT_FFS
46162306a36Sopenharmony_ci
46262306a36Sopenharmony_ciconfig CPU_32v4T
46362306a36Sopenharmony_ci	bool
46462306a36Sopenharmony_ci	select CPU_USE_DOMAINS if MMU
46562306a36Sopenharmony_ci	select NEED_KUSER_HELPERS
46662306a36Sopenharmony_ci	select TLS_REG_EMUL if SMP || !MMU
46762306a36Sopenharmony_ci	select CPU_NO_EFFICIENT_FFS
46862306a36Sopenharmony_ci
46962306a36Sopenharmony_ciconfig CPU_32v5
47062306a36Sopenharmony_ci	bool
47162306a36Sopenharmony_ci	select CPU_USE_DOMAINS if MMU
47262306a36Sopenharmony_ci	select NEED_KUSER_HELPERS
47362306a36Sopenharmony_ci	select TLS_REG_EMUL if SMP || !MMU
47462306a36Sopenharmony_ci
47562306a36Sopenharmony_ciconfig CPU_32v6
47662306a36Sopenharmony_ci	bool
47762306a36Sopenharmony_ci	select TLS_REG_EMUL if !CPU_32v6K && !MMU
47862306a36Sopenharmony_ci
47962306a36Sopenharmony_ciconfig CPU_32v6K
48062306a36Sopenharmony_ci	bool
48162306a36Sopenharmony_ci
48262306a36Sopenharmony_ciconfig CPU_32v7
48362306a36Sopenharmony_ci	bool
48462306a36Sopenharmony_ci
48562306a36Sopenharmony_ciconfig CPU_32v7M
48662306a36Sopenharmony_ci	bool
48762306a36Sopenharmony_ci
48862306a36Sopenharmony_ci# The abort model
48962306a36Sopenharmony_ciconfig CPU_ABRT_NOMMU
49062306a36Sopenharmony_ci	bool
49162306a36Sopenharmony_ci
49262306a36Sopenharmony_ciconfig CPU_ABRT_EV4
49362306a36Sopenharmony_ci	bool
49462306a36Sopenharmony_ci
49562306a36Sopenharmony_ciconfig CPU_ABRT_EV4T
49662306a36Sopenharmony_ci	bool
49762306a36Sopenharmony_ci
49862306a36Sopenharmony_ciconfig CPU_ABRT_LV4T
49962306a36Sopenharmony_ci	bool
50062306a36Sopenharmony_ci
50162306a36Sopenharmony_ciconfig CPU_ABRT_EV5T
50262306a36Sopenharmony_ci	bool
50362306a36Sopenharmony_ci
50462306a36Sopenharmony_ciconfig CPU_ABRT_EV5TJ
50562306a36Sopenharmony_ci	bool
50662306a36Sopenharmony_ci
50762306a36Sopenharmony_ciconfig CPU_ABRT_EV6
50862306a36Sopenharmony_ci	bool
50962306a36Sopenharmony_ci
51062306a36Sopenharmony_ciconfig CPU_ABRT_EV7
51162306a36Sopenharmony_ci	bool
51262306a36Sopenharmony_ci
51362306a36Sopenharmony_ciconfig CPU_PABRT_LEGACY
51462306a36Sopenharmony_ci	bool
51562306a36Sopenharmony_ci
51662306a36Sopenharmony_ciconfig CPU_PABRT_V6
51762306a36Sopenharmony_ci	bool
51862306a36Sopenharmony_ci
51962306a36Sopenharmony_ciconfig CPU_PABRT_V7
52062306a36Sopenharmony_ci	bool
52162306a36Sopenharmony_ci
52262306a36Sopenharmony_ci# The cache model
52362306a36Sopenharmony_ciconfig CPU_CACHE_V4
52462306a36Sopenharmony_ci	bool
52562306a36Sopenharmony_ci
52662306a36Sopenharmony_ciconfig CPU_CACHE_V4WT
52762306a36Sopenharmony_ci	bool
52862306a36Sopenharmony_ci
52962306a36Sopenharmony_ciconfig CPU_CACHE_V4WB
53062306a36Sopenharmony_ci	bool
53162306a36Sopenharmony_ci
53262306a36Sopenharmony_ciconfig CPU_CACHE_V6
53362306a36Sopenharmony_ci	bool
53462306a36Sopenharmony_ci
53562306a36Sopenharmony_ciconfig CPU_CACHE_V7
53662306a36Sopenharmony_ci	bool
53762306a36Sopenharmony_ci
53862306a36Sopenharmony_ciconfig CPU_CACHE_NOP
53962306a36Sopenharmony_ci	bool
54062306a36Sopenharmony_ci
54162306a36Sopenharmony_ciconfig CPU_CACHE_VIVT
54262306a36Sopenharmony_ci	bool
54362306a36Sopenharmony_ci
54462306a36Sopenharmony_ciconfig CPU_CACHE_VIPT
54562306a36Sopenharmony_ci	bool
54662306a36Sopenharmony_ci
54762306a36Sopenharmony_ciconfig CPU_CACHE_FA
54862306a36Sopenharmony_ci	bool
54962306a36Sopenharmony_ci
55062306a36Sopenharmony_ciconfig CPU_CACHE_V7M
55162306a36Sopenharmony_ci	bool
55262306a36Sopenharmony_ci
55362306a36Sopenharmony_ciif MMU
55462306a36Sopenharmony_ci# The copy-page model
55562306a36Sopenharmony_ciconfig CPU_COPY_V4WT
55662306a36Sopenharmony_ci	bool
55762306a36Sopenharmony_ci
55862306a36Sopenharmony_ciconfig CPU_COPY_V4WB
55962306a36Sopenharmony_ci	bool
56062306a36Sopenharmony_ci
56162306a36Sopenharmony_ciconfig CPU_COPY_FEROCEON
56262306a36Sopenharmony_ci	bool
56362306a36Sopenharmony_ci
56462306a36Sopenharmony_ciconfig CPU_COPY_FA
56562306a36Sopenharmony_ci	bool
56662306a36Sopenharmony_ci
56762306a36Sopenharmony_ciconfig CPU_COPY_V6
56862306a36Sopenharmony_ci	bool
56962306a36Sopenharmony_ci
57062306a36Sopenharmony_ci# This selects the TLB model
57162306a36Sopenharmony_ciconfig CPU_TLB_V4WT
57262306a36Sopenharmony_ci	bool
57362306a36Sopenharmony_ci	help
57462306a36Sopenharmony_ci	  ARM Architecture Version 4 TLB with writethrough cache.
57562306a36Sopenharmony_ci
57662306a36Sopenharmony_ciconfig CPU_TLB_V4WB
57762306a36Sopenharmony_ci	bool
57862306a36Sopenharmony_ci	help
57962306a36Sopenharmony_ci	  ARM Architecture Version 4 TLB with writeback cache.
58062306a36Sopenharmony_ci
58162306a36Sopenharmony_ciconfig CPU_TLB_V4WBI
58262306a36Sopenharmony_ci	bool
58362306a36Sopenharmony_ci	help
58462306a36Sopenharmony_ci	  ARM Architecture Version 4 TLB with writeback cache and invalidate
58562306a36Sopenharmony_ci	  instruction cache entry.
58662306a36Sopenharmony_ci
58762306a36Sopenharmony_ciconfig CPU_TLB_FEROCEON
58862306a36Sopenharmony_ci	bool
58962306a36Sopenharmony_ci	help
59062306a36Sopenharmony_ci	  Feroceon TLB (v4wbi with non-outer-cachable page table walks).
59162306a36Sopenharmony_ci
59262306a36Sopenharmony_ciconfig CPU_TLB_FA
59362306a36Sopenharmony_ci	bool
59462306a36Sopenharmony_ci	help
59562306a36Sopenharmony_ci	  Faraday ARM FA526 architecture, unified TLB with writeback cache
59662306a36Sopenharmony_ci	  and invalidate instruction cache entry. Branch target buffer is
59762306a36Sopenharmony_ci	  also supported.
59862306a36Sopenharmony_ci
59962306a36Sopenharmony_ciconfig CPU_TLB_V6
60062306a36Sopenharmony_ci	bool
60162306a36Sopenharmony_ci
60262306a36Sopenharmony_ciconfig CPU_TLB_V7
60362306a36Sopenharmony_ci	bool
60462306a36Sopenharmony_ci
60562306a36Sopenharmony_ciendif
60662306a36Sopenharmony_ci
60762306a36Sopenharmony_ciconfig CPU_HAS_ASID
60862306a36Sopenharmony_ci	bool
60962306a36Sopenharmony_ci	help
61062306a36Sopenharmony_ci	  This indicates whether the CPU has the ASID register; used to
61162306a36Sopenharmony_ci	  tag TLB and possibly cache entries.
61262306a36Sopenharmony_ci
61362306a36Sopenharmony_ciconfig CPU_CP15
61462306a36Sopenharmony_ci	bool
61562306a36Sopenharmony_ci	help
61662306a36Sopenharmony_ci	  Processor has the CP15 register.
61762306a36Sopenharmony_ci
61862306a36Sopenharmony_ciconfig CPU_CP15_MMU
61962306a36Sopenharmony_ci	bool
62062306a36Sopenharmony_ci	select CPU_CP15
62162306a36Sopenharmony_ci	help
62262306a36Sopenharmony_ci	  Processor has the CP15 register, which has MMU related registers.
62362306a36Sopenharmony_ci
62462306a36Sopenharmony_ciconfig CPU_CP15_MPU
62562306a36Sopenharmony_ci	bool
62662306a36Sopenharmony_ci	select CPU_CP15
62762306a36Sopenharmony_ci	help
62862306a36Sopenharmony_ci	  Processor has the CP15 register, which has MPU related registers.
62962306a36Sopenharmony_ci
63062306a36Sopenharmony_ciconfig CPU_USE_DOMAINS
63162306a36Sopenharmony_ci	bool
63262306a36Sopenharmony_ci	help
63362306a36Sopenharmony_ci	  This option enables or disables the use of domain switching
63462306a36Sopenharmony_ci	  using the DACR (domain access control register) to protect memory
63562306a36Sopenharmony_ci	  domains from each other. In Linux we use three domains: kernel, user
63662306a36Sopenharmony_ci	  and IO. The domains are used to protect userspace from kernelspace
63762306a36Sopenharmony_ci	  and to handle IO-space as a special type of memory by assigning
63862306a36Sopenharmony_ci	  manager or client roles to running code (such as a process).
63962306a36Sopenharmony_ci
64062306a36Sopenharmony_ciconfig CPU_V7M_NUM_IRQ
64162306a36Sopenharmony_ci	int "Number of external interrupts connected to the NVIC"
64262306a36Sopenharmony_ci	depends on CPU_V7M
64362306a36Sopenharmony_ci	default 90 if ARCH_STM32
64462306a36Sopenharmony_ci	default 112 if SOC_VF610
64562306a36Sopenharmony_ci	default 240
64662306a36Sopenharmony_ci	help
64762306a36Sopenharmony_ci	  This option indicates the number of interrupts connected to the NVIC.
64862306a36Sopenharmony_ci	  The value can be larger than the real number of interrupts supported
64962306a36Sopenharmony_ci	  by the system, but must not be lower.
65062306a36Sopenharmony_ci	  The default value is 240, corresponding to the maximum number of
65162306a36Sopenharmony_ci	  interrupts supported by the NVIC on Cortex-M family.
65262306a36Sopenharmony_ci
65362306a36Sopenharmony_ci	  If unsure, keep default value.
65462306a36Sopenharmony_ci
65562306a36Sopenharmony_ci#
65662306a36Sopenharmony_ci# CPU supports 36-bit I/O
65762306a36Sopenharmony_ci#
65862306a36Sopenharmony_ciconfig IO_36
65962306a36Sopenharmony_ci	bool
66062306a36Sopenharmony_ci
66162306a36Sopenharmony_cicomment "Processor Features"
66262306a36Sopenharmony_ci
66362306a36Sopenharmony_ciconfig ARM_LPAE
66462306a36Sopenharmony_ci	bool "Support for the Large Physical Address Extension"
66562306a36Sopenharmony_ci	depends on MMU && CPU_32v7 && !CPU_32v6 && !CPU_32v5 && \
66662306a36Sopenharmony_ci		!CPU_32v4 && !CPU_32v3
66762306a36Sopenharmony_ci	select PHYS_ADDR_T_64BIT
66862306a36Sopenharmony_ci	select SWIOTLB
66962306a36Sopenharmony_ci	help
67062306a36Sopenharmony_ci	  Say Y if you have an ARMv7 processor supporting the LPAE page
67162306a36Sopenharmony_ci	  table format and you would like to access memory beyond the
67262306a36Sopenharmony_ci	  4GB limit. The resulting kernel image will not run on
67362306a36Sopenharmony_ci	  processors without the LPA extension.
67462306a36Sopenharmony_ci
67562306a36Sopenharmony_ci	  If unsure, say N.
67662306a36Sopenharmony_ci
67762306a36Sopenharmony_ciconfig ARM_PV_FIXUP
67862306a36Sopenharmony_ci	def_bool y
67962306a36Sopenharmony_ci	depends on ARM_LPAE && ARM_PATCH_PHYS_VIRT && ARCH_KEYSTONE
68062306a36Sopenharmony_ci
68162306a36Sopenharmony_ciconfig ARM_THUMB
68262306a36Sopenharmony_ci	bool "Support Thumb user binaries" if !CPU_THUMBONLY && EXPERT
68362306a36Sopenharmony_ci	depends on CPU_THUMB_CAPABLE && !CPU_32v4
68462306a36Sopenharmony_ci	default y
68562306a36Sopenharmony_ci	help
68662306a36Sopenharmony_ci	  Say Y if you want to include kernel support for running user space
68762306a36Sopenharmony_ci	  Thumb binaries.
68862306a36Sopenharmony_ci
68962306a36Sopenharmony_ci	  The Thumb instruction set is a compressed form of the standard ARM
69062306a36Sopenharmony_ci	  instruction set resulting in smaller binaries at the expense of
69162306a36Sopenharmony_ci	  slightly less efficient code.
69262306a36Sopenharmony_ci
69362306a36Sopenharmony_ci	  If this option is disabled, and you run userspace that switches to
69462306a36Sopenharmony_ci	  Thumb mode, signal handling will not work correctly, resulting in
69562306a36Sopenharmony_ci	  segmentation faults or illegal instruction aborts.
69662306a36Sopenharmony_ci
69762306a36Sopenharmony_ci	  If you don't know what this all is, saying Y is a safe choice.
69862306a36Sopenharmony_ci
69962306a36Sopenharmony_ciconfig ARM_THUMBEE
70062306a36Sopenharmony_ci	bool "Enable ThumbEE CPU extension"
70162306a36Sopenharmony_ci	depends on CPU_V7
70262306a36Sopenharmony_ci	help
70362306a36Sopenharmony_ci	  Say Y here if you have a CPU with the ThumbEE extension and code to
70462306a36Sopenharmony_ci	  make use of it. Say N for code that can run on CPUs without ThumbEE.
70562306a36Sopenharmony_ci
70662306a36Sopenharmony_ciconfig ARM_VIRT_EXT
70762306a36Sopenharmony_ci	bool
70862306a36Sopenharmony_ci	default y if CPU_V7
70962306a36Sopenharmony_ci	help
71062306a36Sopenharmony_ci	  Enable the kernel to make use of the ARM Virtualization
71162306a36Sopenharmony_ci	  Extensions to install hypervisors without run-time firmware
71262306a36Sopenharmony_ci	  assistance.
71362306a36Sopenharmony_ci
71462306a36Sopenharmony_ci	  A compliant bootloader is required in order to make maximum
71562306a36Sopenharmony_ci	  use of this feature.  Refer to Documentation/arch/arm/booting.rst for
71662306a36Sopenharmony_ci	  details.
71762306a36Sopenharmony_ci
71862306a36Sopenharmony_ciconfig SWP_EMULATE
71962306a36Sopenharmony_ci	bool "Emulate SWP/SWPB instructions" if !SMP
72062306a36Sopenharmony_ci	depends on CPU_V7
72162306a36Sopenharmony_ci	default y if SMP
72262306a36Sopenharmony_ci	select HAVE_PROC_CPU if PROC_FS
72362306a36Sopenharmony_ci	help
72462306a36Sopenharmony_ci	  ARMv6 architecture deprecates use of the SWP/SWPB instructions.
72562306a36Sopenharmony_ci	  ARMv7 multiprocessing extensions introduce the ability to disable
72662306a36Sopenharmony_ci	  these instructions, triggering an undefined instruction exception
72762306a36Sopenharmony_ci	  when executed. Say Y here to enable software emulation of these
72862306a36Sopenharmony_ci	  instructions for userspace (not kernel) using LDREX/STREX.
72962306a36Sopenharmony_ci	  Also creates /proc/cpu/swp_emulation for statistics.
73062306a36Sopenharmony_ci
73162306a36Sopenharmony_ci	  In some older versions of glibc [<=2.8] SWP is used during futex
73262306a36Sopenharmony_ci	  trylock() operations with the assumption that the code will not
73362306a36Sopenharmony_ci	  be preempted. This invalid assumption may be more likely to fail
73462306a36Sopenharmony_ci	  with SWP emulation enabled, leading to deadlock of the user
73562306a36Sopenharmony_ci	  application.
73662306a36Sopenharmony_ci
73762306a36Sopenharmony_ci	  NOTE: when accessing uncached shared regions, LDREX/STREX rely
73862306a36Sopenharmony_ci	  on an external transaction monitoring block called a global
73962306a36Sopenharmony_ci	  monitor to maintain update atomicity. If your system does not
74062306a36Sopenharmony_ci	  implement a global monitor, this option can cause programs that
74162306a36Sopenharmony_ci	  perform SWP operations to uncached memory to deadlock.
74262306a36Sopenharmony_ci
74362306a36Sopenharmony_ci	  If unsure, say Y.
74462306a36Sopenharmony_ci
74562306a36Sopenharmony_cichoice
74662306a36Sopenharmony_ci	prompt "CPU Endianness"
74762306a36Sopenharmony_ci	default CPU_LITTLE_ENDIAN
74862306a36Sopenharmony_ci
74962306a36Sopenharmony_ciconfig CPU_LITTLE_ENDIAN
75062306a36Sopenharmony_ci	bool "Built little-endian kernel"
75162306a36Sopenharmony_ci	help
75262306a36Sopenharmony_ci	  Say Y if you plan on running a kernel in little-endian mode.
75362306a36Sopenharmony_ci	  This is the default and is used in practically all modern user
75462306a36Sopenharmony_ci	  space builds.
75562306a36Sopenharmony_ci
75662306a36Sopenharmony_ciconfig CPU_BIG_ENDIAN
75762306a36Sopenharmony_ci	bool "Build big-endian kernel"
75862306a36Sopenharmony_ci	depends on !LD_IS_LLD
75962306a36Sopenharmony_ci	help
76062306a36Sopenharmony_ci	  Say Y if you plan on running a kernel in big-endian mode.
76162306a36Sopenharmony_ci	  This works on many machines using ARMv6 or newer processors
76262306a36Sopenharmony_ci	  but requires big-endian user space.
76362306a36Sopenharmony_ci
76462306a36Sopenharmony_ci	  The only ARMv5 platform with big-endian support is
76562306a36Sopenharmony_ci	  Intel IXP4xx.
76662306a36Sopenharmony_ci
76762306a36Sopenharmony_ciendchoice
76862306a36Sopenharmony_ci
76962306a36Sopenharmony_ciconfig CPU_ENDIAN_BE8
77062306a36Sopenharmony_ci	bool
77162306a36Sopenharmony_ci	depends on CPU_BIG_ENDIAN
77262306a36Sopenharmony_ci	default CPU_V6 || CPU_V6K || CPU_V7 || CPU_V7M
77362306a36Sopenharmony_ci	help
77462306a36Sopenharmony_ci	  Support for the BE-8 (big-endian) mode on ARMv6 and ARMv7 processors.
77562306a36Sopenharmony_ci
77662306a36Sopenharmony_ciconfig CPU_ENDIAN_BE32
77762306a36Sopenharmony_ci	bool
77862306a36Sopenharmony_ci	depends on CPU_BIG_ENDIAN
77962306a36Sopenharmony_ci	default !CPU_ENDIAN_BE8
78062306a36Sopenharmony_ci	help
78162306a36Sopenharmony_ci	  Support for the BE-32 (big-endian) mode on pre-ARMv6 processors.
78262306a36Sopenharmony_ci
78362306a36Sopenharmony_ciconfig CPU_HIGH_VECTOR
78462306a36Sopenharmony_ci	depends on !MMU && CPU_CP15 && !CPU_ARM740T
78562306a36Sopenharmony_ci	bool "Select the High exception vector"
78662306a36Sopenharmony_ci	help
78762306a36Sopenharmony_ci	  Say Y here to select high exception vector(0xFFFF0000~).
78862306a36Sopenharmony_ci	  The exception vector can vary depending on the platform
78962306a36Sopenharmony_ci	  design in nommu mode. If your platform needs to select
79062306a36Sopenharmony_ci	  high exception vector, say Y.
79162306a36Sopenharmony_ci	  Otherwise or if you are unsure, say N, and the low exception
79262306a36Sopenharmony_ci	  vector (0x00000000~) will be used.
79362306a36Sopenharmony_ci
79462306a36Sopenharmony_ciconfig CPU_ICACHE_DISABLE
79562306a36Sopenharmony_ci	bool "Disable I-Cache (I-bit)"
79662306a36Sopenharmony_ci	depends on (CPU_CP15 && !(CPU_ARM720T || CPU_ARM740T || CPU_XSCALE || CPU_XSC3)) || CPU_V7M
79762306a36Sopenharmony_ci	help
79862306a36Sopenharmony_ci	  Say Y here to disable the processor instruction cache. Unless
79962306a36Sopenharmony_ci	  you have a reason not to or are unsure, say N.
80062306a36Sopenharmony_ci
80162306a36Sopenharmony_ciconfig CPU_ICACHE_MISMATCH_WORKAROUND
80262306a36Sopenharmony_ci	bool "Workaround for I-Cache line size mismatch between CPU cores"
80362306a36Sopenharmony_ci	depends on SMP && CPU_V7
80462306a36Sopenharmony_ci	help
80562306a36Sopenharmony_ci	  Some big.LITTLE systems have I-Cache line size mismatch between
80662306a36Sopenharmony_ci	  LITTLE and big cores.  Say Y here to enable a workaround for
80762306a36Sopenharmony_ci	  proper I-Cache support on such systems.  If unsure, say N.
80862306a36Sopenharmony_ci
80962306a36Sopenharmony_ciconfig CPU_DCACHE_DISABLE
81062306a36Sopenharmony_ci	bool "Disable D-Cache (C-bit)"
81162306a36Sopenharmony_ci	depends on (CPU_CP15 && !SMP) || CPU_V7M
81262306a36Sopenharmony_ci	help
81362306a36Sopenharmony_ci	  Say Y here to disable the processor data cache. Unless
81462306a36Sopenharmony_ci	  you have a reason not to or are unsure, say N.
81562306a36Sopenharmony_ci
81662306a36Sopenharmony_ciconfig CPU_DCACHE_SIZE
81762306a36Sopenharmony_ci	hex
81862306a36Sopenharmony_ci	depends on CPU_ARM740T || CPU_ARM946E
81962306a36Sopenharmony_ci	default 0x00001000 if CPU_ARM740T
82062306a36Sopenharmony_ci	default 0x00002000 # default size for ARM946E-S
82162306a36Sopenharmony_ci	help
82262306a36Sopenharmony_ci	  Some cores are synthesizable to have various sized cache. For
82362306a36Sopenharmony_ci	  ARM946E-S case, it can vary from 0KB to 1MB.
82462306a36Sopenharmony_ci	  To support such cache operations, it is efficient to know the size
82562306a36Sopenharmony_ci	  before compile time.
82662306a36Sopenharmony_ci	  If your SoC is configured to have a different size, define the value
82762306a36Sopenharmony_ci	  here with proper conditions.
82862306a36Sopenharmony_ci
82962306a36Sopenharmony_ciconfig CPU_DCACHE_WRITETHROUGH
83062306a36Sopenharmony_ci	bool "Force write through D-cache"
83162306a36Sopenharmony_ci	depends on (CPU_ARM740T || CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM940T || CPU_ARM946E || CPU_ARM1020 || CPU_FA526) && !CPU_DCACHE_DISABLE
83262306a36Sopenharmony_ci	default y if CPU_ARM925T
83362306a36Sopenharmony_ci	help
83462306a36Sopenharmony_ci	  Say Y here to use the data cache in writethrough mode. Unless you
83562306a36Sopenharmony_ci	  specifically require this or are unsure, say N.
83662306a36Sopenharmony_ci
83762306a36Sopenharmony_ciconfig CPU_CACHE_ROUND_ROBIN
83862306a36Sopenharmony_ci	bool "Round robin I and D cache replacement algorithm"
83962306a36Sopenharmony_ci	depends on (CPU_ARM926T || CPU_ARM946E || CPU_ARM1020) && (!CPU_ICACHE_DISABLE || !CPU_DCACHE_DISABLE)
84062306a36Sopenharmony_ci	help
84162306a36Sopenharmony_ci	  Say Y here to use the predictable round-robin cache replacement
84262306a36Sopenharmony_ci	  policy.  Unless you specifically require this or are unsure, say N.
84362306a36Sopenharmony_ci
84462306a36Sopenharmony_ciconfig CPU_BPREDICT_DISABLE
84562306a36Sopenharmony_ci	bool "Disable branch prediction"
84662306a36Sopenharmony_ci	depends on CPU_ARM1020 || CPU_V6 || CPU_V6K || CPU_MOHAWK || CPU_XSC3 || CPU_V7 || CPU_FA526 || CPU_V7M
84762306a36Sopenharmony_ci	help
84862306a36Sopenharmony_ci	  Say Y here to disable branch prediction.  If unsure, say N.
84962306a36Sopenharmony_ci
85062306a36Sopenharmony_ciconfig CPU_SPECTRE
85162306a36Sopenharmony_ci	bool
85262306a36Sopenharmony_ci	select GENERIC_CPU_VULNERABILITIES
85362306a36Sopenharmony_ci
85462306a36Sopenharmony_ciconfig HARDEN_BRANCH_PREDICTOR
85562306a36Sopenharmony_ci	bool "Harden the branch predictor against aliasing attacks" if EXPERT
85662306a36Sopenharmony_ci	depends on CPU_SPECTRE
85762306a36Sopenharmony_ci	default y
85862306a36Sopenharmony_ci	help
85962306a36Sopenharmony_ci	   Speculation attacks against some high-performance processors rely
86062306a36Sopenharmony_ci	   on being able to manipulate the branch predictor for a victim
86162306a36Sopenharmony_ci	   context by executing aliasing branches in the attacker context.
86262306a36Sopenharmony_ci	   Such attacks can be partially mitigated against by clearing
86362306a36Sopenharmony_ci	   internal branch predictor state and limiting the prediction
86462306a36Sopenharmony_ci	   logic in some situations.
86562306a36Sopenharmony_ci
86662306a36Sopenharmony_ci	   This config option will take CPU-specific actions to harden
86762306a36Sopenharmony_ci	   the branch predictor against aliasing attacks and may rely on
86862306a36Sopenharmony_ci	   specific instruction sequences or control bits being set by
86962306a36Sopenharmony_ci	   the system firmware.
87062306a36Sopenharmony_ci
87162306a36Sopenharmony_ci	   If unsure, say Y.
87262306a36Sopenharmony_ci
87362306a36Sopenharmony_ciconfig HARDEN_BRANCH_HISTORY
87462306a36Sopenharmony_ci	bool "Harden Spectre style attacks against branch history" if EXPERT
87562306a36Sopenharmony_ci	depends on CPU_SPECTRE
87662306a36Sopenharmony_ci	default y
87762306a36Sopenharmony_ci	help
87862306a36Sopenharmony_ci	  Speculation attacks against some high-performance processors can
87962306a36Sopenharmony_ci	  make use of branch history to influence future speculation. When
88062306a36Sopenharmony_ci	  taking an exception, a sequence of branches overwrites the branch
88162306a36Sopenharmony_ci	  history, or branch history is invalidated.
88262306a36Sopenharmony_ci
88362306a36Sopenharmony_ciconfig TLS_REG_EMUL
88462306a36Sopenharmony_ci	bool
88562306a36Sopenharmony_ci	select NEED_KUSER_HELPERS
88662306a36Sopenharmony_ci	help
88762306a36Sopenharmony_ci	  An SMP system using a pre-ARMv6 processor (there are apparently
88862306a36Sopenharmony_ci	  a few prototypes like that in existence) and therefore access to
88962306a36Sopenharmony_ci	  that required register must be emulated.
89062306a36Sopenharmony_ci
89162306a36Sopenharmony_ciconfig NEED_KUSER_HELPERS
89262306a36Sopenharmony_ci	bool
89362306a36Sopenharmony_ci
89462306a36Sopenharmony_ciconfig KUSER_HELPERS
89562306a36Sopenharmony_ci	bool "Enable kuser helpers in vector page" if !NEED_KUSER_HELPERS
89662306a36Sopenharmony_ci	depends on MMU
89762306a36Sopenharmony_ci	default y
89862306a36Sopenharmony_ci	help
89962306a36Sopenharmony_ci	  Warning: disabling this option may break user programs.
90062306a36Sopenharmony_ci
90162306a36Sopenharmony_ci	  Provide kuser helpers in the vector page.  The kernel provides
90262306a36Sopenharmony_ci	  helper code to userspace in read only form at a fixed location
90362306a36Sopenharmony_ci	  in the high vector page to allow userspace to be independent of
90462306a36Sopenharmony_ci	  the CPU type fitted to the system.  This permits binaries to be
90562306a36Sopenharmony_ci	  run on ARMv4 through to ARMv7 without modification.
90662306a36Sopenharmony_ci
90762306a36Sopenharmony_ci	  See Documentation/arch/arm/kernel_user_helpers.rst for details.
90862306a36Sopenharmony_ci
90962306a36Sopenharmony_ci	  However, the fixed address nature of these helpers can be used
91062306a36Sopenharmony_ci	  by ROP (return orientated programming) authors when creating
91162306a36Sopenharmony_ci	  exploits.
91262306a36Sopenharmony_ci
91362306a36Sopenharmony_ci	  If all of the binaries and libraries which run on your platform
91462306a36Sopenharmony_ci	  are built specifically for your platform, and make no use of
91562306a36Sopenharmony_ci	  these helpers, then you can turn this option off to hinder
91662306a36Sopenharmony_ci	  such exploits. However, in that case, if a binary or library
91762306a36Sopenharmony_ci	  relying on those helpers is run, it will receive a SIGILL signal,
91862306a36Sopenharmony_ci	  which will terminate the program.
91962306a36Sopenharmony_ci
92062306a36Sopenharmony_ci	  Say N here only if you are absolutely certain that you do not
92162306a36Sopenharmony_ci	  need these helpers; otherwise, the safe option is to say Y.
92262306a36Sopenharmony_ci
92362306a36Sopenharmony_ciconfig VDSO
92462306a36Sopenharmony_ci	bool "Enable VDSO for acceleration of some system calls"
92562306a36Sopenharmony_ci	depends on AEABI && MMU && CPU_V7
92662306a36Sopenharmony_ci	default y if ARM_ARCH_TIMER
92762306a36Sopenharmony_ci	select HAVE_GENERIC_VDSO
92862306a36Sopenharmony_ci	select GENERIC_TIME_VSYSCALL
92962306a36Sopenharmony_ci	select GENERIC_VDSO_32
93062306a36Sopenharmony_ci	select GENERIC_GETTIMEOFDAY
93162306a36Sopenharmony_ci	help
93262306a36Sopenharmony_ci	  Place in the process address space an ELF shared object
93362306a36Sopenharmony_ci	  providing fast implementations of gettimeofday and
93462306a36Sopenharmony_ci	  clock_gettime.  Systems that implement the ARM architected
93562306a36Sopenharmony_ci	  timer will receive maximum benefit.
93662306a36Sopenharmony_ci
93762306a36Sopenharmony_ci	  You must have glibc 2.22 or later for programs to seamlessly
93862306a36Sopenharmony_ci	  take advantage of this.
93962306a36Sopenharmony_ci
94062306a36Sopenharmony_ciconfig DMA_CACHE_RWFO
94162306a36Sopenharmony_ci	bool "Enable read/write for ownership DMA cache maintenance"
94262306a36Sopenharmony_ci	depends on CPU_V6K && SMP
94362306a36Sopenharmony_ci	default y
94462306a36Sopenharmony_ci	help
94562306a36Sopenharmony_ci	  The Snoop Control Unit on ARM11MPCore does not detect the
94662306a36Sopenharmony_ci	  cache maintenance operations and the dma_{map,unmap}_area()
94762306a36Sopenharmony_ci	  functions may leave stale cache entries on other CPUs. By
94862306a36Sopenharmony_ci	  enabling this option, Read or Write For Ownership in the ARMv6
94962306a36Sopenharmony_ci	  DMA cache maintenance functions is performed. These LDR/STR
95062306a36Sopenharmony_ci	  instructions change the cache line state to shared or modified
95162306a36Sopenharmony_ci	  so that the cache operation has the desired effect.
95262306a36Sopenharmony_ci
95362306a36Sopenharmony_ci	  Note that the workaround is only valid on processors that do
95462306a36Sopenharmony_ci	  not perform speculative loads into the D-cache. For such
95562306a36Sopenharmony_ci	  processors, if cache maintenance operations are not broadcast
95662306a36Sopenharmony_ci	  in hardware, other workarounds are needed (e.g. cache
95762306a36Sopenharmony_ci	  maintenance broadcasting in software via FIQ).
95862306a36Sopenharmony_ci
95962306a36Sopenharmony_ciconfig OUTER_CACHE
96062306a36Sopenharmony_ci	bool
96162306a36Sopenharmony_ci
96262306a36Sopenharmony_ciconfig OUTER_CACHE_SYNC
96362306a36Sopenharmony_ci	bool
96462306a36Sopenharmony_ci	select ARM_HEAVY_MB
96562306a36Sopenharmony_ci	help
96662306a36Sopenharmony_ci	  The outer cache has a outer_cache_fns.sync function pointer
96762306a36Sopenharmony_ci	  that can be used to drain the write buffer of the outer cache.
96862306a36Sopenharmony_ci
96962306a36Sopenharmony_ciconfig CACHE_B15_RAC
97062306a36Sopenharmony_ci	bool "Enable the Broadcom Brahma-B15 read-ahead cache controller"
97162306a36Sopenharmony_ci	depends on ARCH_BRCMSTB
97262306a36Sopenharmony_ci	default y
97362306a36Sopenharmony_ci	help
97462306a36Sopenharmony_ci	  This option enables the Broadcom Brahma-B15 read-ahead cache
97562306a36Sopenharmony_ci	  controller. If disabled, the read-ahead cache remains off.
97662306a36Sopenharmony_ci
97762306a36Sopenharmony_ciconfig CACHE_FEROCEON_L2
97862306a36Sopenharmony_ci	bool "Enable the Feroceon L2 cache controller"
97962306a36Sopenharmony_ci	depends on ARCH_MV78XX0 || ARCH_MVEBU
98062306a36Sopenharmony_ci	default y
98162306a36Sopenharmony_ci	select OUTER_CACHE
98262306a36Sopenharmony_ci	help
98362306a36Sopenharmony_ci	  This option enables the Feroceon L2 cache controller.
98462306a36Sopenharmony_ci
98562306a36Sopenharmony_ciconfig CACHE_FEROCEON_L2_WRITETHROUGH
98662306a36Sopenharmony_ci	bool "Force Feroceon L2 cache write through"
98762306a36Sopenharmony_ci	depends on CACHE_FEROCEON_L2
98862306a36Sopenharmony_ci	help
98962306a36Sopenharmony_ci	  Say Y here to use the Feroceon L2 cache in writethrough mode.
99062306a36Sopenharmony_ci	  Unless you specifically require this, say N for writeback mode.
99162306a36Sopenharmony_ci
99262306a36Sopenharmony_ciconfig MIGHT_HAVE_CACHE_L2X0
99362306a36Sopenharmony_ci	bool
99462306a36Sopenharmony_ci	help
99562306a36Sopenharmony_ci	  This option should be selected by machines which have a L2x0
99662306a36Sopenharmony_ci	  or PL310 cache controller, but where its use is optional.
99762306a36Sopenharmony_ci
99862306a36Sopenharmony_ci	  The only effect of this option is to make CACHE_L2X0 and
99962306a36Sopenharmony_ci	  related options available to the user for configuration.
100062306a36Sopenharmony_ci
100162306a36Sopenharmony_ci	  Boards or SoCs which always require the cache controller
100262306a36Sopenharmony_ci	  support to be present should select CACHE_L2X0 directly
100362306a36Sopenharmony_ci	  instead of this option, thus preventing the user from
100462306a36Sopenharmony_ci	  inadvertently configuring a broken kernel.
100562306a36Sopenharmony_ci
100662306a36Sopenharmony_ciconfig CACHE_L2X0
100762306a36Sopenharmony_ci	bool "Enable the L2x0 outer cache controller" if MIGHT_HAVE_CACHE_L2X0
100862306a36Sopenharmony_ci	default MIGHT_HAVE_CACHE_L2X0
100962306a36Sopenharmony_ci	select OUTER_CACHE
101062306a36Sopenharmony_ci	select OUTER_CACHE_SYNC
101162306a36Sopenharmony_ci	help
101262306a36Sopenharmony_ci	  This option enables the L2x0 PrimeCell.
101362306a36Sopenharmony_ci
101462306a36Sopenharmony_ciconfig CACHE_L2X0_PMU
101562306a36Sopenharmony_ci	bool "L2x0 performance monitor support" if CACHE_L2X0
101662306a36Sopenharmony_ci	depends on PERF_EVENTS
101762306a36Sopenharmony_ci	help
101862306a36Sopenharmony_ci	  This option enables support for the performance monitoring features
101962306a36Sopenharmony_ci	  of the L220 and PL310 outer cache controllers.
102062306a36Sopenharmony_ci
102162306a36Sopenharmony_ciif CACHE_L2X0
102262306a36Sopenharmony_ci
102362306a36Sopenharmony_ciconfig PL310_ERRATA_588369
102462306a36Sopenharmony_ci	bool "PL310 errata: Clean & Invalidate maintenance operations do not invalidate clean lines"
102562306a36Sopenharmony_ci	help
102662306a36Sopenharmony_ci	   The PL310 L2 cache controller implements three types of Clean &
102762306a36Sopenharmony_ci	   Invalidate maintenance operations: by Physical Address
102862306a36Sopenharmony_ci	   (offset 0x7F0), by Index/Way (0x7F8) and by Way (0x7FC).
102962306a36Sopenharmony_ci	   They are architecturally defined to behave as the execution of a
103062306a36Sopenharmony_ci	   clean operation followed immediately by an invalidate operation,
103162306a36Sopenharmony_ci	   both performing to the same memory location. This functionality
103262306a36Sopenharmony_ci	   is not correctly implemented in PL310 prior to r2p0 (fixed in r2p0)
103362306a36Sopenharmony_ci	   as clean lines are not invalidated as a result of these operations.
103462306a36Sopenharmony_ci
103562306a36Sopenharmony_ciconfig PL310_ERRATA_727915
103662306a36Sopenharmony_ci	bool "PL310 errata: Background Clean & Invalidate by Way operation can cause data corruption"
103762306a36Sopenharmony_ci	help
103862306a36Sopenharmony_ci	  PL310 implements the Clean & Invalidate by Way L2 cache maintenance
103962306a36Sopenharmony_ci	  operation (offset 0x7FC). This operation runs in background so that
104062306a36Sopenharmony_ci	  PL310 can handle normal accesses while it is in progress. Under very
104162306a36Sopenharmony_ci	  rare circumstances, due to this erratum, write data can be lost when
104262306a36Sopenharmony_ci	  PL310 treats a cacheable write transaction during a Clean &
104362306a36Sopenharmony_ci	  Invalidate by Way operation.  Revisions prior to r3p1 are affected by
104462306a36Sopenharmony_ci	  this errata (fixed in r3p1).
104562306a36Sopenharmony_ci
104662306a36Sopenharmony_ciconfig PL310_ERRATA_753970
104762306a36Sopenharmony_ci	bool "PL310 errata: cache sync operation may be faulty"
104862306a36Sopenharmony_ci	help
104962306a36Sopenharmony_ci	  This option enables the workaround for the 753970 PL310 (r3p0) erratum.
105062306a36Sopenharmony_ci
105162306a36Sopenharmony_ci	  Under some condition the effect of cache sync operation on
105262306a36Sopenharmony_ci	  the store buffer still remains when the operation completes.
105362306a36Sopenharmony_ci	  This means that the store buffer is always asked to drain and
105462306a36Sopenharmony_ci	  this prevents it from merging any further writes. The workaround
105562306a36Sopenharmony_ci	  is to replace the normal offset of cache sync operation (0x730)
105662306a36Sopenharmony_ci	  by another offset targeting an unmapped PL310 register 0x740.
105762306a36Sopenharmony_ci	  This has the same effect as the cache sync operation: store buffer
105862306a36Sopenharmony_ci	  drain and waiting for all buffers empty.
105962306a36Sopenharmony_ci
106062306a36Sopenharmony_ciconfig PL310_ERRATA_769419
106162306a36Sopenharmony_ci	bool "PL310 errata: no automatic Store Buffer drain"
106262306a36Sopenharmony_ci	help
106362306a36Sopenharmony_ci	  On revisions of the PL310 prior to r3p2, the Store Buffer does
106462306a36Sopenharmony_ci	  not automatically drain. This can cause normal, non-cacheable
106562306a36Sopenharmony_ci	  writes to be retained when the memory system is idle, leading
106662306a36Sopenharmony_ci	  to suboptimal I/O performance for drivers using coherent DMA.
106762306a36Sopenharmony_ci	  This option adds a write barrier to the cpu_idle loop so that,
106862306a36Sopenharmony_ci	  on systems with an outer cache, the store buffer is drained
106962306a36Sopenharmony_ci	  explicitly.
107062306a36Sopenharmony_ci
107162306a36Sopenharmony_ciendif
107262306a36Sopenharmony_ci
107362306a36Sopenharmony_ciconfig CACHE_TAUROS2
107462306a36Sopenharmony_ci	bool "Enable the Tauros2 L2 cache controller"
107562306a36Sopenharmony_ci	depends on (CPU_MOHAWK || CPU_PJ4)
107662306a36Sopenharmony_ci	default y
107762306a36Sopenharmony_ci	select OUTER_CACHE
107862306a36Sopenharmony_ci	help
107962306a36Sopenharmony_ci	  This option enables the Tauros2 L2 cache controller (as
108062306a36Sopenharmony_ci	  found on PJ1/PJ4).
108162306a36Sopenharmony_ci
108262306a36Sopenharmony_ciconfig CACHE_UNIPHIER
108362306a36Sopenharmony_ci	bool "Enable the UniPhier outer cache controller"
108462306a36Sopenharmony_ci	depends on ARCH_UNIPHIER
108562306a36Sopenharmony_ci	select ARM_L1_CACHE_SHIFT_7
108662306a36Sopenharmony_ci	select OUTER_CACHE
108762306a36Sopenharmony_ci	select OUTER_CACHE_SYNC
108862306a36Sopenharmony_ci	help
108962306a36Sopenharmony_ci	  This option enables the UniPhier outer cache (system cache)
109062306a36Sopenharmony_ci	  controller.
109162306a36Sopenharmony_ci
109262306a36Sopenharmony_ciconfig CACHE_XSC3L2
109362306a36Sopenharmony_ci	bool "Enable the L2 cache on XScale3"
109462306a36Sopenharmony_ci	depends on CPU_XSC3
109562306a36Sopenharmony_ci	default y
109662306a36Sopenharmony_ci	select OUTER_CACHE
109762306a36Sopenharmony_ci	help
109862306a36Sopenharmony_ci	  This option enables the L2 cache on XScale3.
109962306a36Sopenharmony_ci
110062306a36Sopenharmony_ciconfig ARM_L1_CACHE_SHIFT_6
110162306a36Sopenharmony_ci	bool
110262306a36Sopenharmony_ci	default y if CPU_V7
110362306a36Sopenharmony_ci	help
110462306a36Sopenharmony_ci	  Setting ARM L1 cache line size to 64 Bytes.
110562306a36Sopenharmony_ci
110662306a36Sopenharmony_ciconfig ARM_L1_CACHE_SHIFT_7
110762306a36Sopenharmony_ci	bool
110862306a36Sopenharmony_ci	help
110962306a36Sopenharmony_ci	  Setting ARM L1 cache line size to 128 Bytes.
111062306a36Sopenharmony_ci
111162306a36Sopenharmony_ciconfig ARM_L1_CACHE_SHIFT
111262306a36Sopenharmony_ci	int
111362306a36Sopenharmony_ci	default 7 if ARM_L1_CACHE_SHIFT_7
111462306a36Sopenharmony_ci	default 6 if ARM_L1_CACHE_SHIFT_6
111562306a36Sopenharmony_ci	default 5
111662306a36Sopenharmony_ci
111762306a36Sopenharmony_ciconfig ARM_DMA_MEM_BUFFERABLE
111862306a36Sopenharmony_ci	bool "Use non-cacheable memory for DMA" if (CPU_V6 || CPU_V6K || CPU_V7M) && !CPU_V7
111962306a36Sopenharmony_ci	default y if CPU_V6 || CPU_V6K || CPU_V7 || CPU_V7M
112062306a36Sopenharmony_ci	help
112162306a36Sopenharmony_ci	  Historically, the kernel has used strongly ordered mappings to
112262306a36Sopenharmony_ci	  provide DMA coherent memory.  With the advent of ARMv7, mapping
112362306a36Sopenharmony_ci	  memory with differing types results in unpredictable behaviour,
112462306a36Sopenharmony_ci	  so on these CPUs, this option is forced on.
112562306a36Sopenharmony_ci
112662306a36Sopenharmony_ci	  Multiple mappings with differing attributes is also unpredictable
112762306a36Sopenharmony_ci	  on ARMv6 CPUs, but since they do not have aggressive speculative
112862306a36Sopenharmony_ci	  prefetch, no harm appears to occur.
112962306a36Sopenharmony_ci
113062306a36Sopenharmony_ci	  However, drivers may be missing the necessary barriers for ARMv6,
113162306a36Sopenharmony_ci	  and therefore turning this on may result in unpredictable driver
113262306a36Sopenharmony_ci	  behaviour.  Therefore, we offer this as an option.
113362306a36Sopenharmony_ci
113462306a36Sopenharmony_ci	  On some of the beefier ARMv7-M machines (with DMA and write
113562306a36Sopenharmony_ci	  buffers) you likely want this enabled, while those that
113662306a36Sopenharmony_ci	  didn't need it until now also won't need it in the future.
113762306a36Sopenharmony_ci
113862306a36Sopenharmony_ci	  You are recommended say 'Y' here and debug any affected drivers.
113962306a36Sopenharmony_ci
114062306a36Sopenharmony_ciconfig ARM_HEAVY_MB
114162306a36Sopenharmony_ci	bool
114262306a36Sopenharmony_ci
114362306a36Sopenharmony_ciconfig DEBUG_ALIGN_RODATA
114462306a36Sopenharmony_ci	bool "Make rodata strictly non-executable"
114562306a36Sopenharmony_ci	depends on STRICT_KERNEL_RWX
114662306a36Sopenharmony_ci	default y
114762306a36Sopenharmony_ci	help
114862306a36Sopenharmony_ci	  If this is set, rodata will be made explicitly non-executable. This
114962306a36Sopenharmony_ci	  provides protection on the rare chance that attackers might find and
115062306a36Sopenharmony_ci	  use ROP gadgets that exist in the rodata section. This adds an
115162306a36Sopenharmony_ci	  additional section-aligned split of rodata from kernel text so it
115262306a36Sopenharmony_ci	  can be made explicitly non-executable. This padding may waste memory
115362306a36Sopenharmony_ci	  space to gain the additional protection.
1154