* [PATCH 0/4 v2] add wakup source @ 2012-10-13 13:46 Jean-Christophe PLAGNIOL-VILLARD 2012-10-13 13:49 ` [PATCH 1/4] reset_source: make enum and string human readable Jean-Christophe PLAGNIOL-VILLARD 0 siblings, 1 reply; 9+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-13 13:46 UTC (permalink / raw) To: barebox HI, v2: update against next add wakeup source and amek power source human readable The following changes since commit f0c7ee4201d56ec87c8b0deff3a481644a34bb9d: Merge branch 'for-next-1/karo-tx53' into next (2012-10-13 14:24:49 +0200) are available in the git repository at: git://git.jcrosoft.org/barebox.git delivery/reset_source for you to fetch changes up to f4d6ae60c34f1e01bf913e3b8166b478e1b55fb2: at91: add reset and wakeup source detection support (2012-10-13 13:45:02 +0800) ---------------------------------------------------------------- Jean-Christophe PLAGNIOL-VILLARD (4): reset_source: make enum and string human readable reset_source: add software reset as possible source reset_resource: add wakeup source at91: add reset and wakeup source detection support arch/arm/mach-at91/Makefile | 1 + arch/arm/mach-at91/include/mach/at91_shdwc.h | 40 ++++++++++++++++++++++++++++++++++++++++ arch/arm/mach-at91/reset_source.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ arch/arm/mach-imx/imx1.c | 6 +++--- arch/arm/mach-samsung/reset_source.c | 6 +++--- common/reset_source.c | 32 +++++++++++++++++++++++++------- drivers/watchdog/im28wd.c | 6 +++--- drivers/watchdog/imxwd.c | 6 +++--- include/reset_source.h | 22 +++++++++++++++++----- 9 files changed, 154 insertions(+), 24 deletions(-) create mode 100644 arch/arm/mach-at91/include/mach/at91_shdwc.h create mode 100644 arch/arm/mach-at91/reset_source.c Best Regards, J. _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/4] reset_source: make enum and string human readable 2012-10-13 13:46 [PATCH 0/4 v2] add wakup source Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-13 13:49 ` Jean-Christophe PLAGNIOL-VILLARD 2012-10-13 13:49 ` [PATCH 2/4] reset_source: add software reset as possible source Jean-Christophe PLAGNIOL-VILLARD ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-13 13:49 UTC (permalink / raw) To: barebox Today we need to read the code to understand it Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- arch/arm/mach-imx/imx1.c | 6 +++--- arch/arm/mach-samsung/reset_source.c | 6 +++--- common/reset_source.c | 14 +++++++------- drivers/watchdog/im28wd.c | 6 +++--- drivers/watchdog/imxwd.c | 6 +++--- include/reset_source.h | 10 +++++----- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/arch/arm/mach-imx/imx1.c b/arch/arm/mach-imx/imx1.c index 18901ea..53ee788 100644 --- a/arch/arm/mach-imx/imx1.c +++ b/arch/arm/mach-imx/imx1.c @@ -29,13 +29,13 @@ static void imx1_detect_reset_source(void) switch (val) { case RSR_EXR: - set_reset_source(RESET_RST); + set_reset_source(RESET_RESET); return; case RSR_WDR: - set_reset_source(RESET_WDG); + set_reset_source(RESET_WATCHDOG); return; case 0: - set_reset_source(RESET_POR); + set_reset_source(RESET_POWER); return; default: /* else keep the default 'unknown' state */ diff --git a/arch/arm/mach-samsung/reset_source.c b/arch/arm/mach-samsung/reset_source.c index 2456e3f..e2b8808 100644 --- a/arch/arm/mach-samsung/reset_source.c +++ b/arch/arm/mach-samsung/reset_source.c @@ -29,21 +29,21 @@ static int s3c_detect_reset_source(void) u32 reg = readl(S3C_GPIO_BASE + S3C2440_GSTATUS2); if (reg & S3C2440_GSTATUS2_PWRST) { - set_reset_source(RESET_POR); + set_reset_source(RESET_POWER); writel(S3C2440_GSTATUS2_PWRST, S3C_GPIO_BASE + S3C2440_GSTATUS2); return 0; } if (reg & S3C2440_GSTATUS2_SLEEPRST) { - set_reset_source(RESET_WKE); + set_reset_source(RESET_WAKEUP); writel(S3C2440_GSTATUS2_SLEEPRST, S3C_GPIO_BASE + S3C2440_GSTATUS2); return 0; } if (reg & S3C2440_GSTATUS2_WDRST) { - set_reset_source(RESET_WDG); + set_reset_source(RESET_WATCHDOG); writel(S3C2440_GSTATUS2_WDRST, S3C_GPIO_BASE + S3C2440_GSTATUS2); return 0; diff --git a/common/reset_source.c b/common/reset_source.c index 2a7f9ff..ff76857 100644 --- a/common/reset_source.c +++ b/common/reset_source.c @@ -19,12 +19,12 @@ #include <reset_source.h> static const char * const reset_src_names[] = { - [RESET_UKWN] = "unknown", - [RESET_POR] = "POR", - [RESET_RST] = "RST", - [RESET_WDG] = "WDG", - [RESET_WKE] = "WKE", - [RESET_JTAG] = "JTAG", + [RESET_UKWNOWN] = "unknown", + [RESET_POWER] = "power", + [RESET_RESET] = "reset", + [RESET_WATCHDOG] = "watchdog", + [RESET_WAKEUP] = "wakeup", + [RESET_JTAG] = "jtag", }; void set_reset_source(enum reset_src_type st) @@ -37,7 +37,7 @@ EXPORT_SYMBOL(set_reset_source); static int init_reset_source(void) { globalvar_add_simple("system.reset"); - set_reset_source(RESET_UKWN); + set_reset_source(RESET_UKWNOWN); return 0; } diff --git a/drivers/watchdog/im28wd.c b/drivers/watchdog/im28wd.c index ca32a72..999f5b4 100644 --- a/drivers/watchdog/im28wd.c +++ b/drivers/watchdog/im28wd.c @@ -82,17 +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); - set_reset_source(RESET_POR); + set_reset_source(RESET_POWER); return; } if (reg & MXS_RTC_PERSISTENT0_THM_RST) { writel(MXS_RTC_PERSISTENT0_THM_RST, p->regs + MXS_RTC_PERSISTENT0 + MXS_RTC_CLR_ADDR); - set_reset_source(RESET_RST); + set_reset_source(RESET_RESET); return; } - set_reset_source(RESET_RST); + set_reset_source(RESET_RESET); } static int imx28_wd_probe(struct device_d *dev) diff --git a/drivers/watchdog/imxwd.c b/drivers/watchdog/imxwd.c index c422f98..b13247b 100644 --- a/drivers/watchdog/imxwd.c +++ b/drivers/watchdog/imxwd.c @@ -129,17 +129,17 @@ static void imx_watchdog_detect_reset_source(struct imx_wd *priv) u16 val = readw(priv->base + IMX21_WDOG_WSTR); if (val & WSTR_COLDSTART) { - set_reset_source(RESET_POR); + set_reset_source(RESET_POWER); return; } if (val & (WSTR_HARDRESET | WSTR_WARMSTART)) { - set_reset_source(RESET_RST); + set_reset_source(RESET_RESET); return; } if (val & WSTR_WDOG) { - set_reset_source(RESET_WDG); + set_reset_source(RESET_WATCHDOG); return; } diff --git a/include/reset_source.h b/include/reset_source.h index 75e7ba8..1db1f4f 100644 --- a/include/reset_source.h +++ b/include/reset_source.h @@ -14,11 +14,11 @@ # define __INCLUDE_RESET_SOURCE_H enum reset_src_type { - RESET_UKWN, /* maybe the SoC cannot detect the reset source */ - RESET_POR, /* Power On Reset (cold start) */ - RESET_RST, /* generic ReSeT (warm start) */ - RESET_WDG, /* watchdog */ - RESET_WKE, /* wake-up (some SoCs can handle this) */ + RESET_UKWNOWN, /* maybe the SoC cannot detect the reset source */ + RESET_POWER, /* Power On Reset (cold start) */ + RESET_RESET, /* generic ReSeT (warm start) */ + RESET_WATCHDOG, /* watchdog */ + RESET_WAKEUP, /* wake-up (some SoCs can handle this) */ RESET_JTAG, /* JTAG reset */ }; -- 1.7.10.4 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/4] reset_source: add software reset as possible source 2012-10-13 13:49 ` [PATCH 1/4] reset_source: make enum and string human readable Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-13 13:49 ` Jean-Christophe PLAGNIOL-VILLARD 2012-10-13 13:49 ` [PATCH 3/4] reset_resource: add wakeup source Jean-Christophe PLAGNIOL-VILLARD 2012-10-13 13:49 ` [PATCH 4/4] at91: add reset and wakeup source detection support Jean-Christophe PLAGNIOL-VILLARD 2 siblings, 0 replies; 9+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-13 13:49 UTC (permalink / raw) To: barebox Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- common/reset_source.c | 1 + include/reset_source.h | 1 + 2 files changed, 2 insertions(+) diff --git a/common/reset_source.c b/common/reset_source.c index ff76857..ec1afc0 100644 --- a/common/reset_source.c +++ b/common/reset_source.c @@ -22,6 +22,7 @@ static const char * const reset_src_names[] = { [RESET_UKWNOWN] = "unknown", [RESET_POWER] = "power", [RESET_RESET] = "reset", + [RESET_SOFTWARE] = "software", [RESET_WATCHDOG] = "watchdog", [RESET_WAKEUP] = "wakeup", [RESET_JTAG] = "jtag", diff --git a/include/reset_source.h b/include/reset_source.h index 1db1f4f..af4246a 100644 --- a/include/reset_source.h +++ b/include/reset_source.h @@ -17,6 +17,7 @@ enum reset_src_type { RESET_UKWNOWN, /* maybe the SoC cannot detect the reset source */ RESET_POWER, /* Power On Reset (cold start) */ RESET_RESET, /* generic ReSeT (warm start) */ + RESET_SOFTWARE, /* software */ RESET_WATCHDOG, /* watchdog */ RESET_WAKEUP, /* wake-up (some SoCs can handle this) */ RESET_JTAG, /* JTAG reset */ -- 1.7.10.4 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/4] reset_resource: add wakeup source 2012-10-13 13:49 ` [PATCH 1/4] reset_source: make enum and string human readable Jean-Christophe PLAGNIOL-VILLARD 2012-10-13 13:49 ` [PATCH 2/4] reset_source: add software reset as possible source Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-13 13:49 ` Jean-Christophe PLAGNIOL-VILLARD 2012-10-13 18:18 ` Sascha Hauer 2012-10-15 8:04 ` Jan Lübbe 2012-10-13 13:49 ` [PATCH 4/4] at91: add reset and wakeup source detection support Jean-Christophe PLAGNIOL-VILLARD 2 siblings, 2 replies; 9+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-13 13:49 UTC (permalink / raw) To: barebox This will allow to known the source of wakeup Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- common/reset_source.c | 17 +++++++++++++++++ include/reset_source.h | 11 +++++++++++ 2 files changed, 28 insertions(+) diff --git a/common/reset_source.c b/common/reset_source.c index ec1afc0..4791d29 100644 --- a/common/reset_source.c +++ b/common/reset_source.c @@ -34,11 +34,28 @@ void set_reset_source(enum reset_src_type st) } EXPORT_SYMBOL(set_reset_source); +static const char * const wakeup_src_names[] = { + [WAKEUP_UKWNOWN] = "unknown", + [WAKEUP_POWER] = "power", + [WAKEUP_RTC] = "rtc", + [WAKEUP_TIMER] = "timer", + [WAKEUP_USER] = "user", + [WAKEUP_WOL] = "wakeup on lan", +}; + +void set_wakeup_source(enum wakeup_src_type st) +{ + setenv("global.system.wakeup", wakeup_src_names[st]); +} +EXPORT_SYMBOL(set_reset_source); + /* ensure this runs after the 'global' device is already registerd */ static int init_reset_source(void) { globalvar_add_simple("system.reset"); + globalvar_add_simple("system.wakeup"); set_reset_source(RESET_UKWNOWN); + set_wakeup_source(WAKEUP_UKWNOWN); return 0; } diff --git a/include/reset_source.h b/include/reset_source.h index af4246a..1777b2b 100644 --- a/include/reset_source.h +++ b/include/reset_source.h @@ -31,4 +31,15 @@ static inline void set_reset_source(enum reset_src_type unused) } #endif +enum wakeup_src_type { + WAKEUP_UKWNOWN, /* maybe the SoC cannot detect the wakeup source */ + WAKEUP_POWER, /* Power restore */ + WAKEUP_RTC, /* rtc */ + WAKEUP_TIMER, /* timer */ + WAKEUP_USER, /* user */ + WAKEUP_WOL, /* wakeup on lan */ +}; + +void set_wakeup_source(enum wakeup_src_type); + #endif /* __INCLUDE_RESET_SOURCE_H */ -- 1.7.10.4 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/4] reset_resource: add wakeup source 2012-10-13 13:49 ` [PATCH 3/4] reset_resource: add wakeup source Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-13 18:18 ` Sascha Hauer 2012-10-14 9:56 ` Jean-Christophe PLAGNIOL-VILLARD 2012-10-15 8:04 ` Jan Lübbe 1 sibling, 1 reply; 9+ messages in thread From: Sascha Hauer @ 2012-10-13 18:18 UTC (permalink / raw) To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox On Sat, Oct 13, 2012 at 03:49:21PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote: > This will allow to known the source of wakeup > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> > --- > common/reset_source.c | 17 +++++++++++++++++ > include/reset_source.h | 11 +++++++++++ > 2 files changed, 28 insertions(+) > > diff --git a/common/reset_source.c b/common/reset_source.c > index ec1afc0..4791d29 100644 > --- a/common/reset_source.c > +++ b/common/reset_source.c > @@ -34,11 +34,28 @@ void set_reset_source(enum reset_src_type st) > } > EXPORT_SYMBOL(set_reset_source); > > +static const char * const wakeup_src_names[] = { > + [WAKEUP_UKWNOWN] = "unknown", > + [WAKEUP_POWER] = "power", > + [WAKEUP_RTC] = "rtc", > + [WAKEUP_TIMER] = "timer", > + [WAKEUP_USER] = "user", > + [WAKEUP_WOL] = "wakeup on lan", > +}; I'm unsure we need a second array for this. I mean RTC can't be seen as a reset source, but with a bit of good will the watchdog for example can be seen as a wakeup source. We have: WAKEUP_POWER WAKEUP_RTC WAKEUP_TIMER WAKEUP_USER WAKEUP_WOL RESET_POWER RESET_RESET RESET_WATCHDOG RESET_WAKEUP RESET_JTAG WAKEUP_POWER and RESET_POWER are duplicates, RESET_WAKEUP is just an indicator that we should look into the WAKEUP_* array. The rest are all mutually exclusive. So we would have: WAKEUP_POWER WAKEUP_RTC WAKEUP_TIMER WAKEUP_USER WAKEUP_WOL WAKEUP_RESET WAKEUP_WATCHDOG WAKEUP_JTAG Wouldn't that be better? Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/4] reset_resource: add wakeup source 2012-10-13 18:18 ` Sascha Hauer @ 2012-10-14 9:56 ` Jean-Christophe PLAGNIOL-VILLARD 2012-10-14 10:34 ` Eric Bénard 0 siblings, 1 reply; 9+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-14 9:56 UTC (permalink / raw) To: Sascha Hauer; +Cc: barebox On 20:18 Sat 13 Oct , Sascha Hauer wrote: > On Sat, Oct 13, 2012 at 03:49:21PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote: > > This will allow to known the source of wakeup > > > > Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> > > --- > > common/reset_source.c | 17 +++++++++++++++++ > > include/reset_source.h | 11 +++++++++++ > > 2 files changed, 28 insertions(+) > > > > diff --git a/common/reset_source.c b/common/reset_source.c > > index ec1afc0..4791d29 100644 > > --- a/common/reset_source.c > > +++ b/common/reset_source.c > > @@ -34,11 +34,28 @@ void set_reset_source(enum reset_src_type st) > > } > > EXPORT_SYMBOL(set_reset_source); > > > > +static const char * const wakeup_src_names[] = { > > + [WAKEUP_UKWNOWN] = "unknown", > > + [WAKEUP_POWER] = "power", > > + [WAKEUP_RTC] = "rtc", > > + [WAKEUP_TIMER] = "timer", > > + [WAKEUP_USER] = "user", > > + [WAKEUP_WOL] = "wakeup on lan", > > +}; > > I'm unsure we need a second array for this. I mean RTC can't be seen as > a reset source, but with a bit of good will the watchdog for example can > be seen as a wakeup source. We have: > > WAKEUP_POWER > WAKEUP_RTC > WAKEUP_TIMER > WAKEUP_USER > WAKEUP_WOL > RESET_POWER > RESET_RESET > RESET_WATCHDOG > RESET_WAKEUP > RESET_JTAG > > WAKEUP_POWER and RESET_POWER are duplicates, RESET_WAKEUP is just an > indicator that we should look into the WAKEUP_* array. The rest are all > mutually exclusive. So we would have: for reset POWER mean inmy ming we gcc power up on the soc not I plug the power so it could be WKAEUP_POWER_UP for RESET_WAKEUP I agree > > WAKEUP_POWER > WAKEUP_RTC > WAKEUP_TIMER > WAKEUP_USER > WAKEUP_WOL > WAKEUP_RESET > WAKEUP_WATCHDOG > WAKEUP_JTAG > > Wouldn't that be better? Best Regards, J. _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/4] reset_resource: add wakeup source 2012-10-14 9:56 ` Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-14 10:34 ` Eric Bénard 0 siblings, 0 replies; 9+ messages in thread From: Eric Bénard @ 2012-10-14 10:34 UTC (permalink / raw) To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox Hi Jean Christophe Le Sun, 14 Oct 2012 11:56:16 +0200, Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> a écrit : > for reset POWER mean inmy ming we gcc power up on the soc > not I plug the power > can you please make an effort in your emails or just tell me which language should I use in google translator to understand that ? ;-) Thanks ! Eric _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/4] reset_resource: add wakeup source 2012-10-13 13:49 ` [PATCH 3/4] reset_resource: add wakeup source Jean-Christophe PLAGNIOL-VILLARD 2012-10-13 18:18 ` Sascha Hauer @ 2012-10-15 8:04 ` Jan Lübbe 1 sibling, 0 replies; 9+ messages in thread From: Jan Lübbe @ 2012-10-15 8:04 UTC (permalink / raw) To: barebox On Sat, 2012-10-13 at 15:49 +0200, Jean-Christophe PLAGNIOL-VILLARD wrote: > +static const char * const wakeup_src_names[] = { > + [WAKEUP_UKWNOWN] = "unknown", > + [WAKEUP_POWER] = "power", > + [WAKEUP_RTC] = "rtc", > + [WAKEUP_TIMER] = "timer", > + [WAKEUP_USER] = "user", > + [WAKEUP_WOL] = "wakeup on lan", > +}; > + > +void set_wakeup_source(enum wakeup_src_type st) > +{ > + setenv("global.system.wakeup", wakeup_src_names[st]); > +} > +EXPORT_SYMBOL(set_reset_source); The EXPORT_SYMBOL should be for _wakeup_ instead of _reset_. -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 4/4] at91: add reset and wakeup source detection support 2012-10-13 13:49 ` [PATCH 1/4] reset_source: make enum and string human readable Jean-Christophe PLAGNIOL-VILLARD 2012-10-13 13:49 ` [PATCH 2/4] reset_source: add software reset as possible source Jean-Christophe PLAGNIOL-VILLARD 2012-10-13 13:49 ` [PATCH 3/4] reset_resource: add wakeup source Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-13 13:49 ` Jean-Christophe PLAGNIOL-VILLARD 2 siblings, 0 replies; 9+ messages in thread From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-13 13:49 UTC (permalink / raw) To: barebox Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> --- arch/arm/mach-at91/Makefile | 1 + arch/arm/mach-at91/include/mach/at91_shdwc.h | 40 +++++++++++++++++ arch/arm/mach-at91/reset_source.c | 59 ++++++++++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 arch/arm/mach-at91/include/mach/at91_shdwc.h create mode 100644 arch/arm/mach-at91/reset_source.c diff --git a/arch/arm/mach-at91/Makefile b/arch/arm/mach-at91/Makefile index 3ade725..1f912c6 100644 --- a/arch/arm/mach-at91/Makefile +++ b/arch/arm/mach-at91/Makefile @@ -8,6 +8,7 @@ pbl-$(CONFIG_MACH_DO_LOWLEVEL_INIT) += $(lowlevel_init-y) obj-$(CONFIG_AT91SAM9_RESET) += at91sam9_reset.o obj-$(CONFIG_AT91SAM9G45_RESET) += at91sam9g45_reset.o +obj-$(CONFIG_RESET_SOURCE) += reset_source.o # CPU-specific support obj-$(CONFIG_ARCH_AT91RM9200) += at91rm9200.o at91rm9200_time.o at91rm9200_devices.o diff --git a/arch/arm/mach-at91/include/mach/at91_shdwc.h b/arch/arm/mach-at91/include/mach/at91_shdwc.h new file mode 100644 index 0000000..75e6801 --- /dev/null +++ b/arch/arm/mach-at91/include/mach/at91_shdwc.h @@ -0,0 +1,40 @@ +/* + * arch/arm/mach-at91/include/mach/at91_shdwc.h + * + * Copyright (C) 2007 Andrew Victor + * Copyright (C) 2007 Atmel Corporation. + * + * Shutdown Controller (SHDWC) - System peripherals regsters. + * Based on AT91SAM9261 datasheet revision D. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +#ifndef AT91_SHDWC_H +#define AT91_SHDWC_H + +#define AT91_SHDW_CR (AT91_SHDWC + 0x00) /* Shut Down Control Register */ +#define AT91_SHDW_SHDW (1 << 0) /* Shut Down command */ +#define AT91_SHDW_KEY (0xa5 << 24) /* KEY Password */ + +#define AT91_SHDW_MR (AT91_SHDWC + 0x04) /* Shut Down Mode Register */ +#define AT91_SHDW_WKMODE0 (3 << 0) /* Wake-up 0 Mode Selection */ +#define AT91_SHDW_WKMODE0_NONE 0 +#define AT91_SHDW_WKMODE0_HIGH 1 +#define AT91_SHDW_WKMODE0_LOW 2 +#define AT91_SHDW_WKMODE0_ANYLEVEL 3 +#define AT91_SHDW_CPTWK0_MAX 0xf /* Maximum Counter On Wake Up 0 */ +#define AT91_SHDW_CPTWK0 (AT91_SHDW_CPTWK0_MAX << 4) /* Counter On Wake Up 0 */ +#define AT91_SHDW_CPTWK0_(x) ((x) << 4) +#define AT91_SHDW_RTTWKEN (1 << 16) /* Real Time Timer Wake-up Enable */ +#define AT91_SHDW_RTCWKEN (1 << 17) /* Real Time Clock Wake-up Enable */ + +#define AT91_SHDW_SR (AT91_SHDWC + 0x08) /* Shut Down Status Register */ +#define AT91_SHDW_WAKEUP0 (1 << 0) /* Wake-up 0 Status */ +#define AT91_SHDW_RTTWK (1 << 16) /* Real-time Timer Wake-up */ +#define AT91_SHDW_RTCWK (1 << 17) /* Real-time Clock Wake-up [SAM9RL] */ + +#endif diff --git a/arch/arm/mach-at91/reset_source.c b/arch/arm/mach-at91/reset_source.c new file mode 100644 index 0000000..b078941 --- /dev/null +++ b/arch/arm/mach-at91/reset_source.c @@ -0,0 +1,59 @@ +/* + * (C) Copyright 2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrsoft.com> + * + * GPLv2 + */ + +#include <reset_source.h> +#include <io.h> +#include <init.h> +#include <mach/hardware.h> +#include <mach/io.h> + +#include <mach/at91_rstc.h> +#include <mach/at91_shdwc.h> + +static int at91_reset_status(void) +{ + u32 reset_type, wake_type; + + reset_type = at91_sys_read(AT91_RSTC_SR) & AT91_RSTC_RSTTYP; + wake_type = at91_sys_read(AT91_SHDW_SR); + + switch (reset_type) { + case AT91_RSTC_RSTTYP_GENERAL: + set_reset_source(RESET_POWER); + break; + case AT91_RSTC_RSTTYP_WAKEUP: + /* board-specific code enabled the wakeup sources */ + set_reset_source(RESET_WAKEUP); + + /* "wakeup signal" */ + if (wake_type & AT91_SHDW_WAKEUP0) + set_wakeup_source(WAKEUP_USER); + else if (wake_type & AT91_SHDW_RTTWK) /* rtt wakeup */ + set_wakeup_source(WAKEUP_TIMER); + else if (wake_type & AT91_SHDW_RTCWK) /* rtc wakeup */ + set_wakeup_source(WAKEUP_RTC); + else if (wake_type == 0) /* power-restored wakeup */ + set_wakeup_source(WAKEUP_POWER); + else /* unknown wakeup */ + set_wakeup_source(WAKEUP_UKWNOWN); + break; + case AT91_RSTC_RSTTYP_WATCHDOG: + set_reset_source(RESET_WATCHDOG); + break; + case AT91_RSTC_RSTTYP_SOFTWARE: + set_reset_source(RESET_SOFTWARE); + break; + case AT91_RSTC_RSTTYP_USER: + set_reset_source(RESET_RESET); + break; + default: + set_reset_source(RESET_UKWNOWN); + break; + } + + return 0; +} +device_initcall(at91_reset_status); -- 1.7.10.4 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2012-10-15 8:04 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2012-10-13 13:46 [PATCH 0/4 v2] add wakup source Jean-Christophe PLAGNIOL-VILLARD 2012-10-13 13:49 ` [PATCH 1/4] reset_source: make enum and string human readable Jean-Christophe PLAGNIOL-VILLARD 2012-10-13 13:49 ` [PATCH 2/4] reset_source: add software reset as possible source Jean-Christophe PLAGNIOL-VILLARD 2012-10-13 13:49 ` [PATCH 3/4] reset_resource: add wakeup source Jean-Christophe PLAGNIOL-VILLARD 2012-10-13 18:18 ` Sascha Hauer 2012-10-14 9:56 ` Jean-Christophe PLAGNIOL-VILLARD 2012-10-14 10:34 ` Eric Bénard 2012-10-15 8:04 ` Jan Lübbe 2012-10-13 13:49 ` [PATCH 4/4] at91: add reset and wakeup source detection support Jean-Christophe PLAGNIOL-VILLARD
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox