test(realm): testcase for RMI_RTT_SET_RIPAS reject

Add testcase for realm to call rsi_ipa_state_set,
host will reject and call RMI_RTT_SET_RIPAS
re-enter rec with response RSI_REJECT

Change-Id: I6809fdabba580b23269aedc2aa844b15fbcce981
Signed-off-by: Shruti Gupta <shruti.gupta@arm.com>
diff --git a/realm/realm_payload_main.c b/realm/realm_payload_main.c
index 9b2be83..5c488ee 100644
--- a/realm/realm_payload_main.c
+++ b/realm/realm_payload_main.c
@@ -101,6 +101,34 @@
 	return true;
 }
 
+bool test_realm_reject_set_ripas(void)
+{
+	u_register_t ret, base, new_base;
+	rsi_ripas_respose_type response;
+	rsi_ripas_type ripas;
+
+	base = realm_shared_data_get_my_host_val(HOST_ARG1_INDEX);
+	ret = rsi_ipa_state_get(base, &ripas);
+	if (ret != RSI_SUCCESS || ripas != RSI_EMPTY) {
+		realm_printf("Wrong initial ripas=0x%lx\n", ripas);
+		return false;
+	}
+	ret = rsi_ipa_state_set(base, base + PAGE_SIZE, RSI_RAM,
+		RSI_NO_CHANGE_DESTROYED, &new_base, &response);
+	if (ret == RSI_SUCCESS && response == RSI_REJECT) {
+		realm_printf("rsi_ipa_state_set passed response = %d\n", response);
+		ret = rsi_ipa_state_get(base, &ripas);
+		if (ret == RSI_SUCCESS && ripas == RSI_EMPTY) {
+			return true;
+		} else {
+			realm_printf("rsi_ipa_state_get failed ripas = %d\n", ripas);
+			return false;
+		}
+	}
+	realm_printf("rsi_ipa_state_set failed ret=0x%lx, response = %d\n", ret, response);
+	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,
@@ -162,6 +190,9 @@
 			test_succeed = !fpu_state_compare(&rl_fpu_state_write,
 							  &rl_fpu_state_read);
 			break;
+		case REALM_REJECT_SET_RIPAS_CMD:
+			test_succeed = test_realm_reject_set_ripas();
+			break;
 		case REALM_SET_RIPAS_CMD:
 			test_succeed = test_realm_set_ripas();
 			break;