9
0
Fork 0

ARM/MXS/i.MX28: distinguish POR and wake-up event correctly

When the built-in RTC in the i.MX28 is programmed to wake-up the SoC, the RTC
reports two events: RST and WAKE. RST is okay in this case, because the PMIC
was really powered down. But the real event is the WAKE from the RTC and
should have precedence over the RST event. So, report the WAKE event for this
special case.

Signed-off-by: Juergen Beisert <jbe@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Juergen Beisert 2012-11-30 12:14:04 +01:00 committed by Sascha Hauer
parent 7ce8a13c26
commit 17176c2e2b
1 changed files with 11 additions and 0 deletions

View File

@ -82,6 +82,17 @@ static void __maybe_unused imx28_detect_reset_source(const struct imx28_wd *p)
if (reg & MXS_RTC_PERSISTENT0_EXT_RST) {
writel(MXS_RTC_PERSISTENT0_EXT_RST,
p->regs + MXS_RTC_PERSISTENT0 + MXS_RTC_CLR_ADDR);
/*
* if the RTC has woken up the SoC, additionally the ALARM_WAKE
* bit is set. This bit should have precedence, because it
* reports the real event, why we are here.
*/
if (reg & MXS_RTC_PERSISTENT0_ALARM_WAKE) {
writel(MXS_RTC_PERSISTENT0_ALARM_WAKE,
p->regs + MXS_RTC_PERSISTENT0 + MXS_RTC_CLR_ADDR);
set_reset_source(RESET_WKE);
return;
}
set_reset_source(RESET_POR);
return;
}