1# SPDX-License-Identifier: GPL-2.0-only
2#
3# ARM CPU Idle drivers
4#
5config ARM_CPUIDLE
6	bool "Generic ARM CPU idle Driver"
7	depends on ARM
8	select DT_IDLE_STATES
9	select CPU_IDLE_MULTIPLE_DRIVERS
10	help
11	  Select this to enable generic cpuidle driver for ARM.
12	  It provides a generic idle driver whose idle states are configured
13	  at run-time through DT nodes. The CPUidle suspend backend is
14	  initialized by calling the CPU operations init idle hook
15	  provided by architecture code.
16
17config ARM_PSCI_CPUIDLE
18	bool "PSCI CPU idle Driver"
19	depends on ARM_PSCI_FW
20	select DT_IDLE_STATES
21	select CPU_IDLE_MULTIPLE_DRIVERS
22	help
23	  Select this to enable PSCI firmware based CPUidle driver for ARM.
24	  It provides an idle driver that is capable of detecting and
25	  managing idle states through the PSCI firmware interface.
26
27	  The driver has limitations when used with PREEMPT_RT:
28	  - If the idle states are described with the non-hierarchical layout,
29	    all idle states are still available.
30
31	  - If the idle states are described with the hierarchical layout,
32	    only the idle states defined per CPU are available, but not the ones
33	    being shared among a group of CPUs (aka cluster idle states).
34
35config ARM_PSCI_CPUIDLE_DOMAIN
36	bool "PSCI CPU idle Domain"
37	depends on ARM_PSCI_CPUIDLE
38	depends on PM_GENERIC_DOMAINS_OF
39	select DT_IDLE_GENPD
40	default y
41	help
42	  Select this to enable the PSCI based CPUidle driver to use PM domains,
43	  which is needed to support the hierarchical DT based layout of the
44	  idle states.
45
46config ARM_BIG_LITTLE_CPUIDLE
47	bool "Support for ARM big.LITTLE processors"
48	depends on ARCH_VEXPRESS_TC2_PM || ARCH_EXYNOS || COMPILE_TEST
49	depends on MCPM && !ARM64
50	select ARM_CPU_SUSPEND
51	select CPU_IDLE_MULTIPLE_DRIVERS
52	select DT_IDLE_STATES
53	help
54	  Select this option to enable CPU idle driver for big.LITTLE based
55	  ARM systems. Driver manages CPUs coordination through MCPM and
56	  define different C-states for little and big cores through the
57	  multiple CPU idle drivers infrastructure.
58
59config ARM_CLPS711X_CPUIDLE
60	bool "CPU Idle Driver for CLPS711X processors"
61	depends on ARCH_CLPS711X && !ARM64 || COMPILE_TEST
62	help
63	  Select this to enable cpuidle on Cirrus Logic CLPS711X SOCs.
64
65config ARM_HIGHBANK_CPUIDLE
66	bool "CPU Idle Driver for Calxeda processors"
67	depends on ARM_PSCI && !ARM64
68	select ARM_CPU_SUSPEND
69	help
70	  Select this to enable cpuidle on Calxeda processors.
71
72config ARM_KIRKWOOD_CPUIDLE
73	bool "CPU Idle Driver for Marvell Kirkwood SoCs"
74	depends on (MACH_KIRKWOOD || COMPILE_TEST) && !ARM64
75	help
76	  This adds the CPU Idle driver for Marvell Kirkwood SoCs.
77
78config ARM_ZYNQ_CPUIDLE
79	bool "CPU Idle Driver for Xilinx Zynq processors"
80	depends on (ARCH_ZYNQ || COMPILE_TEST) && !ARM64
81	help
82	  Select this to enable cpuidle on Xilinx Zynq processors.
83
84config ARM_U8500_CPUIDLE
85	bool "Cpu Idle Driver for the ST-E u8500 processors"
86	depends on ARCH_U8500 && !ARM64
87	help
88	  Select this to enable cpuidle for ST-E u8500 processors.
89
90config ARM_AT91_CPUIDLE
91	bool "Cpu Idle Driver for the AT91 processors"
92	default y
93	depends on (ARCH_AT91 || COMPILE_TEST) && !ARM64
94	help
95	  Select this to enable cpuidle for AT91 processors.
96
97config ARM_EXYNOS_CPUIDLE
98	bool "Cpu Idle Driver for the Exynos processors"
99	depends on (ARCH_EXYNOS || COMPILE_TEST) && !ARM64
100	select ARCH_NEEDS_CPU_IDLE_COUPLED if SMP
101	help
102	  Select this to enable cpuidle for Exynos processors.
103
104config ARM_MVEBU_V7_CPUIDLE
105	bool "CPU Idle Driver for mvebu v7 family processors"
106	depends on (ARCH_MVEBU || COMPILE_TEST) && !ARM64
107	help
108	  Select this to enable cpuidle on Armada 370, 38x and XP processors.
109
110config ARM_TEGRA_CPUIDLE
111	bool "CPU Idle Driver for NVIDIA Tegra SoCs"
112	depends on (ARCH_TEGRA || COMPILE_TEST) && !ARM64 && MMU
113	depends on ARCH_SUSPEND_POSSIBLE
114	select ARCH_NEEDS_CPU_IDLE_COUPLED if SMP
115	select ARM_CPU_SUSPEND
116	help
117	  Select this to enable cpuidle for NVIDIA Tegra20/30/114/124 SoCs.
118
119config ARM_QCOM_SPM_CPUIDLE
120	bool "CPU Idle Driver for Qualcomm Subsystem Power Manager (SPM)"
121	depends on (ARCH_QCOM || COMPILE_TEST) && !ARM64 && MMU
122	depends on ARCH_SUSPEND_POSSIBLE
123	select ARM_CPU_SUSPEND
124	select CPU_IDLE_MULTIPLE_DRIVERS
125	select DT_IDLE_STATES
126	select QCOM_SCM
127	select QCOM_SPM
128	help
129	  Select this to enable cpuidle for Qualcomm processors.
130	  The Subsystem Power Manager (SPM) controls low power modes for the
131	  CPU and L2 cores. It interface with various system drivers to put
132	  the cores in low power modes.
133