diff --git a/core/arch/arm/kernel/boot.c b/core/arch/arm/kernel/boot.c index b21076e00b1..2235fab3660 100644 --- a/core/arch/arm/kernel/boot.c +++ b/core/arch/arm/kernel/boot.c @@ -935,7 +935,8 @@ void init_tee_runtime(void) */ if (!IS_ENABLED(CFG_NS_VIRTUALIZATION)) call_preinitcalls(); - call_initcalls(); + call_early_initcalls(); + call_service_initcalls(); /* * These two functions uses crypto_rng_read() to initialize the @@ -1075,6 +1076,8 @@ void __weak boot_init_primary_late(unsigned long fdt __unused, */ void __weak boot_init_primary_final(void) { + if (!IS_ENABLED(CFG_NS_VIRTUALIZATION)) + call_driver_initcalls(); call_finalcalls(); IMSG("Primary CPU switching to normal world boot"); } diff --git a/core/arch/arm/kernel/virtualization.c b/core/arch/arm/kernel/virtualization.c index 86942c7976a..63599dcf174 100644 --- a/core/arch/arm/kernel/virtualization.c +++ b/core/arch/arm/kernel/virtualization.c @@ -579,6 +579,7 @@ void virt_on_stdcall(void) mutex_lock(&prtn->mutex); if (!prtn->runtime_initialized) { init_tee_runtime(); + call_driver_initcalls(); prtn->runtime_initialized = true; } mutex_unlock(&prtn->mutex);