summaryrefslogtreecommitdiffstats
path: root/common/misc.c
diff options
context:
space:
mode:
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 65f3306bee..6da71c7ab7 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);