From: Haavard Skinnemoen In order to reset the CPU by setting the RES bit in the DC (Development Control) register, we must ensure that DBE (Debug Enable) is set as well, or the CPU will just ignore the reset request. However, if we set both at the same time, DBE will stay set after reset, and the performance will degrade significantly because important optimizations like branch prediction will be disabled. Setting DBE first, and then RES, will reset the CPU without keeping DBE set after reset. Signed-off-by: Haavard Skinnemoen Signed-off-by: Andrew Morton --- arch/avr32/kernel/process.c | 3 ++- include/asm-avr32/ocd.h | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff -puN arch/avr32/kernel/process.c~avr32-dont-leave-dbe-set-when-resetting-cpu arch/avr32/kernel/process.c --- a/arch/avr32/kernel/process.c~avr32-dont-leave-dbe-set-when-resetting-cpu +++ a/arch/avr32/kernel/process.c @@ -46,7 +46,8 @@ void machine_power_off(void) void machine_restart(char *cmd) { - __mtdr(DBGREG_DC, 0x40002000); + __mtdr(DBGREG_DC, DC_DBE); + __mtdr(DBGREG_DC, DC_RES); while (1) ; } diff -puN include/asm-avr32/ocd.h~avr32-dont-leave-dbe-set-when-resetting-cpu include/asm-avr32/ocd.h --- a/include/asm-avr32/ocd.h~avr32-dont-leave-dbe-set-when-resetting-cpu +++ a/include/asm-avr32/ocd.h @@ -57,6 +57,7 @@ #define DC_RID (1 << 27) #define DC_ORP (1 << 28) #define DC_MM (1 << 29) +#define DC_RES (1 << 30) /* Fields in the Development Status register */ #define DS_SSS (1 << 0) _