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