X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=lib%2Finitcall.c;h=db7c558bde5efc9fbf03b33298936614e6a61bf3;hb=110d80a1f2e2b5b2deec0a3e0aeb3760e1fee159;hp=fa76dd73c19ed89c58a5f79b65a7f4ab49ec7a06;hpb=326ea986ac150acdc7656d57fca647db80b50158;p=u-boot diff --git a/lib/initcall.c b/lib/initcall.c index fa76dd73c1..db7c558bde 100644 --- a/lib/initcall.c +++ b/lib/initcall.c @@ -6,16 +6,33 @@ #include #include +#include -int initcall_run_list(init_fnc_t init_sequence[]) +DECLARE_GLOBAL_DATA_PTR; + +int initcall_run_list(const init_fnc_t init_sequence[]) { - init_fnc_t *init_fnc_ptr; + const init_fnc_t *init_fnc_ptr; for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { - debug("initcall: %p\n", *init_fnc_ptr); - if ((*init_fnc_ptr)()) { - debug("initcall sequence %p failed at call %p\n", - init_sequence, *init_fnc_ptr); + unsigned long reloc_ofs = 0; + int ret; + + if (gd->flags & GD_FLG_RELOC) + reloc_ofs = gd->reloc_off; +#ifdef CONFIG_EFI_APP + reloc_ofs = (unsigned long)image_base; +#endif + debug("initcall: %p", (char *)*init_fnc_ptr - reloc_ofs); + if (gd->flags & GD_FLG_RELOC) + debug(" (relocated to %p)\n", (char *)*init_fnc_ptr); + else + debug("\n"); + ret = (*init_fnc_ptr)(); + if (ret) { + printf("initcall sequence %p failed at call %p (err=%d)\n", + init_sequence, + (char *)*init_fnc_ptr - reloc_ofs, ret); return -1; } }