# SPDX-License-Identifier: GPL-2.0-only
#
# ARM CPU Idle drivers
#
config ARM_CPUIDLE
	bool "Generic ARM/ARM64 CPU idle Driver"
	select DT_IDLE_STATES
	select CPU_IDLE_MULTIPLE_DRIVERS
	help
	  Select this to enable generic cpuidle driver for ARM.
	  It provides a generic idle driver whose idle states are configured
	  at run-time through DT nodes. The CPUidle suspend backend is
	  initialized by calling the CPU operations init idle hook
	  provided by architecture code.

config ARM_PSCI_CPUIDLE
	bool "PSCI CPU idle Driver"
	depends on ARM_PSCI_FW
	select DT_IDLE_STATES
	select CPU_IDLE_MULTIPLE_DRIVERS
	help
	  Select this to enable PSCI firmware based CPUidle driver for ARM.
	  It provides an idle driver that is capable of detecting and
	  managing idle states through the PSCI firmware interface.

config ARM_PSCI_CPUIDLE_DOMAIN
	bool "PSCI CPU idle Domain"
	depends on ARM_PSCI_CPUIDLE
	depends on PM_GENERIC_DOMAINS_OF
	default y
	help
	  Select this to enable the PSCI based CPUidle driver to use PM domains,
	  which is needed to support the hierarchical DT based layout of the
	  idle states.

config ARM_BIG_LITTLE_CPUIDLE
	bool "Support for ARM big.LITTLE processors"
	depends on ARCH_VEXPRESS_TC2_PM || ARCH_EXYNOS || COMPILE_TEST
	depends on MCPM && !ARM64
	select ARM_CPU_SUSPEND
	select CPU_IDLE_MULTIPLE_DRIVERS
	select DT_IDLE_STATES
	help
	  Select this option to enable CPU idle driver for big.LITTLE based
	  ARM systems. Driver manages CPUs coordination through MCPM and
	  define different C-states for little and big cores through the
	  multiple CPU idle drivers infrastructure.

config ARM_CLPS711X_CPUIDLE
	bool "CPU Idle Driver for CLPS711X processors"
	depends on ARCH_CLPS711X && !ARM64 || COMPILE_TEST
	help
	  Select this to enable cpuidle on Cirrus Logic CLPS711X SOCs.

config ARM_HIGHBANK_CPUIDLE
	bool "CPU Idle Driver for Calxeda processors"
	depends on ARM_PSCI && !ARM64
	select ARM_CPU_SUSPEND
	help
	  Select this to enable cpuidle on Calxeda processors.

config ARM_KIRKWOOD_CPUIDLE
	bool "CPU Idle Driver for Marvell Kirkwood SoCs"
	depends on (MACH_KIRKWOOD || COMPILE_TEST) && !ARM64
	help
	  This adds the CPU Idle driver for Marvell Kirkwood SoCs.

config ARM_ZYNQ_CPUIDLE
	bool "CPU Idle Driver for Xilinx Zynq processors"
	depends on (ARCH_ZYNQ || COMPILE_TEST) && !ARM64
	help
	  Select this to enable cpuidle on Xilinx Zynq processors.

config ARM_U8500_CPUIDLE
	bool "Cpu Idle Driver for the ST-E u8500 processors"
	depends on ARCH_U8500 && !ARM64
	help
	  Select this to enable cpuidle for ST-E u8500 processors.

config ARM_AT91_CPUIDLE
	bool "Cpu Idle Driver for the AT91 processors"
	default y
	depends on (ARCH_AT91 || COMPILE_TEST) && !ARM64
	help
	  Select this to enable cpuidle for AT91 processors.

config ARM_EXYNOS_CPUIDLE
	bool "Cpu Idle Driver for the Exynos processors"
	depends on (ARCH_EXYNOS || COMPILE_TEST) && !ARM64
	select ARCH_NEEDS_CPU_IDLE_COUPLED if SMP
	help
	  Select this to enable cpuidle for Exynos processors.

config ARM_MVEBU_V7_CPUIDLE
	bool "CPU Idle Driver for mvebu v7 family processors"
	depends on (ARCH_MVEBU || COMPILE_TEST) && !ARM64
	help
	  Select this to enable cpuidle on Armada 370, 38x and XP processors.

config ARM_TEGRA_CPUIDLE
	bool "CPU Idle Driver for NVIDIA Tegra SoCs"
	depends on (ARCH_TEGRA || COMPILE_TEST) && !ARM64 && MMU
	select ARCH_NEEDS_CPU_IDLE_COUPLED if SMP
	select ARM_CPU_SUSPEND
	help
	  Select this to enable cpuidle for NVIDIA Tegra20/30/114/124 SoCs.

config ARM_QCOM_SPM_CPUIDLE
	bool "CPU Idle Driver for Qualcomm Subsystem Power Manager (SPM)"
	depends on (ARCH_QCOM || COMPILE_TEST) && !ARM64 && MMU
	select ARM_CPU_SUSPEND
	select CPU_IDLE_MULTIPLE_DRIVERS
	select DT_IDLE_STATES
	select QCOM_SCM
	select QCOM_SPM
	help
	  Select this to enable cpuidle for Qualcomm processors.
	  The Subsystem Power Manager (SPM) controls low power modes for the
	  CPU and L2 cores. It interface with various system drivers to put
	  the cores in low power modes.
