summaryrefslogtreecommitdiffstats
path: root/common/misc.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2014-12-08 10:11:04 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2015-01-05 11:30:58 +0100
commitce5299b0bf8c8f31a701fe5f8de1fb02111ef0cd (patch)
treeda5007e4038593c34956b6cd84528bb9349b511c /common/misc.c
parentc20983fad59b733e98f253fbc8c1802ef66bba09 (diff)
downloadbarebox-ce5299b0bf8c8f31a701fe5f8de1fb02111ef0cd.tar.gz
printf: move panic() to common/misc.c
panic() is not really a printf like function, so move it to common/misc.c. This is done because we want to have printf support in the PBL, but PBL has it's own panic() implementation. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'common/misc.c')
-rw-r--r--common/misc.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/common/misc.c b/common/misc.c
index 65f3306..6da71c7 100644
--- a/common/misc.c
+++ b/common/misc.c
@@ -22,6 +22,7 @@
#include <magicvar.h>
#include <globalvar.h>
#include <environment.h>
+#include <led.h>
#include <of.h>
int errno;
@@ -188,3 +189,24 @@ EXPORT_SYMBOL(barebox_get_hostname);
BAREBOX_MAGICVAR_NAMED(global_hostname, global.hostname,
"shortname of the board. Also used as hostname for DHCP requests");
+
+void __noreturn panic(const char *fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ vprintf(fmt, args);
+ putchar('\n');
+ va_end(args);
+
+ dump_stack();
+
+ led_trigger(LED_TRIGGER_PANIC, TRIGGER_ENABLE);
+
+ if (IS_ENABLED(CONFIG_PANIC_HANG)) {
+ hang();
+ } else {
+ udelay(100000); /* allow messages to go out */
+ reset_cpu(0);
+ }
+}
+EXPORT_SYMBOL(panic);