Hi,
Rask Ingemann Lambertsen wrote:
On Thu, Jun 18, 2009 at 07:52:11PM +0200, Michael Trimarchi wrote:
I look at the ticket. Is the order of restoring
of clockdivn and mpllcon important?
In danish, we have an expression which translates approximately to "being
unable to see the wood for mere trees". The bug is not so much the order in
which clockdivn and mpllcon are restored, but that they are not being saved
and restored at all across suspends. You even posted the buggy code:
#ifndef CONFIG_CPU_FREQ
SAVE_ITEM(S3C2410_CLKDIVN),
SAVE_ITEM(S3C2410_MPLLCON),
SAVE_ITEM(S3C2410_REFRESH),
#endif
The obvious patch indeed makes suspend/resume work again:
diff --git a/arch/arm/plat-s3c24xx/pm.c b/arch/arm/plat-s3c24xx/pm.c
index 834e54d..e21a2be 100644
--- a/arch/arm/plat-s3c24xx/pm.c
+++ b/arch/arm/plat-s3c24xx/pm.c
@@ -66,9 +66,9 @@ static struct sleep_save core_save[] = {
SAVE_ITEM(S3C2410_BANKCON3),
SAVE_ITEM(S3C2410_BANKCON4),
SAVE_ITEM(S3C2410_BANKCON5),
-#ifndef CONFIG_CPU_FREQ
+#if (!defined(CONFIG_CPU_FREQ)) || defined(CONFIG_CPU_FREQ_S3C24XX)
SAVE_ITEM(S3C2410_CLKDIVN),
SAVE_ITEM(S3C2410_MPLLCON),
SAVE_ITEM(S3C2410_REFRESH),
#endif
Ok, I miss the ndef :(. So the register was not saved
Do you have take a look to the cpufreq framework for s3c24xx posted in
the arm mailing list?
It is better to do this things in suspend/resume part of frequnecy
scaling driver?
Regards Michael
We should probably save and restore CAMDIVN too, but I haven't tested
that yet.