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