summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/m68k
diff options
context:
space:
mode:
authorEric Norum <WENorum@lbl.gov>2005-12-19 21:23:52 +0000
committerEric Norum <WENorum@lbl.gov>2005-12-19 21:23:52 +0000
commit91cb0659ce70cacdcb2ec5f85b53e445d4d8b248 (patch)
treebe66a01587b55b0f1f1bb4cb1b1352bc09cd9959 /c/src/lib/libbsp/m68k
parent2005-12-19 Ralf Corsepius <ralf.corsepius@rtems.org> (diff)
downloadrtems-91cb0659ce70cacdcb2ec5f85b53e445d4d8b248.tar.bz2
Add another 'extended BSP' routine which returns reboot status register information
Diffstat (limited to 'c/src/lib/libbsp/m68k')
-rw-r--r--c/src/lib/libbsp/m68k/uC5282/ChangeLog5
-rw-r--r--c/src/lib/libbsp/m68k/uC5282/startup/bspstart.c37
2 files changed, 42 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/m68k/uC5282/ChangeLog b/c/src/lib/libbsp/m68k/uC5282/ChangeLog
index e325a7383a..6376941823 100644
--- a/c/src/lib/libbsp/m68k/uC5282/ChangeLog
+++ b/c/src/lib/libbsp/m68k/uC5282/ChangeLog
@@ -1,3 +1,8 @@
+2005-12-19 Eric Norum <norume@aps.anl.gov>
+
+ * startup/bspstart.c: Add another 'extended BSP' routine which return
+ reboot status register information.
+
2005-11-12 Ralf Corsepius <ralf.corsepius@rtems.org>
* bsp_specs: Remove %cpp.
diff --git a/c/src/lib/libbsp/m68k/uC5282/startup/bspstart.c b/c/src/lib/libbsp/m68k/uC5282/startup/bspstart.c
index be76803483..63ea6e31ef 100644
--- a/c/src/lib/libbsp/m68k/uC5282/startup/bspstart.c
+++ b/c/src/lib/libbsp/m68k/uC5282/startup/bspstart.c
@@ -21,6 +21,7 @@
#include <bsp.h>
#include <rtems/libio.h>
#include <rtems/libcsupport.h>
+#include <stdio.h>
#include <string.h>
#include <errno.h>
@@ -534,3 +535,39 @@ BSP_vme2local_adrs(unsigned am, unsigned long vmeaddr, unsigned long *plocaladdr
*plocaladdr = vmeaddr + offset;
return 0;
}
+
+void
+rtems_bsp_reset_cause(char *buf, size_t capacity)
+{
+ int bit, rsr;
+ size_t i;
+ const char *cp;
+
+ if (buf == NULL)
+ return;
+ if (capacity)
+ buf[0] = '\0';
+ rsr = MCF5282_RESET_RSR;
+ for (i = 0, bit = 0x80 ; bit != 0 ; bit >>= 1) {
+ if (rsr & bit) {
+ switch (bit) {
+ case MCF5282_RESET_RSR_SOFT: cp = "Software reset"; break;
+ case MCF5282_RESET_RSR_WDR: cp = "Watchdog reset"; break;
+ case MCF5282_RESET_RSR_POR: cp = "Power-on reset"; break;
+ case MCF5282_RESET_RSR_EXT: cp = "External reset"; break;
+ case MCF5282_RESET_RSR_LOC: cp = "Loss of clock"; break;
+ case MCF5282_RESET_RSR_LOL: cp = "Loss of lock"; break;
+ default: cp = "??"; break;
+ }
+ i += snprintf(buf+i, capacity-i, cp);
+ if (i >= capacity)
+ break;
+ rsr &= ~bit;
+ if (rsr == 0)
+ break;
+ i += snprintf(buf+i, capacity-i, ", ");
+ if (i >= capacity)
+ break;
+ }
+ }
+}