# SPDX-License-Identifier: GPL-2.0-only 
 | 
menu "CPU Frequency scaling" 
 | 
  
 | 
config CPU_FREQ 
 | 
    bool "CPU Frequency scaling" 
 | 
    select SRCU 
 | 
    help 
 | 
      CPU Frequency scaling allows you to change the clock speed of  
 | 
      CPUs on the fly. This is a nice method to save power, because  
 | 
      the lower the CPU clock speed, the less power the CPU consumes. 
 | 
  
 | 
      Note that this driver doesn't automatically change the CPU 
 | 
      clock speed, you need to either enable a dynamic cpufreq governor 
 | 
      (see below) after boot, or use a userspace tool. 
 | 
  
 | 
      For details, take a look at <file:Documentation/cpu-freq>. 
 | 
  
 | 
      If in doubt, say N. 
 | 
  
 | 
if CPU_FREQ 
 | 
  
 | 
config CPU_FREQ_GOV_ATTR_SET 
 | 
    bool 
 | 
  
 | 
config CPU_FREQ_GOV_COMMON 
 | 
    select CPU_FREQ_GOV_ATTR_SET 
 | 
    select IRQ_WORK 
 | 
    bool 
 | 
  
 | 
config CPU_FREQ_STAT 
 | 
    bool "CPU frequency transition statistics" 
 | 
    help 
 | 
      Export CPU frequency statistics information through sysfs. 
 | 
  
 | 
      If in doubt, say N. 
 | 
  
 | 
config CPU_FREQ_TIMES 
 | 
       bool "CPU frequency time-in-state statistics" 
 | 
       help 
 | 
         Export CPU time-in-state information through procfs. 
 | 
  
 | 
         If in doubt, say N. 
 | 
  
 | 
choice 
 | 
    prompt "Default CPUFreq governor" 
 | 
    default CPU_FREQ_DEFAULT_GOV_USERSPACE if ARM_SA1100_CPUFREQ || ARM_SA1110_CPUFREQ 
 | 
    default CPU_FREQ_DEFAULT_GOV_SCHEDUTIL if ARM64 || ARM 
 | 
    default CPU_FREQ_DEFAULT_GOV_SCHEDUTIL if X86_INTEL_PSTATE && SMP 
 | 
    default CPU_FREQ_DEFAULT_GOV_PERFORMANCE 
 | 
    help 
 | 
      This option sets which CPUFreq governor shall be loaded at 
 | 
      startup. If in doubt, use the default setting. 
 | 
  
 | 
config CPU_FREQ_DEFAULT_GOV_PERFORMANCE 
 | 
    bool "performance" 
 | 
    select CPU_FREQ_GOV_PERFORMANCE 
 | 
    help 
 | 
      Use the CPUFreq governor 'performance' as default. This sets 
 | 
      the frequency statically to the highest frequency supported by 
 | 
      the CPU. 
 | 
  
 | 
config CPU_FREQ_DEFAULT_GOV_POWERSAVE 
 | 
    bool "powersave" 
 | 
    select CPU_FREQ_GOV_POWERSAVE 
 | 
    help 
 | 
      Use the CPUFreq governor 'powersave' as default. This sets 
 | 
      the frequency statically to the lowest frequency supported by 
 | 
      the CPU. 
 | 
  
 | 
config CPU_FREQ_DEFAULT_GOV_USERSPACE 
 | 
    bool "userspace" 
 | 
    select CPU_FREQ_GOV_USERSPACE 
 | 
    help 
 | 
      Use the CPUFreq governor 'userspace' as default. This allows 
 | 
      you to set the CPU frequency manually or when a userspace  
 | 
      program shall be able to set the CPU dynamically without having 
 | 
      to enable the userspace governor manually. 
 | 
  
 | 
config CPU_FREQ_DEFAULT_GOV_ONDEMAND 
 | 
    bool "ondemand" 
 | 
    depends on !(X86_INTEL_PSTATE && SMP) 
 | 
    select CPU_FREQ_GOV_ONDEMAND 
 | 
    select CPU_FREQ_GOV_PERFORMANCE 
 | 
    help 
 | 
      Use the CPUFreq governor 'ondemand' as default. This allows 
 | 
      you to get a full dynamic frequency capable system by simply 
 | 
      loading your cpufreq low-level hardware driver. 
 | 
      Be aware that not all cpufreq drivers support the ondemand 
 | 
      governor. If unsure have a look at the help section of the 
 | 
      driver. Fallback governor will be the performance governor. 
 | 
  
 | 
