diff options
author | Tom Rini <trini@konsulko.com> | 2019-02-10 08:04:53 -0500 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2019-02-10 08:04:53 -0500 |
commit | 2e8560797fc69a34c330a875da4f5d2992452f1e (patch) | |
tree | fadec67e667ef3d72d62cef98aa3b3b19b2dd4a5 /include/initcall.h | |
parent | 97276a91db8e98f081a40ddf9dc8f81d4032a756 (diff) | |
parent | 4a1fa524e95a1c81674d8a368035b522fd4a99d6 (diff) |
Merge branch '2019-02-08-master-imports'
- bcm6345 watchdog, bcm63158/bcm963158 initial support.
- Various TI platform resyncs and improvements.
- FDT support in Android-format images.
- stm32mp1 improvements.
Diffstat (limited to 'include/initcall.h')
-rw-r--r-- | include/initcall.h | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/include/initcall.h b/include/initcall.h index 01f3f2833f1..3ac01aa2cd2 100644 --- a/include/initcall.h +++ b/include/initcall.h @@ -8,6 +8,39 @@ typedef int (*init_fnc_t)(void); -int initcall_run_list(const init_fnc_t init_sequence[]); +#include <common.h> +#include <initcall.h> +#include <efi.h> + +DECLARE_GLOBAL_DATA_PTR; + +static inline int initcall_run_list(const init_fnc_t init_sequence[]) +{ + const init_fnc_t *init_fnc_ptr; + + for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++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; + } + } + return 0; +} #endif |