feat(amd): add test for TF-A register sgi API

Adds a test to verify the tf_a_register_sgi() API, which registers
the IPI interrupt with the system.

Change-Id: I3be28dc6c4ddec274cb64c8148fe0b61a1ab7b34
Signed-off-by: Madhav Bhatt <madhav.bhatt@amd.com>
diff --git a/tftf/tests/plat/amd/common/common_files/eemi_api.c b/tftf/tests/plat/amd/common/common_files/eemi_api.c
index 529c755..a3c929e 100644
--- a/tftf/tests/plat/amd/common/common_files/eemi_api.c
+++ b/tftf/tests/plat/amd/common/common_files/eemi_api.c
@@ -426,3 +426,11 @@
 
 	return ret;
 }
+
+int tf_a_pm_register_sgi(uint32_t sgi_num, uint32_t reset)
+{
+	uint32_t ret_payload[PAYLOAD_ARG_CNT];
+
+	return eemi_call(TF_A_PM_REGISTER_SGI, ((uint64_t)reset << 32 | sgi_num),
+			 0, 0, 0, 0, 0, 0, ret_payload);
+}
diff --git a/tftf/tests/plat/amd/common/common_files/eemi_api.h b/tftf/tests/plat/amd/common/common_files/eemi_api.h
index 3e460fe..5ced6f6 100644
--- a/tftf/tests/plat/amd/common/common_files/eemi_api.h
+++ b/tftf/tests/plat/amd/common/common_files/eemi_api.h
@@ -33,6 +33,11 @@
 	uint32_t usage;                 /**< Indicates which master is using the slave */
 } xpm_node_status;
 
+struct register_sgi {
+	uint32_t sgi_num;               /**< SGI number to be used for communication */
+	uint32_t reset;                 /**<  Reset to invalid SGI when reset=1 */
+};
+
 int xpm_get_api_version(uint32_t *version);
 int xpm_get_chip_id(uint32_t *id_code, uint32_t *version);
 int xpm_feature_check(const uint32_t api_id, uint32_t *const version);
@@ -66,5 +71,6 @@
 int xpm_init_finalize(void);
 int get_trustzone_version(uint32_t *tz_version);
 int tf_a_feature_check(const uint32_t api_id, uint32_t *const version);
+int tf_a_pm_register_sgi(uint32_t sgi_num, uint32_t reset);
 
 #endif /* __EEMI_API_H__ */
diff --git a/tftf/tests/plat/amd/common/common_files/xpm_defs.h b/tftf/tests/plat/amd/common/common_files/xpm_defs.h
index 502c5f2..1d1c7f8 100644
--- a/tftf/tests/plat/amd/common/common_files/xpm_defs.h
+++ b/tftf/tests/plat/amd/common/common_files/xpm_defs.h
@@ -41,6 +41,9 @@
 /* Requirement limits */
 #define XPM_MAX_LATENCY         0xFFFFU
 
+/* SGI number used for Event management driver */
+#define XLNX_EVENT_SGI_NUM      (15)
+
 /* API IDs */
 enum pm_api_id {
 	PM_API_MIN,                                     /**< 0x0 */
diff --git a/tftf/tests/plat/amd/common/tf_a_register_sgi/tf_a_register_sgi.c b/tftf/tests/plat/amd/common/tf_a_register_sgi/tf_a_register_sgi.c
new file mode 100644
index 0000000..1488083
--- /dev/null
+++ b/tftf/tests/plat/amd/common/tf_a_register_sgi/tf_a_register_sgi.c
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2025, Advanced Micro Devices, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include "eemi_api.h"
+#include "xpm_defs.h"
+
+struct register_sgi sgi_register_list[] = {
+	{
+		.sgi_num = XLNX_EVENT_SGI_NUM,
+		.reset = 0,
+	},
+};
+
+/*
+ * This function register the IPI interrupt.
+ */
+test_result_t test_tf_a_register_sgi(void)
+{
+	int32_t status, i;
+
+	for (i = 0; i < ARRAY_SIZE(sgi_register_list); i++) {
+		uint32_t sgi_number = sgi_register_list[i].sgi_num;
+		uint32_t reset = sgi_register_list[i].reset;
+
+		status = tf_a_pm_register_sgi(sgi_number, reset);
+		if (status != PM_RET_SUCCESS) {
+			tftf_testcase_printf("%s ERROR registering sgi, "
+					     "Status: 0x%x\n", __func__, status);
+			return TEST_RESULT_FAIL;
+		}
+		tftf_testcase_printf("Registered SGI num : %d\n", sgi_number);
+	}
+
+	return TEST_RESULT_SUCCESS;
+}
diff --git a/tftf/tests/tests-versal.xml b/tftf/tests/tests-versal.xml
index a70b2c0..7db23a4 100644
--- a/tftf/tests/tests-versal.xml
+++ b/tftf/tests/tests-versal.xml
@@ -31,6 +31,7 @@
       <testcase name="PM Init Finalize" function="test_init_finalize" />
       <testcase name="Trustzone version" function="test_trustzone_version" />
       <testcase name="TF-A feature check" function="test_tf_a_feature_check" />
+      <testcase name="TF-A register sgi" function="test_tf_a_register_sgi" />
     </testsuite>
 
   </testsuites>