cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

Kconfig (31250B)


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