# SPDX-License-Identifier: GPL-2.0-only
#
# ARM CPU Frequency scaling drivers
#

config ACPI_CPPC_CPUFREQ
	tristate "CPUFreq driver based on the ACPI CPPC spec"
	depends on ACPI_PROCESSOR
	select ACPI_CPPC_LIB
	help
	  This adds a CPUFreq driver which uses CPPC methods
	  as described in the ACPIv5.1 spec. CPPC stands for
	  Collaborative Processor Performance Controls. It
	  is based on an abstract continuous scale of CPU
	  performance values which allows the remote power
	  processor to flexibly optimize for power and
	  performance. CPPC relies on power management firmware
	  support for its operation.

	  If in doubt, say N.

config ARM_ARMADA_37XX_CPUFREQ
	tristate "Armada 37xx CPUFreq support"
	depends on ARCH_MVEBU && CPUFREQ_DT
	help
	  This adds the CPUFreq driver support for Marvell Armada 37xx SoCs.
	  The Armada 37xx PMU supports 4 frequency and VDD levels.

config ARM_ARMADA_8K_CPUFREQ
	tristate "Armada 8K CPUFreq driver"
	depends on ARCH_MVEBU && CPUFREQ_DT
	help
	  This enables the CPUFreq driver support for Marvell
	  Armada8k SOCs.
	  Armada8K device has the AP806 which supports scaling
	  to any full integer divider.

	  If in doubt, say N.

# big LITTLE core layer and glue drivers
config ARM_BIG_LITTLE_CPUFREQ
	tristate "Generic ARM big LITTLE CPUfreq driver"
	depends on ARM_CPU_TOPOLOGY && HAVE_CLK
	select PM_OPP
	help
	  This enables the Generic CPUfreq driver for ARM big.LITTLE platforms.

config ARM_SCPI_CPUFREQ
	tristate "SCPI based CPUfreq driver"
	depends on ARM_SCPI_PROTOCOL && COMMON_CLK_SCPI
	help
	  This adds the CPUfreq driver support for ARM platforms using SCPI
	  protocol for CPU power management.

	  This driver uses SCPI Message Protocol driver to interact with the
	  firmware providing the CPU DVFS functionality.

config ARM_VEXPRESS_SPC_CPUFREQ
	tristate "Versatile Express SPC based CPUfreq driver"
	depends on ARM_BIG_LITTLE_CPUFREQ && ARCH_VEXPRESS_SPC
	help
	  This add the CPUfreq driver support for Versatile Express
	  big.LITTLE platforms using SPC for power management.

config ARM_BRCMSTB_AVS_CPUFREQ
	tristate "Broadcom STB AVS CPUfreq driver"
	depends on ARCH_BRCMSTB || COMPILE_TEST
	default y
	help
	  Some Broadcom STB SoCs use a co-processor running proprietary firmware
	  ("AVS") to handle voltage and frequency scaling. This driver provides
	  a standard CPUfreq interface to to the firmware.

	  Say Y, if you have a Broadcom SoC with AVS support for DFS or DVFS.

config ARM_HIGHBANK_CPUFREQ
	tristate "Calxeda Highbank-based"
	depends on ARCH_HIGHBANK && CPUFREQ_DT && REGULATOR
	default m
	help
	  This adds the CPUFreq driver for Calxeda Highbank SoC
	  based boards.

	  If in doubt, say N.

config ARM_IMX6Q_CPUFREQ
	tristate "Freescale i.MX6 cpufreq support"
	depends on ARCH_MXC
	depends on REGULATOR_ANATOP
	select PM_OPP
	help
	  This adds cpufreq driver support for Freescale i.MX6 series SoCs.

	  If in doubt, say N.

config ARM_IMX_CPUFREQ_DT
	tristate "Freescale i.MX8M cpufreq support"
	depends on ARCH_MXC && CPUFREQ_DT
	help
	  This adds cpufreq driver support for Freescale i.MX8M series SoCs,
	  based on cpufreq-dt.

	  If in doubt, say N.

