Add platform API for reset handling

This patch adds an optional platform API (plat_reset_handler) which allows the
platform to perform any actions immediately after a cold or warm reset
e.g. implement errata workarounds. The function is called with MMU and caches
turned off. This API is weakly defined and does nothing by default but can be
overriden by a platform with a strong definition.

Change-Id: Ib0acdccbd24bc756528a8bd647df21e8d59707ff
This commit is contained in:
Soby Mathew 2014-08-14 12:22:32 +01:00 committed by Dan Handley
parent 9b47684170
commit 24fb838f96
3 changed files with 26 additions and 0 deletions

View File

@ -460,6 +460,20 @@ that these constants are not related to any architectural exception code; they
are just an ARM Trusted Firmware convention.
### Function : plat_reset_handler()
Argument : void
Return : void
A platform may need to do additional initialization after reset. This function
allows the platform to do the platform specific intializations. Platform
specific errata workarounds could also be implemented here. The api should
preserve the value in x10 register as it is used by the caller to store the
return address.
The default implementation doesn't do anything.
3. Modifications specific to a Boot Loader stage
-------------------------------------------------

View File

@ -47,6 +47,8 @@
func reset_handler
mov x10, x30
bl plat_reset_handler
/* Get the matching cpu_ops pointer */
bl get_cpu_ops_ptr
#if ASM_ASSERTION
@ -60,6 +62,7 @@ func reset_handler
blr x2
1:
ret x10
#endif /* IMAGE_BL1 || (IMAGE_BL31 && RESET_TO_BL31) */
/*

View File

@ -38,6 +38,7 @@
.weak plat_report_exception
.weak plat_crash_console_init
.weak plat_crash_console_putc
.weak plat_reset_handler
/* -----------------------------------------------------
* int platform_get_core_pos(int mpidr);
@ -84,3 +85,11 @@ func plat_crash_console_init
*/
func plat_crash_console_putc
ret
/* -----------------------------------------------------
* Placeholder function which should be redefined by
* each platform. This function should preserve x10.
* -----------------------------------------------------
*/
func plat_reset_handler
ret