mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-19 11:04:20 +00:00

Provide six initcall levels for drivers/modules initialize HW controllers or runtime arguments during cold boot. The initcall level cold boot execution order: -MTK_EARLY_PLAT_INIT Call before MMU enabled. -MTK_ARCH_INIT MMU Enabled, arch related init(GiC init, interrupt type registration). -MTK_PLAT_SETUP_0_INIT MTK driver init level 0. -MTK_PLAT_SETUP_1_INIT MTK driver init level 1. -MTK_PLAT_RUNTIME_INIT MTK driver init. After this initcall, TF-A handovers to MTK 2nd bootloader. -MTK_PLAT_BL33_DEFER_INIT MTK 2nd bootloader traps to TF-A before handover to rich OS. This initcall executed in the trap handler(boot_to_kernel). Signed-off-by: Leon Chen <leon.chen@mediatek.com> Change-Id: Icd7fe95372441db73c975ccb6ce77a6c529df1cc
39 lines
869 B
C
39 lines
869 B
C
/*
|
|
* Copyright (c) 2022, MediaTek Inc. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include <common/debug.h>
|
|
#include <lib/utils_def.h>
|
|
#include <lib/mtk_init/mtk_init.h>
|
|
|
|
INIT_CALL_TABLE(EXPAND_AS_EXTERN);
|
|
extern struct initcall __MTK_PLAT_INITCALL_END__[];
|
|
|
|
struct initcall *initcall_list[] = {
|
|
INIT_CALL_TABLE(EXPAND_AS_SYMBOL_ARR)
|
|
__MTK_PLAT_INITCALL_END__
|
|
};
|
|
|
|
void mtk_init_one_level(uint32_t level)
|
|
{
|
|
const struct initcall *entry;
|
|
int error;
|
|
|
|
if (level >= MTK_INIT_LVL_MAX) {
|
|
ERROR("invalid level:%u\n", level);
|
|
panic();
|
|
}
|
|
|
|
INFO("init calling level:%u\n", level);
|
|
for (entry = initcall_list[level];
|
|
(entry != NULL) && (entry < initcall_list[level + 1]);
|
|
entry++) {
|
|
INFO("calling %s\n", entry->name);
|
|
error = entry->fn();
|
|
if (error != 0) {
|
|
ERROR("init %s fail, errno:%d\n", entry->name, error);
|
|
}
|
|
}
|
|
}
|