config ARM_KIRKWOOD_CPUFREQ
	def_bool MACH_KIRKWOOD
	help
	  This adds the CPUFreq driver for Marvell Kirkwood
	  SoCs.

config ARM_MEDIATEK_CPUFREQ
	tristate "CPU Frequency scaling support for MediaTek SoCs"
	depends on ARCH_MEDIATEK && REGULATOR
	select PM_OPP
	help
	  This adds the CPUFreq driver support for MediaTek SoCs.

config ARM_OMAP2PLUS_CPUFREQ
	bool "TI OMAP2+"
	depends on ARCH_OMAP2PLUS
	default ARCH_OMAP2PLUS

config ARM_QCOM_CPUFREQ_KRYO
	tristate "Qualcomm Kryo based CPUFreq"
	depends on ARM64
	depends on QCOM_QFPROM
	depends on QCOM_SMEM
	select PM_OPP
	help
	  This adds the CPUFreq driver for Qualcomm Kryo SoC based boards.

	  If in doubt, say N.

config ARM_QCOM_CPUFREQ_HW
	tristate "QCOM CPUFreq HW driver"
	depends on ARCH_QCOM || COMPILE_TEST
	help
	  Support for the CPUFreq HW driver.
	  Some QCOM chipsets have a HW engine to offload the steps
	  necessary for changing the frequency of the CPUs. Firmware loaded
	  in this engine exposes a programming interface to the OS.
	  The driver implements the cpufreq interface for this HW engine.
	  Say Y if you want to support CPUFreq HW.

config ARM_RASPBERRYPI_CPUFREQ
	tristate "Raspberry Pi cpufreq support"
	depends on CLK_RASPBERRYPI || COMPILE_TEST
	help
	  This adds the CPUFreq driver for Raspberry Pi

	  If in doubt, say N.

config ARM_S3C_CPUFREQ
	bool
	help
	  Internal configuration node for common cpufreq on Samsung SoC

config ARM_S3C24XX_CPUFREQ
	bool "CPUfreq driver for Samsung S3C24XX series CPUs (EXPERIMENTAL)"
	depends on ARCH_S3C24XX
	select ARM_S3C_CPUFREQ
	help
	  This enables the CPUfreq driver for the Samsung S3C24XX family
	  of CPUs.

	  For details, take a look at <file:Documentation/cpu-freq>.

	  If in doubt, say N.

config ARM_S3C24XX_CPUFREQ_DEBUG
	bool "Debug CPUfreq Samsung driver core"
	depends on ARM_S3C24XX_CPUFREQ
	help
	  Enable s3c_freq_dbg for the Samsung S3C CPUfreq core

config ARM_S3C24XX_CPUFREQ_IODEBUG
	bool "Debug CPUfreq Samsung driver IO timing"
	depends on ARM_S3C24XX_CPUFREQ
	help
	  Enable s3c_freq_iodbg for the Samsung S3C CPUfreq core

config ARM_S3C24XX_CPUFREQ_DEBUGFS
	bool "Export debugfs for CPUFreq"
	depends on ARM_S3C24XX_CPUFREQ && DEBUG_FS
	help
	  Export status information via debugfs.

config ARM_S3C2410_CPUFREQ
	bool
	depends on ARM_S3C24XX_CPUFREQ && CPU_S3C2410
	select S3C2410_CPUFREQ_UTILS
	help
	  CPU Frequency scaling support for S3C2410

config ARM_S3C2412_CPUFREQ
	bool
	depends on ARM_S3C24XX_CPUFREQ && CPU_S3C2412
	default y
	select S3C2412_IOTIMING
	help
	  CPU Frequency scaling support for S3C2412 and S3C2413 SoC CPUs.

config ARM_S3C2416_CPUFREQ
	bool "S3C2416 CPU Frequency scaling support"
	depends on CPU_S3C2416
	help
	  This adds the CPUFreq driver for the Samsung S3C2416 and
	  S3C2450 SoC. The S3C2416 supports changing the rate of the
	  armdiv clock source and also entering a so called dynamic
	  voltage scaling mode in which it is possible to reduce the
	  core voltage of the CPU.

	  If in doubt, say N.

