diff --git a/bl1/aarch64/bl1_exceptions.S b/bl1/aarch64/bl1_exceptions.S index ca86107c57c87784b5b697d12ef9e9901f0df0af..ef390d46fe987356226dce8da89c0fc53eeec3ad 100644 --- a/bl1/aarch64/bl1_exceptions.S +++ b/bl1/aarch64/bl1_exceptions.S @@ -207,6 +207,8 @@ func smc_handler64 bl disable_mmu_icache_el3 tlbi alle3 + bl bl1_plat_prepare_exit + ldp x6, x7, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x30)] ldp x4, x5, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x20)] ldp x2, x3, [x20, #(ENTRY_POINT_INFO_ARGS_OFFSET + 0x10)] diff --git a/docs/porting-guide.md b/docs/porting-guide.md index 50d36ea27d2d0059308988d1a5b8d9c3bbdd99f7..c369844ce803da9a4414fbf5355e4a210feaa3b7 100644 --- a/docs/porting-guide.md +++ b/docs/porting-guide.md @@ -788,6 +788,17 @@ the entry point set by loader and also set the security state and SPSR which represents the entry point system state for BL2. +### Function : bl1_plat_prepare_exit() [optional] + + Argument : void + Return : void + +This function is called prior to exiting BL1 in response to the `RUN_IMAGE_SMC` +request raised by BL2. It should be used to perform platform specific clean up +or bookkeeping operations before transferring control to the next image. This +function runs with MMU disabled. + + 3.2 Boot Loader Stage 2 (BL2) ----------------------------- diff --git a/plat/common/aarch64/platform_helpers.S b/plat/common/aarch64/platform_helpers.S index 9f4b672ab8c7de4ec50466ec36d673108f6d1012..f51d24e6d12f8d18302b07137ec0e091a85c8f0b 100644 --- a/plat/common/aarch64/platform_helpers.S +++ b/plat/common/aarch64/platform_helpers.S @@ -37,6 +37,7 @@ .weak plat_crash_console_putc .weak plat_reset_handler .weak plat_disable_acp + .weak bl1_plat_prepare_exit #if !ENABLE_PLAT_COMPAT .globl platform_get_core_pos @@ -111,3 +112,12 @@ endfunc plat_reset_handler func plat_disable_acp ret endfunc plat_disable_acp + + /* ----------------------------------------------------- + * void bl1_plat_prepare_exit(void); + * Called before exiting BL1. Default: do nothing + * ----------------------------------------------------- + */ +func bl1_plat_prepare_exit + ret +endfunc bl1_plat_prepare_exit