diff options
| -rw-r--r-- | arch/nios2/cpu/cpu.c | 11 | ||||
| -rw-r--r-- | arch/nios2/include/asm/system.h | 5 | 
2 files changed, 10 insertions, 6 deletions
| diff --git a/arch/nios2/cpu/cpu.c b/arch/nios2/cpu/cpu.c index 6379534a0..d9c654477 100644 --- a/arch/nios2/cpu/cpu.c +++ b/arch/nios2/cpu/cpu.c @@ -40,11 +40,10 @@ int checkcpu (void)  	return (0);  } - -int do_reset (void) +int do_reset(void)  { -	void (*rst)(void) = (void(*)(void))CONFIG_SYS_RESET_ADDR; -	disable_interrupts (); -	rst(); -	return(0); +	disable_interrupts(); +	/* indirect call to go beyond 256MB limitation of toolchain */ +	nios2_callr(CONFIG_SYS_RESET_ADDR); +	return 0;  } diff --git a/arch/nios2/include/asm/system.h b/arch/nios2/include/asm/system.h index bb03ca531..086d92bb0 100644 --- a/arch/nios2/include/asm/system.h +++ b/arch/nios2/include/asm/system.h @@ -56,4 +56,9 @@  	((flags & NIOS2_STATUS_PIE_MSK) == 0x0);	\  }) +/* indirect call to go beyond 256MB limitation of toolchain */ +#define nios2_callr(addr) __asm__ __volatile__ (	\ +	"callr	%0"					\ +	: : "r" (addr)) +  #endif /* __ASM_NIOS2_SYSTEM_H */ |