config ARM_S3C2416_CPUFREQ_VCORESCALE
	bool "Allow voltage scaling for S3C2416 arm core"
	depends on ARM_S3C2416_CPUFREQ && REGULATOR
	help
	  Enable CPU voltage scaling when entering the dvs mode.
	  It uses information gathered through existing hardware and
	  tests but not documented in any datasheet.

	  If in doubt, say N.

config ARM_S3C2440_CPUFREQ
	bool "S3C2440/S3C2442 CPU Frequency scaling support"
	depends on ARM_S3C24XX_CPUFREQ && (CPU_S3C2440 || CPU_S3C2442)
	select S3C2410_CPUFREQ_UTILS
	default y
	help
	  CPU Frequency scaling support for S3C2440 and S3C2442 SoC CPUs.

config ARM_S3C64XX_CPUFREQ
	bool "Samsung S3C64XX"
	depends on CPU_S3C6410
	default y
	help
	  This adds the CPUFreq driver for Samsung S3C6410 SoC.

	  If in doubt, say N.

config ARM_S5PV210_CPUFREQ
	bool "Samsung S5PV210 and S5PC110"
	depends on CPU_S5PV210
	default y
	help
	  This adds the CPUFreq driver for Samsung S5PV210 and
	  S5PC110 SoCs.

	  If in doubt, say N.

config ARM_SA1100_CPUFREQ
	bool

config ARM_SA1110_CPUFREQ
	bool

config ARM_SCMI_CPUFREQ
	tristate "SCMI based CPUfreq driver"
	depends on ARM_SCMI_PROTOCOL || COMPILE_TEST
	select PM_OPP
	help
	  This adds the CPUfreq driver support for ARM platforms using SCMI
	  protocol for CPU power management.

	  This driver uses SCMI Message Protocol driver to interact with the
	  firmware providing the CPU DVFS functionality.

config ARM_SPEAR_CPUFREQ
	bool "SPEAr CPUFreq support"
	depends on PLAT_SPEAR
	default y
	help
	  This adds the CPUFreq driver support for SPEAr SOCs.

config ARM_STI_CPUFREQ
	tristate "STi CPUFreq support"
	depends on SOC_STIH407
	help
	  This driver uses the generic OPP framework to match the running
	  platform with a predefined set of suitable values.  If not provided
	  we will fall-back so safe-values contained in Device Tree.  Enable
	  this config option if you wish to add CPUFreq support for STi based
	  SoCs.

config ARM_TANGO_CPUFREQ
	bool
	depends on CPUFREQ_DT && ARCH_TANGO
	default y

config ARM_TEGRA20_CPUFREQ
	tristate "Tegra20 CPUFreq support"
	depends on ARCH_TEGRA
	default y
	help
	  This adds the CPUFreq driver support for Tegra20 SOCs.

config ARM_TEGRA124_CPUFREQ
	bool "Tegra124 CPUFreq support"
	depends on ARCH_TEGRA && CPUFREQ_DT
	default y
	help
	  This adds the CPUFreq driver support for Tegra124 SOCs.

config ARM_TEGRA186_CPUFREQ
	tristate "Tegra186 CPUFreq support"
	depends on ARCH_TEGRA && TEGRA_BPMP
	help
	  This adds the CPUFreq driver support for Tegra186 SOCs.

config ARM_TI_CPUFREQ
	bool "Texas Instruments CPUFreq support"
	depends on ARCH_OMAP2PLUS
	help
	  This driver enables valid OPPs on the running platform based on
	  values contained within the SoC in use. Enable this in order to
	  use the cpufreq-dt driver on all Texas Instruments platforms that
	  provide dt based operating-points-v2 tables with opp-supported-hw
	  data provided. Required for cpufreq support on AM335x, AM437x,
	  DRA7x, and AM57x platforms.

config ARM_PXA2xx_CPUFREQ
	tristate "Intel PXA2xx CPUfreq driver"
	depends on PXA27x || PXA25x
	help
	  This add the CPUFreq driver support for Intel PXA2xx SOCs.

	  If in doubt, say N.
