diff options
Diffstat (limited to 'arch/blackfin/lib')
-rw-r--r-- | arch/blackfin/lib/cpu.c | 13 | ||||
-rw-r--r-- | arch/blackfin/lib/traps.c | 5 |
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(); } |