diff --git a/smc_fuzz/src/randsmcmod.c b/smc_fuzz/src/randsmcmod.c
index 6f27105..7bedf81 100644
--- a/smc_fuzz/src/randsmcmod.c
+++ b/smc_fuzz/src/randsmcmod.c
@@ -582,6 +582,7 @@
 test_result_t smc_fuzzing_top(void)
 {
 	test_result_t result = TEST_RESULT_SUCCESS;
+
 	init_smc_fuzzing();
 #ifdef MULTI_CPU_SMC_FUZZER
 	u_register_t lead_mpid, target_mpid;
diff --git a/smc_fuzz/src/runtestfunction_helpers.c b/smc_fuzz/src/runtestfunction_helpers.c
index f932a68..b9fa794 100644
--- a/smc_fuzz/src/runtestfunction_helpers.c
+++ b/smc_fuzz/src/runtestfunction_helpers.c
@@ -4,79 +4,15 @@
  * SPDX-License-Identifier: BSD-3-Clause
  */
 
- #include <power_management.h>
- #include <sdei.h>
- #include <test_helpers.h>
- #include <tftf_lib.h>
- #include <timer.h>
+#include <sdei_fuzz_helper.h>
+#include <tsp_fuzz_helper.h>
 
-#define CMP_SUCCESS 0
 
 /*
  * Invoke the SMC call based on the function name specified.
  */
 void runtestfunction(char *funcstr)
 {
-	if (strcmp(funcstr, "sdei_version") == CMP_SUCCESS) {
-		long long ret = sdei_version();
-
-		if (ret != MAKE_SDEI_VERSION(1, 0, 0)) {
-			tftf_testcase_printf("Unexpected SDEI version: 0x%llx\n",
-					     ret);
-		}
-		printf("running %s\n", funcstr);
-	}
-	if (strcmp(funcstr, "sdei_pe_unmask") == CMP_SUCCESS) {
-		long long ret = sdei_pe_unmask();
-
-		if (ret < 0) {
-			tftf_testcase_printf("SDEI pe unmask failed: 0x%llx\n",
-					     ret);
-		}
-		printf("running %s\n", funcstr);
-	}
-	if (strcmp(funcstr, "sdei_pe_mask") == CMP_SUCCESS) {
-		int64_t ret = sdei_pe_mask();
-
-		if (ret < 0) {
-			tftf_testcase_printf("SDEI pe mask failed: 0x%llx\n", ret);
-		}
-		printf("running %s\n", funcstr);
-	}
-	if (strcmp(funcstr, "sdei_event_status") == CMP_SUCCESS) {
-		int64_t ret = sdei_event_status(0);
-
-		if (ret < 0) {
-			tftf_testcase_printf("SDEI event status failed: 0x%llx\n",
-					     ret);
-		}
-		printf("running %s\n", funcstr);
-	}
-	if (strcmp(funcstr, "sdei_event_signal") == CMP_SUCCESS) {
-		int64_t ret = sdei_event_signal(0);
-
-		if (ret < 0) {
-			tftf_testcase_printf("SDEI event signal failed: 0x%llx\n",
-					     ret);
-		}
-		printf("running %s\n", funcstr);
-	}
-	if (strcmp(funcstr, "sdei_private_reset") == CMP_SUCCESS) {
-		int64_t ret = sdei_private_reset();
-
-		if (ret < 0) {
-			tftf_testcase_printf("SDEI private reset failed: 0x%llx\n",
-					     ret);
-		}
-		printf("running %s\n", funcstr);
-	}
-	if (strcmp(funcstr, "sdei_shared_reset") == CMP_SUCCESS) {
-		int64_t ret = sdei_shared_reset();
-
-		if (ret < 0) {
-			tftf_testcase_printf("SDEI shared reset failed: 0x%llx\n",
-					     ret);
-		}
-		printf("running %s\n", funcstr);
-	}
+	run_sdei_fuzz(funcstr);
+	run_tsp_fuzz(funcstr);
 }
diff --git a/smc_fuzz/src/sdei_fuzz_helper.c b/smc_fuzz/src/sdei_fuzz_helper.c
new file mode 100644
index 0000000..cb634dc
--- /dev/null
+++ b/smc_fuzz/src/sdei_fuzz_helper.c
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2023, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <sdei_fuzz_helper.h>
+
+void tftf_test_sdei_noarg(int64_t (*sdei_func)(void), char *funcstr)
+{
+		int64_t ret = (*sdei_func)();
+
+		if (ret < 0) {
+			tftf_testcase_printf("%s failed: 0x%llx\n", funcstr, ret);
+		}
+}
+
+void tftf_test_sdei_singlearg(int64_t (*sdei_func)(uint64_t), char *funcstr)
+{
+		int64_t ret = (*sdei_func)(0);
+
+		if (ret < 0) {
+			tftf_testcase_printf("%s failed: 0x%llx\n", funcstr, ret);
+		}
+}
+
+
+void run_sdei_fuzz(char *funcstr)
+{
+	if (strcmp(funcstr, "sdei_version") == CMP_SUCCESS) {
+		long long ret = sdei_version();
+
+		if (ret != MAKE_SDEI_VERSION(1, 0, 0)) {
+			tftf_testcase_printf("Unexpected SDEI version: 0x%llx\n",
+					     ret);
+		}
+	} else if (strcmp(funcstr, "sdei_pe_unmask") == CMP_SUCCESS) {
+		tftf_test_sdei_noarg(sdei_pe_unmask, "sdei_pe_unmask");
+	} else if (strcmp(funcstr, "sdei_pe_mask") == CMP_SUCCESS) {
+		tftf_test_sdei_noarg(sdei_pe_mask, "sdei_pe_mask");
+	} else if (strcmp(funcstr, "sdei_event_status") == CMP_SUCCESS) {
+		tftf_test_sdei_singlearg((int64_t (*)(uint64_t))sdei_event_status,
+		"sdei_event_status");
+	} else if (strcmp(funcstr, "sdei_event_signal") == CMP_SUCCESS) {
+		tftf_test_sdei_singlearg(sdei_event_signal, "sdei_event_signal");
+	} else if (strcmp(funcstr, "sdei_private_reset") == CMP_SUCCESS) {
+		tftf_test_sdei_noarg(sdei_private_reset, "sdei_private_reset");
+	} else if (strcmp(funcstr, "sdei_shared_reset") == CMP_SUCCESS) {
+		tftf_test_sdei_noarg(sdei_shared_reset, "sdei_shared_reset");
+	}
+}
diff --git a/smc_fuzz/src/tsp_fuzz_helper.c b/smc_fuzz/src/tsp_fuzz_helper.c
new file mode 100644
index 0000000..c6ed219
--- /dev/null
+++ b/smc_fuzz/src/tsp_fuzz_helper.c
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2023, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+#include <tsp_fuzz_helper.h>
+
+void tftf_test_tsp_smc(uint64_t tsp_id, char *funcstr)
+{
+		uint64_t fn_identifier = TSP_FAST_FID(tsp_id);
+		uint64_t arg1 = 4;
+		uint64_t arg2 = 6;
+		smc_args tsp_svc_params = {fn_identifier, arg1, arg2};
+		smc_ret_values tsp_result;
+
+		tsp_result = tftf_smc(&tsp_svc_params);
+
+		if (tsp_result.ret0) {
+			tftf_testcase_printf("TSP operation 0x%x failed, error:0x%x\n",
+					(unsigned int) fn_identifier,
+					(unsigned int) tsp_result.ret0);
+		}
+}
+
+void run_tsp_fuzz(char *funcstr)
+{
+	if (strcmp(funcstr, "tsp_add_op") == CMP_SUCCESS) {
+		tftf_test_tsp_smc(TSP_ADD, "tsp_add_op");
+	} else if (strcmp(funcstr, "tsp_sub_op") == CMP_SUCCESS) {
+		tftf_test_tsp_smc(TSP_SUB, "tsp_sub_op");
+	} else if (strcmp(funcstr, "tsp_mul_op") == CMP_SUCCESS) {
+		tftf_test_tsp_smc(TSP_MUL, "tsp_mul_op");
+	} else if (strcmp(funcstr, "tsp_div_op") == CMP_SUCCESS) {
+		tftf_test_tsp_smc(TSP_DIV, "tsp_div_op");
+	}
+}
