Merge pull request #411 from jcastillo-arm/jc/plat_bl1_exit
Jc/plat bl1 exit
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