SPMD: save/restore EL2 system registers.

NOTE: Not all EL-2 system registers are saved/restored.
This subset includes registers recognized by ARMv8.0

Change-Id: I9993c7d78d8f5f8e72d1c6c8d6fd871283aa3ce0
Signed-off-by: Jose Marinho <jose.marinho@arm.com>
Signed-off-by: Olivier Deprez <olivier.deprez@arm.com>
Signed-off-by: Artsem Artsemenka <artsem.artsemenka@arm.com>
Signed-off-by: Max Shvetsov <maksims.svecovs@arm.com>
diff --git a/services/std_svc/spmd/spmd_main.c b/services/std_svc/spmd/spmd_main.c
index 677f639..1107190 100644
--- a/services/std_svc/spmd/spmd_main.c
+++ b/services/std_svc/spmd/spmd_main.c
@@ -49,6 +49,7 @@
 
 	/* Restore the context assigned above */
 	cm_el1_sysregs_context_restore(SECURE);
+	cm_el2_sysregs_context_restore(SECURE);
 	cm_set_next_eret_context(SECURE);
 
 	/* Invalidate TLBs at EL1. */
@@ -60,6 +61,7 @@
 
 	/* Save secure state */
 	cm_el1_sysregs_context_save(SECURE);
+	cm_el2_sysregs_context_save(SECURE);
 
 	return rc;
 }
@@ -321,9 +323,11 @@
 
 		/* Save incoming security state */
 		cm_el1_sysregs_context_save(in_sstate);
+		cm_el2_sysregs_context_save(in_sstate);
 
 		/* Restore outgoing security state */
 		cm_el1_sysregs_context_restore(out_sstate);
+		cm_el2_sysregs_context_restore(out_sstate);
 		cm_set_next_eret_context(out_sstate);
 
 		SMC_RET8(cm_get_context(out_sstate), smc_fid, x1, x2, x3, x4,
@@ -366,9 +370,11 @@
 		if (in_sstate == NON_SECURE) {
 			/* Save incoming security state */
 			cm_el1_sysregs_context_save(in_sstate);
+			cm_el2_sysregs_context_save(in_sstate);
 
 			/* Restore outgoing security state */
 			cm_el1_sysregs_context_restore(out_sstate);
+			cm_el2_sysregs_context_restore(out_sstate);
 			cm_set_next_eret_context(out_sstate);
 
 			SMC_RET8(cm_get_context(out_sstate), smc_fid,
@@ -432,9 +438,11 @@
 
 		/* Save incoming security state */
 		cm_el1_sysregs_context_save(in_sstate);
+		cm_el2_sysregs_context_save(in_sstate);
 
 		/* Restore outgoing security state */
 		cm_el1_sysregs_context_restore(out_sstate);
+		cm_el2_sysregs_context_restore(out_sstate);
 		cm_set_next_eret_context(out_sstate);
 
 		SMC_RET8(cm_get_context(out_sstate), smc_fid, x1, x2, x3, x4,
@@ -466,9 +474,11 @@
 
 		/* Save incoming security state */
 		cm_el1_sysregs_context_save(in_sstate);
+		cm_el2_sysregs_context_save(in_sstate);
 
 		/* Restore outgoing security state */
 		cm_el1_sysregs_context_restore(out_sstate);
+		cm_el2_sysregs_context_restore(out_sstate);
 		cm_set_next_eret_context(out_sstate);
 
 		SMC_RET8(cm_get_context(out_sstate), smc_fid, x1, x2, x3, x4,