summaryrefslogtreecommitdiffstats
path: root/arch/blackfin/lib
diff options
context:
space:
mode:
Diffstat (limited to 'arch/blackfin/lib')
-rw-r--r--arch/blackfin/lib/cpu.c13
-rw-r--r--arch/blackfin/lib/traps.c5
2 files changed, 14 insertions, 4 deletions
diff --git a/arch/blackfin/lib/cpu.c b/arch/blackfin/lib/cpu.c
index 9d4c6e3e89..34b93e78ac 100644
--- a/arch/blackfin/lib/cpu.c
+++ b/arch/blackfin/lib/cpu.c
@@ -27,8 +27,9 @@
#include <asm/entry.h>
#include <asm/cpu.h>
#include <init.h>
+#include <restart.h>
-void __noreturn reset_cpu(unsigned long addr)
+static void __noreturn blackfin_restart_cpu(struct restart_handler *rst)
{
icache_disable();
@@ -41,9 +42,17 @@ void __noreturn reset_cpu(unsigned long addr)
);
/* Not reached */
- while (1);
+ hang();
}
+static int restart_register_feature(void)
+{
+ restart_handler_register_fn(blackfin_restart_cpu);
+
+ return 0;
+}
+coredevice_initcall(restart_register_feature);
+
void icache_disable(void)
{
#ifdef __ADSPBF537__
diff --git a/arch/blackfin/lib/traps.c b/arch/blackfin/lib/traps.c
index c2dda73465..2111d255fd 100644
--- a/arch/blackfin/lib/traps.c
+++ b/arch/blackfin/lib/traps.c
@@ -30,6 +30,7 @@
*/
#include <common.h>
+#include <restart.h>
#include <linux/types.h>
#include <asm/system.h>
#include <asm/traps.h>
@@ -91,7 +92,7 @@ void trap_c (struct pt_regs *regs)
printf("\nPlease reset the board\n");
- reset_cpu(0);
+ restart_machine();
}
void blackfin_irq_panic(int reason, struct pt_regs *regs)
@@ -101,6 +102,6 @@ void blackfin_irq_panic(int reason, struct pt_regs *regs)
printf("Unhandled IRQ or exceptions!\n");
printf("Please reset the board \n");
- reset_cpu(0);
+ restart_machine();
}