1c8a311d9SSimon Glass /* 2c8a311d9SSimon Glass * Copyright (c) 2013 The Chromium OS Authors. 3c8a311d9SSimon Glass * 41a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 5c8a311d9SSimon Glass */ 6c8a311d9SSimon Glass 7c8a311d9SSimon Glass #include <common.h> 8c8a311d9SSimon Glass #include <initcall.h> 9c8a311d9SSimon Glass 10*2f43f854SSimon Glass DECLARE_GLOBAL_DATA_PTR; 11*2f43f854SSimon Glass 12*2f43f854SSimon Glass int initcall_run_list(const init_fnc_t init_sequence[]) 13c8a311d9SSimon Glass { 14*2f43f854SSimon Glass const init_fnc_t *init_fnc_ptr; 15c8a311d9SSimon Glass 16c8a311d9SSimon Glass for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { 17*2f43f854SSimon Glass unsigned long reloc_ofs = 0; 18*2f43f854SSimon Glass 19*2f43f854SSimon Glass if (gd->flags & GD_FLG_RELOC) 20*2f43f854SSimon Glass reloc_ofs = gd->reloc_off; 21*2f43f854SSimon Glass debug("initcall: %p\n", (char *)*init_fnc_ptr - reloc_ofs); 22c8a311d9SSimon Glass if ((*init_fnc_ptr)()) { 23*2f43f854SSimon Glass printf("initcall sequence %p failed at call %p\n", 24*2f43f854SSimon Glass init_sequence, 25*2f43f854SSimon Glass (char *)*init_fnc_ptr - reloc_ofs); 26c8a311d9SSimon Glass return -1; 27c8a311d9SSimon Glass } 28c8a311d9SSimon Glass } 29c8a311d9SSimon Glass return 0; 30c8a311d9SSimon Glass } 31