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