diff --git a/plat/arm/board/common/board_css_common.c b/plat/arm/board/common/board_css_common.c index 032ebdf..c1c3e66 100644 --- a/plat/arm/board/common/board_css_common.c +++ b/plat/arm/board/common/board_css_common.c @@ -14,7 +14,7 @@ #ifdef IMAGE_BL1 const mmap_region_t plat_arm_mmap[] = { ARM_MAP_SHARED_RAM, - V2M_MAP_FLASH0_RO, + V2M_MAP_FLASH0_RW, V2M_MAP_IOFPGA, CSS_MAP_DEVICE, SOC_CSS_MAP_DEVICE, @@ -28,7 +28,7 @@ #ifdef IMAGE_BL2 const mmap_region_t plat_arm_mmap[] = { ARM_MAP_SHARED_RAM, - V2M_MAP_FLASH0_RO, + V2M_MAP_FLASH0_RW, #ifdef PLAT_ARM_MEM_PROT_ADDR ARM_V2M_MAP_MEM_PROTECT, #endif diff --git a/plat/arm/board/fvp/fvp_bl1_setup.c b/plat/arm/board/fvp/fvp_bl1_setup.c index d50c20a..4b2a340 100644 --- a/plat/arm/board/fvp/fvp_bl1_setup.c +++ b/plat/arm/board/fvp/fvp_bl1_setup.c @@ -30,16 +30,3 @@ */ fvp_interconnect_enable(); } - -/******************************************************************************* - * The following function checks if Firmware update is needed, - * by checking if TOC in FIP image is valid or not. - ******************************************************************************/ -unsigned int bl1_plat_get_next_image_id(void) -{ - if (!arm_io_is_toc_valid()) - return NS_BL1U_IMAGE_ID; - - return BL2_IMAGE_ID; -} - diff --git a/plat/arm/board/fvp/fvp_err.c b/plat/arm/board/fvp/fvp_err.c deleted file mode 100644 index d9ad517..0000000 --- a/plat/arm/board/fvp/fvp_err.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#include -#include -#include -#include -#include -#include -#include - -/* - * FVP error handler - */ -void plat_error_handler(int err) -{ - int ret; - - switch (err) { - case -ENOENT: - case -EAUTH: - /* Image load or authentication error. Erase the ToC */ - INFO("Erasing FIP ToC from flash...\n"); - nor_unlock(PLAT_ARM_FIP_BASE); - ret = nor_word_program(PLAT_ARM_FIP_BASE, 0); - if (ret) { - ERROR("Cannot erase ToC\n"); - } else { - INFO("Done\n"); - } - break; - default: - /* Unexpected error */ - break; - } - - /* Loop until the watchdog resets the system */ - for (;;) - wfi(); -} diff --git a/plat/arm/board/fvp/platform.mk b/plat/arm/board/fvp/platform.mk index 3dca4c2..bb77538 100644 --- a/plat/arm/board/fvp/platform.mk +++ b/plat/arm/board/fvp/platform.mk @@ -124,7 +124,6 @@ lib/semihosting/${ARCH}/semihosting_call.S \ plat/arm/board/fvp/${ARCH}/fvp_helpers.S \ plat/arm/board/fvp/fvp_bl1_setup.c \ - plat/arm/board/fvp/fvp_err.c \ plat/arm/board/fvp/fvp_io_storage.c \ plat/arm/board/fvp/fvp_trusted_boot.c \ ${FVP_CPU_LIBS} \ @@ -135,7 +134,6 @@ lib/semihosting/semihosting.c \ lib/semihosting/${ARCH}/semihosting_call.S \ plat/arm/board/fvp/fvp_bl2_setup.c \ - plat/arm/board/fvp/fvp_err.c \ plat/arm/board/fvp/fvp_io_storage.c \ plat/arm/board/fvp/fvp_trusted_boot.c \ ${FVP_SECURITY_SOURCES} diff --git a/plat/arm/board/juno/juno_bl1_setup.c b/plat/arm/board/juno/juno_bl1_setup.c index 7c026bc..836a672 100644 --- a/plat/arm/board/juno/juno_bl1_setup.c +++ b/plat/arm/board/juno/juno_bl1_setup.c @@ -12,31 +12,8 @@ #include #include -#define RESET_REASON_WDOG_RESET (0x2) - void juno_reset_to_aarch32_state(void); - -/******************************************************************************* - * The following function checks if Firmware update is needed, - * by checking if TOC in FIP image is valid or watchdog reset happened. - ******************************************************************************/ -unsigned int bl1_plat_get_next_image_id(void) -{ - unsigned int *reset_flags_ptr = (unsigned int *)SSC_GPRETN; - unsigned int *nv_flags_ptr = (unsigned int *) - (V2M_SYSREGS_BASE + V2M_SYS_NVFLAGS); - /* - * Check if TOC is invalid or watchdog reset happened. - */ - if ((arm_io_is_toc_valid() != 1) || - ((*reset_flags_ptr & RESET_REASON_WDOG_RESET) && - ((*nv_flags_ptr == -EAUTH) || (*nv_flags_ptr == -ENOENT)))) - return NS_BL1U_IMAGE_ID; - - return BL2_IMAGE_ID; -} - /******************************************************************************* * On JUNO update the arg2 with address of SCP_BL2U image info. ******************************************************************************/ diff --git a/plat/arm/board/juno/juno_err.c b/plat/arm/board/juno/juno_err.c deleted file mode 100644 index 0fe7016..0000000 --- a/plat/arm/board/juno/juno_err.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. - * - * SPDX-License-Identifier: BSD-3-Clause - */ - -#include -#include -#include -#include - -#define V2M_SYS_NVFLAGS_ADDR (V2M_SYSREGS_BASE + V2M_SYS_NVFLAGS) - -/* - * Juno error handler - */ -void plat_error_handler(int err) -{ - uint32_t *flags_ptr = (uint32_t *)V2M_SYS_NVFLAGS_ADDR; - - /* Propagate the err code in the NV-flags register */ - *flags_ptr = err; - - /* Loop until the watchdog resets the system */ - for (;;) - wfi(); -} diff --git a/plat/arm/board/juno/platform.mk b/plat/arm/board/juno/platform.mk index 70d6909..656fc14 100644 --- a/plat/arm/board/juno/platform.mk +++ b/plat/arm/board/juno/platform.mk @@ -49,12 +49,10 @@ lib/cpus/aarch64/cortex_a57.S \ lib/cpus/aarch64/cortex_a72.S \ plat/arm/board/juno/juno_bl1_setup.c \ - plat/arm/board/juno/juno_err.c \ ${JUNO_INTERCONNECT_SOURCES} \ ${JUNO_SECURITY_SOURCES} -BL2_SOURCES += plat/arm/board/juno/juno_err.c \ - plat/arm/board/juno/juno_bl2_setup.c \ +BL2_SOURCES += plat/arm/board/juno/juno_bl2_setup.c \ ${JUNO_SECURITY_SOURCES} BL2U_SOURCES += ${JUNO_SECURITY_SOURCES} diff --git a/plat/arm/common/arm_bl1_setup.c b/plat/arm/common/arm_bl1_setup.c index 3a30eca..379e87d 100644 --- a/plat/arm/common/arm_bl1_setup.c +++ b/plat/arm/common/arm_bl1_setup.c @@ -145,3 +145,15 @@ sev(); #endif } + +/******************************************************************************* + * The following function checks if Firmware update is needed, + * by checking if TOC in FIP image is valid or not. + ******************************************************************************/ +unsigned int bl1_plat_get_next_image_id(void) +{ + if (!arm_io_is_toc_valid()) + return NS_BL1U_IMAGE_ID; + + return BL2_IMAGE_ID; +} diff --git a/plat/arm/common/arm_bl2u_setup.c b/plat/arm/common/arm_bl2u_setup.c index cc291fc..3b8e4aa 100644 --- a/plat/arm/common/arm_bl2u_setup.c +++ b/plat/arm/common/arm_bl2u_setup.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -37,6 +38,7 @@ /* Initialize the console to provide early debug support */ console_init(PLAT_ARM_BOOT_UART_BASE, PLAT_ARM_BOOT_UART_CLK_IN_HZ, ARM_CONSOLE_BAUDRATE); + generic_delay_timer_init(); } /******************************************************************************* diff --git a/plat/arm/common/arm_common.mk b/plat/arm/common/arm_common.mk index b3462ab..015e454 100644 --- a/plat/arm/common/arm_common.mk +++ b/plat/arm/common/arm_common.mk @@ -137,6 +137,7 @@ drivers/io/io_storage.c \ plat/arm/common/arm_bl1_setup.c \ plat/arm/common/arm_dyn_cfg.c \ + plat/arm/common/arm_err.c \ plat/arm/common/arm_io_storage.c ifdef EL3_PAYLOAD_BASE # Need the arm_program_trusted_mailbox() function to release secondary CPUs from @@ -150,6 +151,7 @@ drivers/io/io_memmap.c \ drivers/io/io_storage.c \ plat/arm/common/arm_bl2_setup.c \ + plat/arm/common/arm_err.c \ plat/arm/common/arm_io_storage.c # Add `libfdt` and Arm common helpers required for Dynamic Config diff --git a/plat/arm/common/arm_err.c b/plat/arm/common/arm_err.c new file mode 100644 index 0000000..59c5861 --- /dev/null +++ b/plat/arm/common/arm_err.c @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * ARM common implementation for error handler + */ +void plat_error_handler(int err) +{ + int ret; + + switch (err) { + case -ENOENT: + case -EAUTH: + /* Image load or authentication error. Erase the ToC */ + INFO("Erasing FIP ToC from flash...\n"); + nor_unlock(PLAT_ARM_FIP_BASE); + ret = nor_word_program(PLAT_ARM_FIP_BASE, 0); + if (ret != 0) { + ERROR("Cannot erase ToC\n"); + } else { + INFO("Done\n"); + } + break; + default: + /* Unexpected error */ + break; + } + + (void)console_flush(); + + /* Loop until the watchdog resets the system */ + for (;;) + wfi(); +}