config CPU_FREQ_DEFAULT_GOV_CONSERVATIVE 
 | 
    bool "conservative" 
 | 
    depends on !(X86_INTEL_PSTATE && SMP) 
 | 
    select CPU_FREQ_GOV_CONSERVATIVE 
 | 
    select CPU_FREQ_GOV_PERFORMANCE 
 | 
    help 
 | 
      Use the CPUFreq governor 'conservative' as default. This allows 
 | 
      you to get a full dynamic frequency capable system by simply 
 | 
      loading your cpufreq low-level hardware driver. 
 | 
      Be aware that not all cpufreq drivers support the conservative 
 | 
      governor. If unsure have a look at the help section of the 
 | 
      driver. Fallback governor will be the performance governor. 
 | 
  
 | 
config CPU_FREQ_DEFAULT_GOV_SCHEDUTIL 
 | 
    bool "schedutil" 
 | 
    depends on SMP 
 | 
    select CPU_FREQ_GOV_SCHEDUTIL 
 | 
    select CPU_FREQ_GOV_PERFORMANCE 
 | 
    help 
 | 
      Use the 'schedutil' CPUFreq governor by default. If unsure, 
 | 
      have a look at the help section of that governor. The fallback 
 | 
      governor will be 'performance'. 
 | 
  
 | 
config CPU_FREQ_DEFAULT_GOV_INTERACTIVE 
 | 
    bool "interactive" 
 | 
    depends on NO_GKI 
 | 
    select CPU_FREQ_GOV_INTERACTIVE 
 | 
    select CPU_FREQ_GOV_PERFORMANCE 
 | 
    help 
 | 
      Use the CPUFreq governor 'interactive' as default. This allows 
 | 
      you to get a full dynamic cpu frequency capable system by simply 
 | 
      loading your cpufreq low-level hardware driver, using the 
 | 
      'interactive' governor for latency-sensitive workloads. 
 | 
  
 | 
endchoice 
 | 
  
 | 
config CPU_FREQ_GOV_PERFORMANCE 
 | 
    tristate "'performance' governor" 
 | 
    help 
 | 
      This cpufreq governor sets the frequency statically to the 
 | 
      highest available CPU frequency. 
 | 
  
 | 
      To compile this driver as a module, choose M here: the 
 | 
      module will be called cpufreq_performance. 
 | 
  
 | 
      If in doubt, say Y. 
 | 
  
 | 
config CPU_FREQ_GOV_POWERSAVE 
 | 
    tristate "'powersave' governor" 
 | 
    help 
 | 
      This cpufreq governor sets the frequency statically to the 
 | 
      lowest available CPU frequency. 
 | 
  
 | 
      To compile this driver as a module, choose M here: the 
 | 
      module will be called cpufreq_powersave. 
 | 
  
 | 
      If in doubt, say Y. 
 | 
  
 | 
config CPU_FREQ_GOV_USERSPACE 
 | 
    tristate "'userspace' governor for userspace frequency scaling" 
 | 
    help 
 | 
      Enable this cpufreq governor when you either want to set the 
 | 
      CPU frequency manually or when a userspace program shall 
 | 
      be able to set the CPU dynamically, like on LART  
 | 
      <http://www.lartmaker.nl/>. 
 | 
  
 | 
      To compile this driver as a module, choose M here: the 
 | 
      module will be called cpufreq_userspace. 
 | 
  
 | 
      For details, take a look at <file:Documentation/cpu-freq/>. 
 | 
  
 | 
      If in doubt, say Y. 
 | 
  
 | 
config CPU_FREQ_GOV_ONDEMAND 
 | 
    tristate "'ondemand' cpufreq policy governor" 
 | 
    select CPU_FREQ_GOV_COMMON 
 | 
    help 
 | 
      'ondemand' - This driver adds a dynamic cpufreq policy governor. 
 | 
      The governor does a periodic polling and  
 | 
      changes frequency based on the CPU utilization. 
 | 
      The support for this governor depends on CPU capability to 
 | 
      do fast frequency switching (i.e, very low latency frequency 
 | 
      transitions).  
 | 
  
 | 
      To compile this driver as a module, choose M here: the 
 | 
      module will be called cpufreq_ondemand. 
 | 
  
 | 
      For details, take a look at linux/Documentation/cpu-freq. 
 | 
  
 | 
      If in doubt, say N. 
 | 
  
 | 
