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;
}
((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 */
if (boot_get_fdt(flag, argc, argv, images, &of_flat_tree, &of_size))
return 1;
#endif
- if (!of_flat_tree)
+ if (!of_flat_tree && argc > 3)
of_flat_tree = (char *)simple_strtoul(argv[3], NULL, 16);
if (of_flat_tree)
initrd_end = (ulong)of_flat_tree;