* [PATCH 1/4] reset_source: make enum and string human readable
@ 2012-10-13 7:51 Jean-Christophe PLAGNIOL-VILLARD
2012-10-13 7:51 ` [PATCH 2/4] reset_source: add software reset as possible source Jean-Christophe PLAGNIOL-VILLARD
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-13 7:51 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/reset_source.c | 6 +++---
arch/arm/mach-samsung/reset_source.c | 6 +++---
common/reset_source.c | 14 +++++++-------
drivers/watchdog/im28wd.c | 6 +++---
include/reset_source.h | 10 +++++-----
5 files changed, 21 insertions(+), 21 deletions(-)
diff --git a/arch/arm/mach-imx/reset_source.c b/arch/arm/mach-imx/reset_source.c
index e7b2a90..e97bf15 100644
--- a/arch/arm/mach-imx/reset_source.c
+++ b/arch/arm/mach-imx/reset_source.c
@@ -51,17 +51,17 @@ static int imx_detect_reset_source(void)
unsigned reg = read_detection_register();
if (reg & IMX_RESET_SRC_COLDSTART) {
- set_reset_source(RESET_POR);
+ set_reset_source(RESET_POWER);
return 0;
}
if (reg & (IMX_RESET_SRC_HRDRESET | IMX_RESET_SRC_WARMSTART)) {
- set_reset_source(RESET_RST);
+ set_reset_source(RESET_RESET);
return 0;
}
if (reg & IMX_RESET_SRC_WDOG) {
- set_reset_source(RESET_WDG);
+ set_reset_source(RESET_WATCHDOG);
return 0;
}
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/include/reset_source.h b/include/reset_source.h
index 6734fbde..198abd0 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] 5+ messages in thread
* [PATCH 2/4] reset_source: add software reset as possible source
2012-10-13 7:51 [PATCH 1/4] reset_source: make enum and string human readable Jean-Christophe PLAGNIOL-VILLARD
@ 2012-10-13 7:51 ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-13 7:51 ` [PATCH 3/4] reset_resource: add wakeup source Jean-Christophe PLAGNIOL-VILLARD
2012-10-13 7:51 ` [PATCH 4/4] at91: add reset and wakeup source detection support Jean-Christophe PLAGNIOL-VILLARD
2 siblings, 0 replies; 5+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-13 7:51 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 198abd0..5129c6a 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] 5+ messages in thread
* [PATCH 3/4] reset_resource: add wakeup source
2012-10-13 7:51 [PATCH 1/4] reset_source: make enum and string human readable Jean-Christophe PLAGNIOL-VILLARD
2012-10-13 7:51 ` [PATCH 2/4] reset_source: add software reset as possible source Jean-Christophe PLAGNIOL-VILLARD
@ 2012-10-13 7:51 ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-13 7:51 ` [PATCH 4/4] at91: add reset and wakeup source detection support Jean-Christophe PLAGNIOL-VILLARD
2 siblings, 0 replies; 5+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-13 7:51 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..8fd8a6d 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",
+ [RESET_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 5129c6a..d08aa65 100644
--- a/include/reset_source.h
+++ b/include/reset_source.h
@@ -25,4 +25,15 @@ enum reset_src_type {
void set_reset_source(enum reset_src_type);
+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] 5+ messages in thread
* [PATCH 4/4] at91: add reset and wakeup source detection support
2012-10-13 7:51 [PATCH 1/4] reset_source: make enum and string human readable Jean-Christophe PLAGNIOL-VILLARD
2012-10-13 7:51 ` [PATCH 2/4] reset_source: add software reset as possible source Jean-Christophe PLAGNIOL-VILLARD
2012-10-13 7:51 ` [PATCH 3/4] reset_resource: add wakeup source Jean-Christophe PLAGNIOL-VILLARD
@ 2012-10-13 7:51 ` Jean-Christophe PLAGNIOL-VILLARD
2 siblings, 0 replies; 5+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2012-10-13 7:51 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] 5+ 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 ` Jean-Christophe PLAGNIOL-VILLARD
0 siblings, 0 replies; 5+ 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] 5+ messages in thread
end of thread, other threads:[~2012-10-13 13:51 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-13 7:51 [PATCH 1/4] reset_source: make enum and string human readable Jean-Christophe PLAGNIOL-VILLARD
2012-10-13 7:51 ` [PATCH 2/4] reset_source: add software reset as possible source Jean-Christophe PLAGNIOL-VILLARD
2012-10-13 7:51 ` [PATCH 3/4] reset_resource: add wakeup source Jean-Christophe PLAGNIOL-VILLARD
2012-10-13 7:51 ` [PATCH 4/4] at91: add reset and wakeup source detection support Jean-Christophe PLAGNIOL-VILLARD
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 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