config CPU_FREQ_GOV_CONSERVATIVE 
 | 
    tristate "'conservative' cpufreq governor" 
 | 
    depends on CPU_FREQ 
 | 
    select CPU_FREQ_GOV_COMMON 
 | 
    help 
 | 
      'conservative' - this driver is rather similar to the 'ondemand' 
 | 
      governor both in its source code and its purpose, the difference is 
 | 
      its optimisation for better suitability in a battery powered 
 | 
      environment.  The frequency is gracefully increased and decreased 
 | 
      rather than jumping to 100% when speed is required. 
 | 
  
 | 
      If you have a desktop machine then you should really be considering 
 | 
      the 'ondemand' governor instead, however if you are using a laptop, 
 | 
      PDA or even an AMD64 based computer (due to the unacceptable 
 | 
      step-by-step latency issues between the minimum and maximum frequency 
 | 
      transitions in the CPU) you will probably want to use this governor. 
 | 
  
 | 
      To compile this driver as a module, choose M here: the 
 | 
      module will be called cpufreq_conservative. 
 | 
  
 | 
      For details, take a look at linux/Documentation/cpu-freq. 
 | 
  
 | 
      If in doubt, say N. 
 | 
  
 | 
config CPU_FREQ_GOV_SCHEDUTIL 
 | 
    bool "'schedutil' cpufreq policy governor" 
 | 
    depends on CPU_FREQ && SMP 
 | 
    select CPU_FREQ_GOV_ATTR_SET 
 | 
    select IRQ_WORK 
 | 
    help 
 | 
      This governor makes decisions based on the utilization data provided 
 | 
      by the scheduler.  It sets the CPU frequency to be proportional to 
 | 
      the utilization/capacity ratio coming from the scheduler.  If the 
 | 
      utilization is frequency-invariant, the new frequency is also 
 | 
      proportional to the maximum available frequency.  If that is not the 
 | 
      case, it is proportional to the current frequency of the CPU.  The 
 | 
      frequency tipping point is at utilization/capacity equal to 80% in 
 | 
      both cases. 
 | 
  
 | 
      If in doubt, say N. 
 | 
  
 | 
config CPU_FREQ_GOV_INTERACTIVE 
 | 
    tristate "'interactive' cpufreq policy governor" 
 | 
    depends on NO_GKI 
 | 
    depends on CPU_FREQ 
 | 
    select CPU_FREQ_GOV_ATTR_SET 
 | 
    select IRQ_WORK 
 | 
    help 
 | 
      'interactive' - This driver adds a dynamic cpufreq policy governor 
 | 
      designed for latency-sensitive workloads. 
 | 
  
 | 
      This governor attempts to reduce the latency of clock 
 | 
      increases so that the system is more responsive to 
 | 
      interactive workloads. 
 | 
  
 | 
      To compile this driver as a module, choose M here: the 
 | 
      module will be called cpufreq_interactive. 
 | 
  
 | 
      For details, take a look at linux/Documentation/cpu-freq. 
 | 
  
 | 
      If in doubt, say N. 
 | 
  
 | 
comment "CPU frequency scaling drivers" 
 | 
  
 | 
config CPUFREQ_DT 
 | 
    tristate "Generic DT based cpufreq driver" 
 | 
    depends on HAVE_CLK && OF 
 | 
    select CPUFREQ_DT_PLATDEV if !ARM_ROCKCHIP_CPUFREQ 
 | 
    select PM_OPP 
 | 
    help 
 | 
      This adds a generic DT based cpufreq driver for frequency management. 
 | 
      It supports both uniprocessor (UP) and symmetric multiprocessor (SMP) 
 | 
      systems. 
 | 
  
 | 
      If in doubt, say N. 
 | 
  
 | 
config CPUFREQ_DT_PLATDEV 
 | 
    bool 
 | 
    help 
 | 
      This adds a generic DT based cpufreq platdev driver for frequency 
 | 
      management.  This creates a 'cpufreq-dt' platform device, on the 
 | 
      supported platforms. 
 | 
  
 | 
      If in doubt, say N. 
 | 
  
 | 
config CPUFREQ_DUMMY 
 | 
    tristate "Dummy CPU frequency driver" 
 | 
    help 
 | 
      This option adds a generic dummy CPUfreq driver, which sets a fake 
 | 
      2-frequency table when initializing each policy and otherwise does 
 | 
      nothing. 
 | 
  
 | 
      If in doubt, say N 
 | 
  
 | 
if X86 
 | 
source "drivers/cpufreq/Kconfig.x86" 
 | 
endif 
 | 
  
 | 
