test(realm): add testcase for REC exit due to Data/Instr abort

Add testcase to cause instruction or data abort in Realm by
accessing addr with
* HIPAS=UNASSIGNED and RIPAS=DESTROYED
* HIPAS=ASSIGNED and RIPAS=DESTROYED
* HIPAS=UNASSIGNED and RIPAS=RAM
Verify rec exit due to abort

Change-Id: Ic04c0ddaf1b18ec0cfd71c28753c4ed7298302da
Signed-off-by: Shruti Gupta <shruti.gupta@arm.com>
diff --git a/realm/realm_payload_main.c b/realm/realm_payload_main.c
index ddaa3cb..55b5f9a 100644
--- a/realm/realm_payload_main.c
+++ b/realm/realm_payload_main.c
@@ -129,6 +129,38 @@
 	return false;
 }
 
+static bool test_realm_instr_fetch_cmd(void)
+{
+	u_register_t base;
+	void (*func_ptr)(void);
+	rsi_ripas_type ripas;
+
+	base = realm_shared_data_get_my_host_val(HOST_ARG1_INDEX);
+	rsi_ipa_state_get(base, &ripas);
+	realm_printf("Initial ripas=0x%lx\n", ripas);
+	/* causes instruction abort */
+	realm_printf("Generate Instruction Abort\n");
+	func_ptr = (void (*)(void))base;
+	func_ptr();
+	/* should not return */
+	return false;
+}
+
+static bool test_realm_data_access_cmd(void)
+{
+	u_register_t base;
+	rsi_ripas_type ripas;
+
+	base = realm_shared_data_get_my_host_val(HOST_ARG1_INDEX);
+	rsi_ipa_state_get(base, &ripas);
+	realm_printf("Initial ripas=0x%lx\n", ripas);
+	/* causes data abort */
+	realm_printf("Generate Data Abort\n");
+	*((volatile uint64_t *)base);
+	/* should not return */
+	return false;
+}
+
 /*
  * This is the entry function for Realm payload, it first requests the shared buffer
  * IPA address from Host using HOST_CALL/RSI, it reads the command to be executed,
@@ -156,9 +188,16 @@
 			break;
 		case REALM_MULTIPLE_REC_PSCI_DENIED_CMD:
 			test_succeed = test_realm_multiple_rec_psci_denied_cmd();
+			break;
 		case REALM_MULTIPLE_REC_MULTIPLE_CPU_CMD:
 			test_succeed = test_realm_multiple_rec_multiple_cpu_cmd();
 			break;
+		case REALM_INSTR_FETCH_CMD:
+			test_succeed = test_realm_instr_fetch_cmd();
+			break;
+		case REALM_DATA_ACCESS_CMD:
+			test_succeed = test_realm_data_access_cmd();
+			break;
 		case REALM_PAUTH_SET_CMD:
 			test_succeed = test_realm_pauth_set_cmd();
 			break;