diff --git a/docs/porting-guide.md b/docs/porting-guide.md index 62ea6a0c171227051c674fda37ea804457a649e7..262de73e7bd4c1823e07e0d4e9dd5c51d82b4b3a 100644 --- a/docs/porting-guide.md +++ b/docs/porting-guide.md @@ -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 ------------------------------------------------- diff --git a/lib/cpus/aarch64/cpu_helpers.S b/lib/cpus/aarch64/cpu_helpers.S index d25d1a30ea972c633ddd09e2fb8390271b107c27..6db04ed92d2b56414d36382d13760e7edc561118 100644 --- a/lib/cpus/aarch64/cpu_helpers.S +++ b/lib/cpus/aarch64/cpu_helpers.S @@ -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) */ /* diff --git a/plat/common/aarch64/platform_helpers.S b/plat/common/aarch64/platform_helpers.S index 6dc4ec681fd32f0fb831991cef4f77bc499e3666..1229ead34a1f6a58e99ebc085e98f807f33e0366 100644 --- a/plat/common/aarch64/platform_helpers.S +++ b/plat/common/aarch64/platform_helpers.S @@ -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