ARM: imx: add cpu idle support for i.MX6SLL

i.MX6SLL supports cpu idle with ARM power gated,
it can reuse i.MX6SX's cpu idle driver to support
below 3 states of cpu idle:

state0: WFI;
state1: WAIT mode with ARM power on;
state2: WAIT mode with ARM power off.

L2_PGE in GPC_CNTR needs to be cleared to support
state2 cpu idle.

Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
This commit is contained in:
Anson Huang 2018-06-03 10:33:45 +08:00 committed by Shawn Guo
parent c791bbbf81
commit e7fa1fb39b
3 changed files with 7 additions and 3 deletions

View File

@ -25,8 +25,8 @@ obj-$(CONFIG_MXC_DEBUG_BOARD) += 3ds_debugboard.o
ifeq ($(CONFIG_CPU_IDLE),y) ifeq ($(CONFIG_CPU_IDLE),y)
obj-$(CONFIG_SOC_IMX5) += cpuidle-imx5.o obj-$(CONFIG_SOC_IMX5) += cpuidle-imx5.o
obj-$(CONFIG_SOC_IMX6Q) += cpuidle-imx6q.o obj-$(CONFIG_SOC_IMX6Q) += cpuidle-imx6q.o
obj-$(CONFIG_SOC_IMX6SL) += cpuidle-imx6sl.o obj-$(CONFIG_SOC_IMX6SL) += cpuidle-imx6sl.o cpuidle-imx6sx.o
obj-$(CONFIG_SOC_IMX6SLL) += cpuidle-imx6sl.o obj-$(CONFIG_SOC_IMX6SLL) += cpuidle-imx6sl.o cpuidle-imx6sx.o
obj-$(CONFIG_SOC_IMX6SX) += cpuidle-imx6sx.o obj-$(CONFIG_SOC_IMX6SX) += cpuidle-imx6sx.o
obj-$(CONFIG_SOC_IMX6UL) += cpuidle-imx6sx.o obj-$(CONFIG_SOC_IMX6UL) += cpuidle-imx6sx.o
endif endif

View File

@ -103,6 +103,7 @@ int __init imx6sx_cpuidle_init(void)
{ {
imx6_set_int_mem_clk_lpm(true); imx6_set_int_mem_clk_lpm(true);
imx6_enable_rbc(false); imx6_enable_rbc(false);
imx_gpc_set_l2_mem_power_in_lpm(false);
/* /*
* set ARM power up/down timing to the fastest, * set ARM power up/down timing to the fastest,
* sw2iso and sw can be set to one 32K cycle = 31us * sw2iso and sw can be set to one 32K cycle = 31us

View File

@ -42,7 +42,10 @@ static void __init imx6sl_init_late(void)
if (IS_ENABLED(CONFIG_ARM_IMX6Q_CPUFREQ)) if (IS_ENABLED(CONFIG_ARM_IMX6Q_CPUFREQ))
platform_device_register_simple("imx6q-cpufreq", -1, NULL, 0); platform_device_register_simple("imx6q-cpufreq", -1, NULL, 0);
imx6sl_cpuidle_init(); if (cpu_is_imx6sl())
imx6sl_cpuidle_init();
else
imx6sx_cpuidle_init();
} }
static void __init imx6sl_init_machine(void) static void __init imx6sl_init_machine(void)