Add another 'extended BSP' routine which returns reboot status register information

This commit is contained in:
Eric Norum
2005-12-19 21:23:52 +00:00
parent e0a35e4c94
commit 91cb0659ce
2 changed files with 42 additions and 0 deletions

View File

@@ -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> 2005-11-12 Ralf Corsepius <ralf.corsepius@rtems.org>
* bsp_specs: Remove %cpp. * bsp_specs: Remove %cpp.

View File

@@ -21,6 +21,7 @@
#include <bsp.h> #include <bsp.h>
#include <rtems/libio.h> #include <rtems/libio.h>
#include <rtems/libcsupport.h> #include <rtems/libcsupport.h>
#include <stdio.h>
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
@@ -534,3 +535,39 @@ BSP_vme2local_adrs(unsigned am, unsigned long vmeaddr, unsigned long *plocaladdr
*plocaladdr = vmeaddr + offset; *plocaladdr = vmeaddr + offset;
return 0; 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;
}
}
}