# 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_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.
