Hi Jerome [...]
> + (INITCALL(board_postclk_init);)) > + INITCALL(env_init); /* initialize environment */ > + INITCALL(init_baud_rate); /* initialze baudrate settings */ > + INITCALL(serial_init); /* serial communications setup */ > + INITCALL(console_init_f); /* stage 1 init of console */ > + INITCALL(display_options); /* say that we are here */ > + INITCALL(display_text_info); /* show debugging info if required */ > + INITCALL(checkcpu); > + CONFIG_IS_ENABLED(SYSRESET, (INITCALL(print_resetinfo);)) > /* display cpu info (and speed) */ > - CONFIG_IS_ENABLED(DISPLAY_CPUINFO, (print_cpuinfo,)) > - CONFIG_IS_ENABLED(DTB_RESELECT, (embedded_dtb_select,)) > - CONFIG_IS_ENABLED(DISPLAY_BOARDINFO, (show_board_info,)) > - INIT_FUNC_WATCHDOG_INIT > - INITCALL_EVENT(EVT_MISC_INIT_F), > - INIT_FUNC_WATCHDOG_RESET > - CONFIG_IS_ENABLED(SYS_I2C_LEGACY, (init_func_i2c,)) > - announce_dram_init, > - dram_init, /* configure available RAM banks */ > - CONFIG_IS_ENABLED(POST, (post_init_f,)) > - INIT_FUNC_WATCHDOG_RESET > + CONFIG_IS_ENABLED(DISPLAY_CPUINFO, (INITCALL(print_cpuinfo);)) > + CONFIG_IS_ENABLED(DTB_RESELECT, (INITCALL(embedded_dtb_select);)) > + CONFIG_IS_ENABLED(DISPLAY_BOARDINFO, (INITCALL(show_board_info);)) > + WATCHDOG_INIT(); > + INITCALL_EVT(EVT_MISC_INIT_F); > + WATCHDOG_RESET(); > + CONFIG_IS_ENABLED(SYS_I2C_LEGACY, (INITCALL(init_func_i2c);)) > + INITCALL(announce_dram_init); > + INITCALL(dram_init); /* configure available RAM banks */ > + CONFIG_IS_ENABLED(POST, (INITCALL(post_init_f);)) > + WATCHDOG_INIT(); The previous function was calling init, reset, reset for the watchdog. The new code does init, reset, init, reset etc. Is this intentional? Was that a bug of the existing code? Thanks /Ilias > #if defined(CFG_SYS_DRAM_TEST) > - testdram, > + INITCALL(testdram); > #endif /* CFG_SYS_DRAM_TEST */ > - INIT_FUNC_WATCHDOG_RESET > - > - CONFIG_IS_ENABLED(POST, (init_post,)) > - INIT_FUNC_WATCHDOG_RESET > + WATCHDOG_RESET(); > + CONFIG_IS_ENABLED(POST, (INITCALL(init_post);)) > + WATCHDOG_RESET(); > /* > * Now that we have DRAM mapped and working, we can > * relocate the code and continue running from DRAM. > @@ -934,48 +937,48 @@ static const init_fnc_t init_sequence_f[] = { > * - monitor code > * - board info struct > */ > - setup_dest_addr, > + INITCALL(setup_dest_addr); > #if defined(CONFIG_OF_BOARD_FIXUP) && > !defined(CONFIG_OF_INITIAL_DTB_READONLY) > - fix_fdt, > + INITCALL(fix_fdt); > #endif > #ifdef CFG_PRAM > - reserve_pram, > + INITCALL(reserve_pram); > #endif > - reserve_round_4k, > - setup_relocaddr_from_bloblist, > - arch_reserve_mmu, > - reserve_video, > - reserve_trace, > - reserve_uboot, > - reserve_malloc, > - reserve_board, > - reserve_global_data, > - reserve_fdt, > + INITCALL(reserve_round_4k); > + INITCALL(setup_relocaddr_from_bloblist); > + INITCALL(arch_reserve_mmu); > + INITCALL(reserve_video); > + INITCALL(reserve_trace); > + INITCALL(reserve_uboot); > + INITCALL(reserve_malloc); > + INITCALL(reserve_board); > + INITCALL(reserve_global_data); > + INITCALL(reserve_fdt); > #if defined(CONFIG_OF_BOARD_FIXUP) && defined(CONFIG_OF_INITIAL_DTB_READONLY) > - reloc_fdt, > - fix_fdt, > + INITCALL(reloc_fdt); > + INITCALL(fix_fdt); > #endif > - reserve_bootstage, > - reserve_bloblist, > - reserve_arch, > - reserve_stacks, > - dram_init_banksize, > - show_dram_config, > - INIT_FUNC_WATCHDOG_RESET > - setup_bdinfo, > - display_new_sp, > - INIT_FUNC_WATCHDOG_RESET > + INITCALL(reserve_bootstage); > + INITCALL(reserve_bloblist); > + INITCALL(reserve_arch); > + INITCALL(reserve_stacks); > + INITCALL(dram_init_banksize); > + INITCALL(show_dram_config); > + WATCHDOG_RESET(); > + INITCALL(setup_bdinfo); > + INITCALL(display_new_sp); > + WATCHDOG_RESET(); > #if !defined(CONFIG_OF_BOARD_FIXUP) || > !defined(CONFIG_OF_INITIAL_DTB_READONLY) > - reloc_fdt, > + INITCALL(reloc_fdt); > #endif > - reloc_bootstage, > - reloc_bloblist, > - setup_reloc, > + INITCALL(reloc_bootstage); > + INITCALL(reloc_bloblist); > + INITCALL(setup_reloc); > #if defined(CONFIG_X86) || defined(CONFIG_ARC) > - copy_uboot_to_ram, > - do_elf_reloc_fixups, > + INITCALL(copy_uboot_to_ram); > + INITCALL(do_elf_reloc_fixups); > #endif > - clear_bss, > + INITCALL(clear_bss); > /* > * Deregister all cyclic functions before relocation, so that > * gd->cyclic_list does not contain any references to pre-relocation > @@ -985,12 +988,11 @@ static const init_fnc_t init_sequence_f[] = { > * This should happen as late as possible so that the window where a > * watchdog device is not serviced is as small as possible. > */ > - cyclic_unregister_all, > + INITCALL(cyclic_unregister_all); > #if !defined(CONFIG_ARM) && !defined(CONFIG_SANDBOX) > - jump_to_copy, > + INITCALL(jump_to_copy); > #endif > - NULL, > -}; > +} > > void board_init_f(ulong boot_flags) > { > @@ -1000,8 +1002,7 @@ void board_init_f(ulong boot_flags) > gd->flags &= ~GD_FLG_HAVE_CONSOLE; > gd->boardf = &boardf; > > - if (initcall_run_list(init_sequence_f)) > - hang(); > + initcall_run_f(); > > #if !defined(CONFIG_ARM) && !defined(CONFIG_SANDBOX) && \ > !defined(CONFIG_EFI_APP) && !CONFIG_IS_ENABLED(X86_64) && \ > diff --git a/include/initcall.h b/include/initcall.h > index 62d3bb67f08..9398a3ec7d5 100644 > --- a/include/initcall.h > +++ b/include/initcall.h > @@ -8,6 +8,7 @@ > > #include <asm/types.h> > #include <event.h> > +#include <hang.h> > > _Static_assert(EVT_COUNT < 256, "Can only support 256 event types with 8 > bits"); > > @@ -35,4 +36,30 @@ typedef int (*init_fnc_t)(void); > */ > int initcall_run_list(const init_fnc_t init_sequence[]); > > +#define INITCALL(_call) \ > + do { \ > + if (_call()) { \ > + debug("%s(): calling %s() failed\n", __func__, \ > + #_call); \ > + hang(); \ > + } \ > + } while (0) > + > +#define INITCALL_EVT(_evt) \ > + do { \ > + if (event_notify_null(_evt)) { \ > + debug("%s(): event %d/%s failed\n", __func__, _evt, \ > + event_type_name(_evt)) ; \ > + hang(); \ > + } \ > + } while (0) > + > +#if defined(CONFIG_WATCHDOG) || defined(CONFIG_HW_WATCHDOG) > +#define WATCHDOG_INIT() INITCALL(init_func_watchdog_init) > +#define WATCHDOG_RESET() INITCALL(init_func_watchdog_reset) > +#else > +#define WATCHDOG_INIT() > +#define WATCHDOG_RESET() > +#endif > + > #endif > -- > 2.43.0 >