[rtems commit] arm/raspberrypi: define bsp_reset to restart board by watchdog.
Pavel Pisa
ppisa at rtems.org
Thu Sep 8 21:41:38 UTC 2016
Module: rtems
Branch: master
Commit: 5eb769ca8b553b4378a773967f08de20847794db
Changeset: http://git.rtems.org/rtems/commit/?id=5eb769ca8b553b4378a773967f08de20847794db
Author: Pavel Pisa <pisa at cmp.felk.cvut.cz>
Date: Thu Sep 8 23:40:21 2016 +0200
arm/raspberrypi: define bsp_reset to restart board by watchdog.
Whether the board is restarted after application finish/exit
is controlled by BSP_RESET_BOARD_AT_EXIT configure option.
---
c/src/lib/libbsp/arm/raspberrypi/Makefile.am | 4 +-
.../libbsp/arm/raspberrypi/include/raspberrypi.h | 53 ++++++++++++++++++++++
.../lib/libbsp/arm/raspberrypi/startup/bspreset.c | 26 +++++++++++
3 files changed, 82 insertions(+), 1 deletion(-)
diff --git a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am
index f0b8737..14e0427 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/Makefile.am
+++ b/c/src/lib/libbsp/arm/raspberrypi/Makefile.am
@@ -96,7 +96,6 @@ libbsp_a_SOURCES += ../shared/startup/bsp-start-in-hyp-support.S
endif
# Startup
-libbsp_a_SOURCES += ../../shared/bspreset_loop.c
libbsp_a_SOURCES += startup/bspstart.c
libbsp_a_SOURCES += startup/cmdline.c
libbsp_a_SOURCES += startup/bspgetworkarea.c
@@ -105,6 +104,9 @@ libbsp_a_SOURCES += startup/bspsmp.c
libbsp_a_SOURCES += startup/bspsmp_init.c
endif
+# Restart
+libbsp_a_SOURCES += startup/bspreset.c
+
# IRQ
libbsp_a_SOURCES += ../shared/arm-cp15-set-exception-handler.c
libbsp_a_SOURCES += ../../shared/src/irq-generic.c
diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h b/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h
index e442d5f..4ef5f71 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h
+++ b/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h
@@ -85,6 +85,59 @@
/** @} */
/**
+ * @name Power Management and Watchdog Registers
+ *
+ * @{
+ */
+
+#define BCM2835_PM_PASSWD_MAGIC 0x5a000000
+
+#define BCM2835_PM_BASE (RPI_PERIPHERAL_BASE + 0x100000)
+
+#define BCM2835_PM_GNRIC (BCM2835_PM_BASE + 0x00)
+#define BCM2835_PM_GNRIC_POWUP 0x00000001
+#define BCM2835_PM_GNRIC_POWOK 0x00000002
+#define BCM2835_PM_GNRIC_ISPOW 0x00000004
+#define BCM2835_PM_GNRIC_MEMREP 0x00000008
+#define BCM2835_PM_GNRIC_MRDONE 0x00000010
+#define BCM2835_PM_GNRIC_ISFUNC 0x00000020
+#define BCM2835_PM_GNRIC_RSTN 0x00000fc0
+#define BCM2835_PM_GNRIC_ENAB 0x00001000
+#define BCM2835_PM_GNRIC_CFG 0x007f0000
+
+#define BCM2835_PM_AUDIO (BCM2835_PM_BASE + 0x04)
+#define BCM2835_PM_AUDIO_APSM 0x000fffff
+#define BCM2835_PM_AUDIO_CTRLEN 0x00100000
+#define BCM2835_PM_AUDIO_RSTN 0x00200000
+
+#define BCM2835_PM_STATUS (BCM2835_PM_BASE + 0x18)
+
+#define BCM2835_PM_RSTC (BCM2835_PM_BASE + 0x1c)
+#define BCM2835_PM_RSTC_DRCFG 0x00000003
+#define BCM2835_PM_RSTC_WRCFG 0x00000030
+#define BCM2835_PM_RSTC_WRCFG_FULL 0x00000020
+#define BCM2835_PM_RSTC_SRCFG 0x00000300
+#define BCM2835_PM_RSTC_QRCFG 0x00003000
+#define BCM2835_PM_RSTC_FRCFG 0x00030000
+#define BCM2835_PM_RSTC_HRCFG 0x00300000
+
+#define BCM2835_PM_RSTS (BCM2835_PM_BASE + 0x20)
+#define BCM2835_PM_RSTS_HADDRQ 0x00000001
+#define BCM2835_PM_RSTS_HADDRF 0x00000002
+#define BCM2835_PM_RSTS_HADDRH 0x00000004
+#define BCM2835_PM_RSTS_HADWRQ 0x00000010
+#define BCM2835_PM_RSTS_HADWRF 0x00000020
+#define BCM2835_PM_RSTS_HADWRH 0x00000040
+#define BCM2835_PM_RSTS_HADSRQ 0x00000100
+#define BCM2835_PM_RSTS_HADSRF 0x00000200
+#define BCM2835_PM_RSTS_HADSRH 0x00000400
+#define BCM2835_PM_RSTS_HADPOR 0x00001000
+
+#define BCM2835_PM_WDOG (BCM2835_PM_BASE + 0x24)
+
+/** @} */
+
+/**
* @name GPIO Registers
*
* @{
diff --git a/c/src/lib/libbsp/arm/raspberrypi/startup/bspreset.c b/c/src/lib/libbsp/arm/raspberrypi/startup/bspreset.c
new file mode 100644
index 0000000..98c28be
--- /dev/null
+++ b/c/src/lib/libbsp/arm/raspberrypi/startup/bspreset.c
@@ -0,0 +1,26 @@
+/**
+ * @file
+ *
+ * @ingroup raspberrypi
+ *
+ * @brief Raspberry pi restart chip function
+ */
+
+#include <bsp/bootcard.h>
+#include <bsp/raspberrypi.h>
+#include <bsp.h>
+#include <rtems.h>
+
+void bsp_reset(void)
+{
+ uint32_t rstc;
+
+ BCM2835_REG(BCM2835_PM_WDOG) = BCM2835_PM_PASSWD_MAGIC | 20;
+ rstc = BCM2835_REG(BCM2835_PM_RSTC);
+ rstc &= ~BCM2835_PM_RSTC_WRCFG;
+ rstc |= BCM2835_PM_PASSWD_MAGIC | BCM2835_PM_RSTC_WRCFG_FULL;
+ BCM2835_REG(BCM2835_PM_RSTC) = rstc;
+ BCM2835_REG(BCM2835_PM_WDOG) = BCM2835_PM_PASSWD_MAGIC | 1;
+
+ while (1) ;
+}
More information about the vc
mailing list