diff options
Diffstat (limited to 'plat/arm/board/fvp/fvp_bl1_setup.c')
-rw-r--r-- | plat/arm/board/fvp/fvp_bl1_setup.c | 71 |
1 files changed, 17 insertions, 54 deletions
diff --git a/plat/arm/board/fvp/fvp_bl1_setup.c b/plat/arm/board/fvp/fvp_bl1_setup.c index e713bbc440..59fc0f3265 100644 --- a/plat/arm/board/fvp/fvp_bl1_setup.c +++ b/plat/arm/board/fvp/fvp_bl1_setup.c @@ -1,15 +1,17 @@ /* - * Copyright (c) 2013-2020, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2013-2021, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ #include <assert.h> +#include <errno.h> #include <bl1/bl1.h> #include <common/tbbr/tbbr_img_def.h> #include <drivers/arm/smmu_v3.h> #include <drivers/arm/sp805.h> +#include <lib/mmio.h> #include <plat/arm/common/arm_config.h> #include <plat/arm/common/plat_arm.h> #include <plat/arm/common/arm_def.h> @@ -61,6 +63,12 @@ void bl1_platform_setup(void) __dead2 void bl1_plat_fwu_done(void *client_cookie, void *reserved) { + uint32_t nv_flags = mmio_read_32(V2M_SYS_NVFLAGS_ADDR); + + /* Clear the NV flags register. */ + mmio_write_32((V2M_SYSREGS_BASE + V2M_SYS_NVFLAGSCLR), + nv_flags); + /* Setup the watchdog to reset the system as soon as possible */ sp805_refresh(ARM_SP805_TWDG_BASE, 1U); @@ -68,59 +76,14 @@ __dead2 void bl1_plat_fwu_done(void *client_cookie, void *reserved) wfi(); } -#if MEASURED_BOOT -/* - * Calculates and writes BL2 hash data to TB_FW_CONFIG DTB. - */ -void bl1_plat_set_bl2_hash(const image_desc_t *image_desc) -{ - arm_bl1_set_bl2_hash(image_desc); -} - -/* - * Implementation for bl1_plat_handle_post_image_load(). This function - * populates the default arguments to BL2. The BL2 memory layout structure - * is allocated and the calculated layout is populated in arg1 to BL2. - */ -int bl1_plat_handle_post_image_load(unsigned int image_id) +/******************************************************************************* + * The following function checks if Firmware update is needed by checking error + * reported in NV flag. + ******************************************************************************/ +bool plat_arm_bl1_fwu_needed(void) { - meminfo_t *bl2_tzram_layout; - meminfo_t *bl1_tzram_layout; - image_desc_t *image_desc; - entry_point_info_t *ep_info; - - if (image_id != BL2_IMAGE_ID) { - return 0; - } - - /* Get the image descriptor */ - image_desc = bl1_plat_get_image_desc(BL2_IMAGE_ID); - assert(image_desc != NULL); - - /* Calculate BL2 hash and set it in TB_FW_CONFIG */ - bl1_plat_set_bl2_hash(image_desc); - - /* Get the entry point info */ - ep_info = &image_desc->ep_info; - - /* Find out how much free trusted ram remains after BL1 load */ - bl1_tzram_layout = bl1_plat_sec_mem_layout(); - - /* - * Create a new layout of memory for BL2 as seen by BL1 i.e. - * tell it the amount of total and free memory available. - * This layout is created at the first free address visible - * to BL2. BL2 will read the memory layout before using its - * memory for other purposes. - */ - bl2_tzram_layout = (meminfo_t *)bl1_tzram_layout->total_base; - - bl1_calc_bl2_mem_layout(bl1_tzram_layout, bl2_tzram_layout); - - ep_info->args.arg1 = (uintptr_t)bl2_tzram_layout; + int32_t nv_flags = (int32_t)mmio_read_32(V2M_SYS_NVFLAGS_ADDR); - VERBOSE("BL1: BL2 memory layout address = %p\n", - (void *)bl2_tzram_layout); - return 0; + /* if image load/authentication failed */ + return ((nv_flags == -EAUTH) || (nv_flags == -ENOENT)); } -#endif /* MEASURED_BOOT */ |