Kconfig 30 KB

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