13bb52661SManish V Badarkhe /* 23bb52661SManish V Badarkhe * Copyright (c) 2025, Arm Limited. All rights reserved. 33bb52661SManish V Badarkhe * 43bb52661SManish V Badarkhe * SPDX-License-Identifier: BSD-3-Clause 53bb52661SManish V Badarkhe */ 63bb52661SManish V Badarkhe 73bb52661SManish V Badarkhe #include <errno.h> 83bb52661SManish V Badarkhe #include <plat/common/platform.h> 9b100e91dSManish V Badarkhe #include <services/bl31_lfa.h> 10b100e91dSManish V Badarkhe #include <services/rmmd_rmm_lfa.h> 113bb52661SManish V Badarkhe #include <tools_share/firmware_image_package.h> 123bb52661SManish V Badarkhe 133bb52661SManish V Badarkhe #include <fvp_lfa_components.h> 143bb52661SManish V Badarkhe 153bb52661SManish V Badarkhe /* Keep this array consistent with enum fvp_lfa_component_id_t */ 163bb52661SManish V Badarkhe static plat_lfa_component_info_t fvp_lfa_components[LFA_MAX_DEFINED_COMPONENTS] = { 17b100e91dSManish V Badarkhe [LFA_BL31_COMPONENT] = {LFA_BL31_COMPONENT, UUID_EL3_RUNTIME_FIRMWARE_BL31, 18b100e91dSManish V Badarkhe NULL, false}, 193bb52661SManish V Badarkhe #if BL32_BASE 20b100e91dSManish V Badarkhe [LFA_BL32_COMPONENT] = {LFA_BL32_COMPONENT, UUID_SECURE_PAYLOAD_BL32, 21b100e91dSManish V Badarkhe NULL, false}, 223bb52661SManish V Badarkhe #endif /* BL32_BASE */ 23b100e91dSManish V Badarkhe [LFA_BL33_COMPONENT] = {LFA_BL33_COMPONENT, UUID_NON_TRUSTED_FIRMWARE_BL33, 24b100e91dSManish V Badarkhe NULL, false}, 253bb52661SManish V Badarkhe #if ENABLE_RME 26b100e91dSManish V Badarkhe [LFA_RMM_COMPONENT] = {LFA_RMM_COMPONENT, UUID_REALM_MONITOR_MGMT_FIRMWARE, 27b100e91dSManish V Badarkhe NULL, false}, 283bb52661SManish V Badarkhe #endif /* ENABLE_RME */ 293bb52661SManish V Badarkhe }; 303bb52661SManish V Badarkhe 313bb52661SManish V Badarkhe uint32_t plat_lfa_get_components(plat_lfa_component_info_t **components) 323bb52661SManish V Badarkhe { 333bb52661SManish V Badarkhe if (components == NULL) { 343bb52661SManish V Badarkhe return -EINVAL; 353bb52661SManish V Badarkhe } 363bb52661SManish V Badarkhe 37b100e91dSManish V Badarkhe fvp_lfa_components[LFA_BL31_COMPONENT].activator = get_bl31_activator(); 38b100e91dSManish V Badarkhe #if ENABLE_RME 39b100e91dSManish V Badarkhe fvp_lfa_components[LFA_RMM_COMPONENT].activator = get_rmm_activator(); 40b100e91dSManish V Badarkhe #endif /* ENABLE_RME */ 41b100e91dSManish V Badarkhe 423bb52661SManish V Badarkhe *components = fvp_lfa_components; 433bb52661SManish V Badarkhe return LFA_MAX_DEFINED_COMPONENTS; 443bb52661SManish V Badarkhe } 45357079c7SManish V Badarkhe 46357079c7SManish V Badarkhe bool is_plat_lfa_activation_pending(uint32_t lfa_component_id) 47357079c7SManish V Badarkhe { 48357079c7SManish V Badarkhe #if ENABLE_RME 49357079c7SManish V Badarkhe if (lfa_component_id == LFA_RMM_COMPONENT) { 50357079c7SManish V Badarkhe return true; 51357079c7SManish V Badarkhe } 52357079c7SManish V Badarkhe #endif /* ENABLE_RME */ 53357079c7SManish V Badarkhe 54357079c7SManish V Badarkhe return false; 55357079c7SManish V Badarkhe } 56b4cbf508SManish V Badarkhe 57b4cbf508SManish V Badarkhe int plat_lfa_cancel(uint32_t lfa_component_id) 58b4cbf508SManish V Badarkhe { 59b4cbf508SManish V Badarkhe /* placeholder function to do cancel LFA of given component */ 60b4cbf508SManish V Badarkhe return 0; 61b4cbf508SManish V Badarkhe } 62a7fbcccdSManish V Badarkhe 63a7fbcccdSManish V Badarkhe int plat_lfa_load_auth_image(uint32_t img_id) 64a7fbcccdSManish V Badarkhe { 65a7fbcccdSManish V Badarkhe /* 66a7fbcccdSManish V Badarkhe * In AEM FVP, we don't want to bloat the code by adding 67a7fbcccdSManish V Badarkhe * loading and authentication mechanism, so here we assumed 68a7fbcccdSManish V Badarkhe * that the components are pre-loaded and authenticated already. 69a7fbcccdSManish V Badarkhe */ 70a7fbcccdSManish V Badarkhe return 0; 71a7fbcccdSManish V Badarkhe } 72*31e9fd9cSManish V Badarkhe 73*31e9fd9cSManish V Badarkhe int plat_lfa_notify_activate(uint32_t img_id) 74*31e9fd9cSManish V Badarkhe { 75*31e9fd9cSManish V Badarkhe return 0; 76*31e9fd9cSManish V Badarkhe } 77