diff options
author | Eric Norum <WENorum@lbl.gov> | 2005-12-19 21:23:52 +0000 |
---|---|---|
committer | Eric Norum <WENorum@lbl.gov> | 2005-12-19 21:23:52 +0000 |
commit | 91cb0659ce70cacdcb2ec5f85b53e445d4d8b248 (patch) | |
tree | be66a01587b55b0f1f1bb4cb1b1352bc09cd9959 | |
parent | 2005-12-19 Ralf Corsepius <ralf.corsepius@rtems.org> (diff) | |
download | rtems-91cb0659ce70cacdcb2ec5f85b53e445d4d8b248.tar.bz2 |
Add another 'extended BSP' routine which returns reboot status register information
-rw-r--r-- | c/src/lib/libbsp/m68k/uC5282/ChangeLog | 5 | ||||
-rw-r--r-- | c/src/lib/libbsp/m68k/uC5282/startup/bspstart.c | 37 |
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; + } + } +} |