diff --git a/bl1/aarch64/bl1_exceptions.S b/bl1/aarch64/bl1_exceptions.S index ca86107..ef390d4 100644 --- a/bl1/aarch64/bl1_exceptions.S +++ b/bl1/aarch64/bl1_exceptions.S @@ -207,6 +207,8 @@ 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 50d36ea..c369844 100644 --- a/docs/porting-guide.md +++ b/docs/porting-guide.md @@ -788,6 +788,17 @@ 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 9f4b672..f51d24e 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 @@ 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