@@ -323,8 +323,9 @@ static void exynos4_pm_prepare(void)
{
u32 tmp;
- s3c_pm_do_save(exynos4_core_save, ARRAY_SIZE(exynos4_core_save));
+#ifdef CONFIG_CACHE_L2X0
s3c_pm_do_save(exynos4_l2cc_save, ARRAY_SIZE(exynos4_l2cc_save));
+#endif
tmp = __raw_readl(S5P_INFORM1);
@@ -389,6 +390,10 @@ static int exynos4_pm_resume(struct sys_device *dev)
exynos4_scu_enable(S5P_VA_SCU);
#ifdef CONFIG_CACHE_L2X0
+ /* Restore the cache controller registers only if it is not enabled already*/
+ if((__raw_readl(S5P_VA_L2CC + L2X0_CTRL)&1))
+ return 0;
+
s3c_pm_do_restore_core(exynos4_l2cc_save, ARRAY_SIZE(exynos4_l2cc_save));
outer_inv_all();
/* enable L2X0*/
@@ -398,9 +403,16 @@ static int exynos4_pm_resume(struct sys_device *dev)
return 0;
}
+static int exynos4_pm_suspend(struct sys_device *dev,pm_message_t state)
+{
+ s3c_pm_do_save(exynos4_core_save, ARRAY_SIZE(exynos4_core_save));
+ return 0;
+}
+
static struct sysdev_driver exynos4_pm_driver = {
.add = exynos4_pm_add,
.resume = exynos4_pm_resume,
+ .suspend = exynos4_pm_suspend,
};
static __init int exynos4_pm_drvinit(void)