xref: /optee_os/core/kernel/initcall.c (revision c5c560247230a87e482da0a380807572b58b6375)
1*c5c56024SJens Wiklander // SPDX-License-Identifier: BSD-2-Clause
2*c5c56024SJens Wiklander /*
3*c5c56024SJens Wiklander  * Copyright (c) 2020, Linaro Limited
4*c5c56024SJens Wiklander  * Copyright (c) 2014, STMicroelectronics International N.V.
5*c5c56024SJens Wiklander  */
6*c5c56024SJens Wiklander 
7*c5c56024SJens Wiklander #include <initcall.h>
8*c5c56024SJens Wiklander #include <trace.h>
9*c5c56024SJens Wiklander #include <kernel/linker.h>
10*c5c56024SJens Wiklander 
11*c5c56024SJens Wiklander /*
12*c5c56024SJens Wiklander  * Note: this function is weak just to make it possible to exclude it from
13*c5c56024SJens Wiklander  * the unpaged area.
14*c5c56024SJens Wiklander  */
15*c5c56024SJens Wiklander void __weak call_initcalls(void)
16*c5c56024SJens Wiklander {
17*c5c56024SJens Wiklander 	const struct initcall *call = NULL;
18*c5c56024SJens Wiklander 	TEE_Result ret = TEE_SUCCESS;
19*c5c56024SJens Wiklander 
20*c5c56024SJens Wiklander 	for (call = initcall_begin; call < initcall_end; call++) {
21*c5c56024SJens Wiklander 		DMSG("level %d %s()", call->level, call->func_name);
22*c5c56024SJens Wiklander 		ret = call->func();
23*c5c56024SJens Wiklander 		if (ret != TEE_SUCCESS) {
24*c5c56024SJens Wiklander 			EMSG("Initcall __text_start + 0x%08" PRIxVA
25*c5c56024SJens Wiklander 			     " failed", (vaddr_t)call - VCORE_START_VA);
26*c5c56024SJens Wiklander 		}
27*c5c56024SJens Wiklander 	}
28*c5c56024SJens Wiklander 
29*c5c56024SJens Wiklander 	IMSG("Initialized");
30*c5c56024SJens Wiklander }
31