exynos5 : cpu_suspend for cpuidle broken
Bug #1171253 reported by
Daniel Lezcano
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Linaro PMWG Kernel |
Confirmed
|
Critical
|
Rony Nandy |
Bug Description
When the cpu exits the AFTR state after the cpu_suspend. The kernel hangs.
How to reproduce ?
set cpu1 offline:
echo 0 > /sys/devices/
Wait awhile the cpu0 enters the state1 then => hang !
Changed in linaro-power-kernel: | |
importance: | Undecided → Critical |
Changed in linaro-power-kernel: | |
assignee: | nobody → Chander Mohan Kashyap (chander-kashyap) |
To post a comment you must log in.
It has two reasons: arm/mach- exynos/ cpuidle. c b/arch/ arm/mach- exynos/ cpuidle. c arm/mach- exynos/ cpuidle. c arm/mach- exynos/ cpuidle. c
1: flush_cache_all has been replaced by flush_cache_louis in "suspend.c". This is not working on exynos5250. So when cpu0 enters cpuidle it hangs.
Fix: The fix for this is to call flush_cache_all in "cpuidle.c".
diff --git a/arch/
index fcfe025..a70b53a 100644
--- a/arch/
+++ b/arch/
@@ -21,6 +21,7 @@
#include <asm/suspend.h>
#include <asm/unified.h>
#include <asm/cpuidle.h>
+#include <asm/cacheflush.h>
#include <mach/regs-clock.h>
#include <mach/regs-pmu.h>
@@ -89,6 +90,8 @@ static void restore_ cpu_arch_ register( void)
static int idle_finisher( unsigned long flags) exynos5250( ))
cpu_do_ idle();
{
+ if (soc_is_
+ flush_cache_all();
return 1;
}
2: u-boot in arndaleboard with ubuntu package is booting cpu in HYP mode. so while coming out of cpuidle cpu0 in not in HYP mode or some other misbehaviour.
Fix: use mainline u-boot which is not booting cpu in HYP mode.
As of now diden't found solution to fix cpuidle with cpus in HYP mode.