diff options
Diffstat (limited to 'cpu/i386')
| -rw-r--r-- | cpu/i386/cpu.c | 17 | ||||
| -rw-r--r-- | cpu/i386/interrupts.c | 16 | 
2 files changed, 17 insertions, 16 deletions
| diff --git a/cpu/i386/cpu.c b/cpu/i386/cpu.c index 5fd37c72a60..b9af5f89d53 100644 --- a/cpu/i386/cpu.c +++ b/cpu/i386/cpu.c @@ -35,6 +35,7 @@  #include <common.h>  #include <command.h> +#include <asm/interrupt.h>  int cpu_init(void)  { @@ -64,3 +65,19 @@ void  flush_cache (unsigned long dummy1, unsigned long dummy2)  	asm("wbinvd\n");  	return;  } + +void __attribute__ ((regparm(0))) generate_gpf(void); + +/* segment 0x70 is an arbitrary segment which does not exist */ +asm(".globl generate_gpf\n" +    "generate_gpf:\n" +    "ljmp   $0x70, $0x47114711\n"); + +void __reset_cpu(ulong addr) +{ +	printf("Resetting using i386 Triple Fault\n"); +	set_vector(13, generate_gpf);  /* general protection fault handler */ +	set_vector(8, generate_gpf);   /* double fault handler */ +	generate_gpf();                /* start the show */ +} +void reset_cpu(ulong addr) __attribute__((weak, alias("__reset_cpu"))); diff --git a/cpu/i386/interrupts.c b/cpu/i386/interrupts.c index ba9e89df261..badb30bb8a1 100644 --- a/cpu/i386/interrupts.c +++ b/cpu/i386/interrupts.c @@ -508,19 +508,3 @@ int disable_interrupts(void)  	return (flags&0x200); /* IE flags is bit 9 */  } - - -#ifdef CONFIG_SYS_RESET_GENERIC - -void __attribute__ ((regparm(0))) generate_gpf(void); -asm(".globl generate_gpf\n" -    "generate_gpf:\n" -    "ljmp   $0x70, $0x47114711\n"); /* segment 0x70 is an arbitrary segment which does not -				    * exist */ -void reset_cpu(ulong addr) -{ -	set_vector(13, generate_gpf);  /* general protection fault handler */ -	set_vector(8, generate_gpf);   /* double fault handler */ -	generate_gpf();                /* start the show */ -} -#endif | 
