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 */ 15*bd59a6adSJens Wiklander void __weak call_preinitcalls(void) 16*bd59a6adSJens Wiklander { 17*bd59a6adSJens Wiklander const struct initcall *call = NULL; 18*bd59a6adSJens Wiklander TEE_Result ret = TEE_SUCCESS; 19*bd59a6adSJens Wiklander 20*bd59a6adSJens Wiklander for (call = preinitcall_begin; call < preinitcall_end; call++) { 21*bd59a6adSJens Wiklander DMSG("level %d %s()", call->level, call->func_name); 22*bd59a6adSJens Wiklander ret = call->func(); 23*bd59a6adSJens Wiklander if (ret != TEE_SUCCESS) { 24*bd59a6adSJens Wiklander EMSG("Preinitcall __text_start + 0x%08" PRIxVA 25*bd59a6adSJens Wiklander " failed", (vaddr_t)call - VCORE_START_VA); 26*bd59a6adSJens Wiklander } 27*bd59a6adSJens Wiklander } 28*bd59a6adSJens Wiklander } 29*bd59a6adSJens Wiklander 30*bd59a6adSJens Wiklander /* 31*bd59a6adSJens Wiklander * Note: this function is weak just to make it possible to exclude it from 32*bd59a6adSJens Wiklander * the unpaged area. 33*bd59a6adSJens Wiklander */ 34c5c56024SJens Wiklander void __weak call_initcalls(void) 35c5c56024SJens Wiklander { 36c5c56024SJens Wiklander const struct initcall *call = NULL; 37c5c56024SJens Wiklander TEE_Result ret = TEE_SUCCESS; 38c5c56024SJens Wiklander 39c5c56024SJens Wiklander for (call = initcall_begin; call < initcall_end; call++) { 40c5c56024SJens Wiklander DMSG("level %d %s()", call->level, call->func_name); 41c5c56024SJens Wiklander ret = call->func(); 42c5c56024SJens Wiklander if (ret != TEE_SUCCESS) { 43c5c56024SJens Wiklander EMSG("Initcall __text_start + 0x%08" PRIxVA 44c5c56024SJens Wiklander " failed", (vaddr_t)call - VCORE_START_VA); 45c5c56024SJens Wiklander } 46c5c56024SJens Wiklander } 47c5c56024SJens Wiklander } 48e3172f9dSJens Wiklander 49e3172f9dSJens Wiklander /* 50e3172f9dSJens Wiklander * Note: this function is weak just to make it possible to exclude it from 51e3172f9dSJens Wiklander * the unpaged area. 52e3172f9dSJens Wiklander */ 53e3172f9dSJens Wiklander void __weak call_finalcalls(void) 54e3172f9dSJens Wiklander { 55e3172f9dSJens Wiklander const struct initcall *call = NULL; 56e3172f9dSJens Wiklander TEE_Result ret = TEE_SUCCESS; 57e3172f9dSJens Wiklander 58e3172f9dSJens Wiklander for (call = finalcall_begin; call < finalcall_end; call++) { 59e3172f9dSJens Wiklander DMSG("level %d %s()", call->level, call->func_name); 60e3172f9dSJens Wiklander ret = call->func(); 61e3172f9dSJens Wiklander if (ret != TEE_SUCCESS) { 62e3172f9dSJens Wiklander EMSG("Finalcall __text_start + 0x%08" PRIxVA 63e3172f9dSJens Wiklander " failed", (vaddr_t)call - VCORE_START_VA); 64e3172f9dSJens Wiklander } 65e3172f9dSJens Wiklander } 66e3172f9dSJens Wiklander } 67