summaryrefslogtreecommitdiff
path: root/arch/arm/mach-imx
diff options
context:
space:
mode:
authorAnson Huang <Anson.Huang@nxp.com>2016-01-29 13:59:20 +0800
committerJason Liu <jason.hui.liu@nxp.com>2019-02-12 10:31:21 +0800
commitfebbdd7d6643ebb03bcf63a53a8e7e58b16416de (patch)
treed3f16c9247b8b435d04f157f797b00dce4fafa30 /arch/arm/mach-imx
parent75c84ed63b11ae113d13f3e5ce96c0559da07eea (diff)
MLK-12349 ARM: imx: skip RBC workaround for standby mode on i.MX7D
For standby mode, RBC workaround is NOT necessary as ARM platform is NOT powered down; Correct GIC register offset(0x1000) for disabling distributor. Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
Diffstat (limited to 'arch/arm/mach-imx')
-rw-r--r--arch/arm/mach-imx/cpuidle-imx7d.c2
-rw-r--r--arch/arm/mach-imx/imx7d_low_power_idle.S6
-rw-r--r--arch/arm/mach-imx/suspend-imx7.S15
3 files changed, 14 insertions, 9 deletions
diff --git a/arch/arm/mach-imx/cpuidle-imx7d.c b/arch/arm/mach-imx/cpuidle-imx7d.c
index 8f693729d786..371cfd459eb6 100644
--- a/arch/arm/mach-imx/cpuidle-imx7d.c
+++ b/arch/arm/mach-imx/cpuidle-imx7d.c
@@ -150,7 +150,7 @@ static struct cpuidle_driver imx7d_cpuidle_driver = {
/* LOW POWER IDLE */
{
.exit_latency = 500,
- .target_residency = 1000,
+ .target_residency = 800,
.flags = CPUIDLE_FLAG_TIMER_STOP,
.enter = imx7d_enter_low_power_idle,
.name = "LOW-POWER-IDLE",
diff --git a/arch/arm/mach-imx/imx7d_low_power_idle.S b/arch/arm/mach-imx/imx7d_low_power_idle.S
index 38b6541c39d6..59cf4f4d7150 100644
--- a/arch/arm/mach-imx/imx7d_low_power_idle.S
+++ b/arch/arm/mach-imx/imx7d_low_power_idle.S
@@ -628,7 +628,8 @@ last_cpu:
ldr r10, [r0, #PM_INFO_MX7D_GIC_DIST_V_OFFSET]
ldr r7, =0x0
- str r7, [r10]
+ ldr r8, =0x1000
+ str r7, [r10, r8]
ldr r10, [r0, #PM_INFO_MX7D_GPC_V_OFFSET]
ldr r4, [r10, #MX7D_GPC_IMR1]
@@ -745,7 +746,8 @@ do_exit_wfi:
ldr r10, [r0, #PM_INFO_MX7D_GIC_DIST_V_OFFSET]
ldr r7, =0x1
- str r7, [r10]
+ ldr r8, =0x1000
+ str r7, [r10, r8]
/* clear lpi enter flag */
ldr r7, =0x0
str r7, [r0, #PM_INFO_PM_INFO_LPI_ENTER_OFFSET]
diff --git a/arch/arm/mach-imx/suspend-imx7.S b/arch/arm/mach-imx/suspend-imx7.S
index 7a4ca800ab8a..5f4e31152a69 100644
--- a/arch/arm/mach-imx/suspend-imx7.S
+++ b/arch/arm/mach-imx/suspend-imx7.S
@@ -579,11 +579,13 @@ wait_shutdown:
ddr_only_self_refresh:
ddrc_enter_self_refresh
+ b wfi
ddr_retention_enter_out:
ldr r11, [r0, #PM_INFO_MX7_GIC_DIST_V_OFFSET]
ldr r7, =0x0
- str r7, [r11]
+ ldr r8, =0x1000
+ str r7, [r11, r8]
ldr r11, [r0, #PM_INFO_MX7_GPC_V_OFFSET]
ldr r4, [r11, #MX7D_GPC_IMR1]
@@ -634,7 +636,7 @@ ddr_retention_enter_out:
rbc_loop:
subs r7, r7, #0x1
bne rbc_loop
-
+wfi:
/* Zzz, enter stop mode */
wfi
nop
@@ -655,16 +657,17 @@ wfi_ddr_self_refresh_out:
ddrc_exit_self_refresh
wfi_ddr_retention_out:
- ldr r11, [r0, #PM_INFO_MX7_GIC_DIST_V_OFFSET]
- ldr r7, =0x1
- str r7, [r11]
-
/* check whether it is a standby mode */
ldr r11, [r0, #PM_INFO_MX7_GPC_V_OFFSET]
ldr r7, [r11, #GPC_PGC_C0]
cmp r7, #0
beq standby_out
+ ldr r11, [r0, #PM_INFO_MX7_GIC_DIST_V_OFFSET]
+ ldr r7, =0x1
+ ldr r8, =0x1000
+ str r7, [r11, r8]
+
restore_ttbr1
standby_out:
pop {r4-r12}