msm: pm-8x60: Decrement L2 reset counter on failed power collapses
The L2 reset counter must be decremented to prevent TZ from invalidating
L2 when Power collapse fails because of a pending interrupt.
Signed-off-by: Maheshkumar Sivasubramanian <msivasub@codeaurora.org>
diff --git a/arch/arm/mach-msm/rpm_resources.c b/arch/arm/mach-msm/rpm_resources.c
index 20239d6..b7508f7 100644
--- a/arch/arm/mach-msm/rpm_resources.c
+++ b/arch/arm/mach-msm/rpm_resources.c
@@ -530,11 +530,23 @@
return rc;
}
+static void msm_rpmrs_L2_restore(struct msm_rpmrs_limits *limits,
+ bool notify_rpm, bool collapsed)
+{
+ msm_spm_l2_set_low_power_mode(MSM_SPM_MODE_DISABLED, notify_rpm);
+ if (!collapsed && (limits->l2_cache == MSM_RPMRS_L2_CACHE_HSFS_OPEN))
+ writel_relaxed(--msm_rpmrs_l2_reset_count,
+ msm_rpmrs_l2_counter_addr);
+}
#else
static int msm_rpmrs_flush_L2(struct msm_rpmrs_limits *limits, int notify_rpm)
{
return 0;
}
+static void msm_rpmrs_L2_restore(struct msm_rpmrs_limits *limits,
+ bool notify_rpm, bool collapsed)
+{
+}
#endif
static int msm_rpmrs_flush_buffer(
@@ -868,12 +880,12 @@
return rc;
}
-void msm_rpmrs_exit_sleep(struct msm_rpmrs_limits *limits,
- bool from_idle, bool notify_rpm)
+void msm_rpmrs_exit_sleep(struct msm_rpmrs_limits *limits, bool from_idle,
+ bool notify_rpm, bool collapsed)
{
/* Disable L2 for now, we dont want L2 to do retention by default */
- msm_spm_l2_set_low_power_mode(MSM_SPM_MODE_DISABLED, notify_rpm);
+ msm_rpmrs_L2_restore(limits, notify_rpm, collapsed);
if (msm_rpmrs_use_mpm(limits))
msm_mpm_exit_sleep(from_idle);