| 1 | # SPDX-License-Identifier: GPL-2.0-only |
| 2 | # |
| 3 | # ARM CPU Idle drivers |
| 4 | # |
| 5 | config 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 | |
| 17 | config 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 | |
| 35 | config 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 | |
| 46 | config 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 | |
| 59 | config 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 | |
| 65 | config 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 | |
| 72 | config 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 | |
| 78 | config 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 | |
| 84 | config 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 | |
| 90 | config 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 | |
| 97 | config 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 | |
| 104 | config 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 | |
| 110 | config 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 | |
| 119 | config 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 | depends on QCOM_SCM=y |
| 124 | depends on QCOM_SPM=y |
| 125 | select ARM_CPU_SUSPEND |
| 126 | select CPU_IDLE_MULTIPLE_DRIVERS |
| 127 | select DT_IDLE_STATES |
| 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. |