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
13*716deb86SManish V Badarkhe #include <plat/arm/common/plat_arm_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
plat_lfa_get_components(plat_lfa_component_info_t ** components)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
is_plat_lfa_activation_pending(uint32_t lfa_component_id)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
plat_lfa_cancel(uint32_t lfa_component_id)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
plat_lfa_load_auth_image(uint32_t lfa_component_id)63*716deb86SManish V Badarkhe int plat_lfa_load_auth_image(uint32_t lfa_component_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 }
7231e9fd9cSManish V Badarkhe
plat_lfa_notify_activate(uint32_t lfa_component_id)73*716deb86SManish V Badarkhe int plat_lfa_notify_activate(uint32_t lfa_component_id)
7431e9fd9cSManish V Badarkhe {
7531e9fd9cSManish V Badarkhe return 0;
7631e9fd9cSManish V Badarkhe }
77