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