if ARM || ARM64 
 | 
source "drivers/cpufreq/Kconfig.arm" 
 | 
endif 
 | 
  
 | 
if PPC32 || PPC64 
 | 
source "drivers/cpufreq/Kconfig.powerpc" 
 | 
endif 
 | 
  
 | 
if IA64 
 | 
config IA64_ACPI_CPUFREQ 
 | 
    tristate "ACPI Processor P-States driver" 
 | 
    depends on ACPI_PROCESSOR 
 | 
    help 
 | 
    This driver adds a CPUFreq driver which utilizes the ACPI 
 | 
    Processor Performance States. 
 | 
  
 | 
    For details, take a look at <file:Documentation/cpu-freq/>. 
 | 
  
 | 
    If in doubt, say N. 
 | 
endif 
 | 
  
 | 
if MIPS 
 | 
config BMIPS_CPUFREQ 
 | 
    tristate "BMIPS CPUfreq Driver" 
 | 
    help 
 | 
      This option adds a CPUfreq driver for BMIPS processors with 
 | 
      support for configurable CPU frequency. 
 | 
  
 | 
      For now, BMIPS5 chips are supported (such as the Broadcom 7425). 
 | 
  
 | 
      If in doubt, say N. 
 | 
  
 | 
config LOONGSON2_CPUFREQ 
 | 
    tristate "Loongson2 CPUFreq Driver" 
 | 
    depends on LEMOTE_MACH2F 
 | 
    help 
 | 
      This option adds a CPUFreq driver for loongson processors which 
 | 
      support software configurable cpu frequency. 
 | 
  
 | 
      Loongson2F and it's successors support this feature. 
 | 
  
 | 
      For details, take a look at <file:Documentation/cpu-freq/>. 
 | 
  
 | 
      If in doubt, say N. 
 | 
  
 | 
config LOONGSON1_CPUFREQ 
 | 
    tristate "Loongson1 CPUFreq Driver" 
 | 
    depends on LOONGSON1_LS1B 
 | 
    help 
 | 
      This option adds a CPUFreq driver for loongson1 processors which 
 | 
      support software configurable cpu frequency. 
 | 
  
 | 
      For details, take a look at <file:Documentation/cpu-freq/>. 
 | 
  
 | 
      If in doubt, say N. 
 | 
endif 
 | 
  
 | 
if SPARC64 
 | 
config SPARC_US3_CPUFREQ 
 | 
    tristate "UltraSPARC-III CPU Frequency driver" 
 | 
    help 
 | 
      This adds the CPUFreq driver for UltraSPARC-III processors. 
 | 
  
 | 
      For details, take a look at <file:Documentation/cpu-freq>. 
 | 
  
 | 
      If in doubt, say N. 
 | 
  
 | 
config SPARC_US2E_CPUFREQ 
 | 
    tristate "UltraSPARC-IIe CPU Frequency driver" 
 | 
    help 
 | 
      This adds the CPUFreq driver for UltraSPARC-IIe processors. 
 | 
  
 | 
      For details, take a look at <file:Documentation/cpu-freq>. 
 | 
  
 | 
      If in doubt, say N. 
 | 
endif 
 | 
  
 | 
if SUPERH 
 | 
config SH_CPU_FREQ 
 | 
    tristate "SuperH CPU Frequency driver" 
 | 
    help 
 | 
      This adds the cpufreq driver for SuperH. Any CPU that supports 
 | 
      clock rate rounding through the clock framework can use this 
 | 
      driver. While it will make the kernel slightly larger, this is 
 | 
      harmless for CPUs that don't support rate rounding. The driver 
 | 
      will also generate a notice in the boot log before disabling 
 | 
      itself if the CPU in question is not capable of rate rounding. 
 | 
  
 | 
      For details, take a look at <file:Documentation/cpu-freq>. 
 | 
  
 | 
      If unsure, say N. 
 | 
endif 
 | 
  
 | 
config QORIQ_CPUFREQ 
 | 
    tristate "CPU frequency scaling driver for Freescale QorIQ SoCs" 
 | 
    depends on OF && COMMON_CLK 
 | 
    depends on PPC_E500MC || SOC_LS1021A || ARCH_LAYERSCAPE || COMPILE_TEST 
 | 
    select CLK_QORIQ 
 | 
    help 
 | 
      This adds the CPUFreq driver support for Freescale QorIQ SoCs 
 | 
      which are capable of changing the CPU's frequency dynamically. 
 | 
  
 | 
endif 
 | 
endmenu 
 |