summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Castillo <jcastillo.devel@gmail.com>2015-10-05 16:59:38 +0100
committerJuan Castillo <juan.castillo@arm.com>2015-10-20 16:53:53 +0100
commite3f6712409c54b03f42869faeff0cf8d8af9245e (patch)
treeab5c493411dbef7fb12a40b3233d828b70d551e0
parent1fe4d4537e51f69014be057c39a1b5145e9c5930 (diff)
Add optional bl1_plat_prepare_exit() API
This patch adds an optional API to the platform port: void bl1_plat_prepare_exit(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. A weak empty definition of this function has been provided to preserve platform backwards compatibility. Change-Id: Iec09697de5c449ae84601403795cdb6aca166ba1
-rw-r--r--bl1/aarch64/bl1_exceptions.S2
-rw-r--r--docs/porting-guide.md11
-rw-r--r--plat/common/aarch64/platform_helpers.S10
3 files changed, 23 insertions, 0 deletions
diff --git a/bl1/aarch64/bl1_exceptions.S b/bl1/aarch64/bl1_exceptions.S
index ca86107c..ef390d46 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 50d36ea2..c369844c 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 9f4b672a..f51d24e6 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