blob: 3c5321d0e12bfb78ad7c3f521afcf2dc5fe6b4a8 [file] [log] [blame]
/*
* Copyright (c) 2025, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <errno.h>
#include <plat/common/platform.h>
#include <services/bl31_lfa.h>
#include <services/rmmd_rmm_lfa.h>
#include <tools_share/firmware_image_package.h>
#include <fvp_lfa_components.h>
/* Keep this array consistent with enum fvp_lfa_component_id_t */
static plat_lfa_component_info_t fvp_lfa_components[LFA_MAX_DEFINED_COMPONENTS] = {
[LFA_BL31_COMPONENT] = {LFA_BL31_COMPONENT, UUID_EL3_RUNTIME_FIRMWARE_BL31,
NULL, false},
#if BL32_BASE
[LFA_BL32_COMPONENT] = {LFA_BL32_COMPONENT, UUID_SECURE_PAYLOAD_BL32,
NULL, false},
#endif /* BL32_BASE */
[LFA_BL33_COMPONENT] = {LFA_BL33_COMPONENT, UUID_NON_TRUSTED_FIRMWARE_BL33,
NULL, false},
#if ENABLE_RME
[LFA_RMM_COMPONENT] = {LFA_RMM_COMPONENT, UUID_REALM_MONITOR_MGMT_FIRMWARE,
NULL, false},
#endif /* ENABLE_RME */
};
uint32_t plat_lfa_get_components(plat_lfa_component_info_t **components)
{
if (components == NULL) {
return -EINVAL;
}
fvp_lfa_components[LFA_BL31_COMPONENT].activator = get_bl31_activator();
#if ENABLE_RME
fvp_lfa_components[LFA_RMM_COMPONENT].activator = get_rmm_activator();
#endif /* ENABLE_RME */
*components = fvp_lfa_components;
return LFA_MAX_DEFINED_COMPONENTS;
}
bool is_plat_lfa_activation_pending(uint32_t lfa_component_id)
{
#if ENABLE_RME
if (lfa_component_id == LFA_RMM_COMPONENT) {
return true;
}
#endif /* ENABLE_RME */
return false;
}
int plat_lfa_cancel(uint32_t lfa_component_id)
{
/* placeholder function to do cancel LFA of given component */
return 0;
}
int plat_lfa_load_auth_image(uint32_t img_id)
{
/*
* In AEM FVP, we don't want to bloat the code by adding
* loading and authentication mechanism, so here we assumed
* that the components are pre-loaded and authenticated already.
*/
return 0;
}