diff --git a/api-tests/val/common/val.h b/api-tests/val/common/val.h
index f2ccf7a..243c584 100644
--- a/api-tests/val/common/val.h
+++ b/api-tests/val/common/val.h
@@ -241,6 +241,7 @@
   VAL_STATUS_UNSUPPORTED                 = 0x2B,
   VAL_STATUS_DRIVER_FN_FAILED            = 0x2C,
   VAL_STATUS_NO_TESTS                    = 0X2D,
+  VAL_STATUS_TEST_FAILED                 = 0x2E,
   VAL_STATUS_ERROR_MAX                   = INT_MAX,
 } val_status_t;
 
diff --git a/api-tests/val/nspe/val_dispatcher.c b/api-tests/val/nspe/val_dispatcher.c
index eff584f..5d6da4e 100644
--- a/api-tests/val/nspe/val_dispatcher.c
+++ b/api-tests/val/nspe/val_dispatcher.c
@@ -313,9 +313,9 @@
     @brief    - This function is responsible for setting up VAL infrastructure.
                 Loads test one by one from combine binary and calls test_entry
                 function of each test image.
-    @return   - none
+    @return   - 0 if success Or error code for the failure.
 **/
-void val_dispatcher(test_id_t test_id_prev)
+int32_t val_dispatcher(test_id_t test_id_prev)
 {
 
     test_id_t            test_id;
@@ -332,7 +332,7 @@
     if (VAL_ERROR(status))
     {
         val_print(PRINT_ERROR, "\n\ttarget config read failed", 0);
-        return;
+        return status;
     }
 
     combine_test_binary_addr   = misc_desc->ns_start_addr_of_combine_test_binary;
@@ -342,7 +342,7 @@
         status = val_get_boot_flag(&boot.state);
         if (VAL_ERROR(status))
         {
-            return;
+            return status;
         }
 
         /* Did last run test hang and system re-booted due to watchdog timeout and
@@ -356,7 +356,7 @@
             if (VAL_ERROR(status))
             {
                 val_print(PRINT_ERROR, "\n\tNVMEM read error", 0);
-                return;
+                return status;
             }
         }
         /* Did last run test hang and system reset due to watchdog timeout but
@@ -372,7 +372,7 @@
             if (VAL_ERROR(status))
             {
                 val_print(PRINT_ERROR, "\n\tNVMEM read error", 0);
-                return;
+                return status;
             }
         }
         else
@@ -381,7 +381,7 @@
 
             if (VAL_ERROR(status))
             {
-                return;
+                return status;
             }
             else if (test_id == VAL_INVALID_TEST_ID)
             {
@@ -393,7 +393,7 @@
             if (VAL_ERROR(status))
             {
                 val_print(PRINT_ERROR, "\n\tNVMEM write error", 0);
-                return;
+                return status;
             }
 
             if (VAL_GET_COMP_NUM(test_id_prev) != VAL_GET_COMP_NUM(test_id))
@@ -409,7 +409,7 @@
                 status = val_set_boot_flag(BOOT_NOT_EXPECTED);
                 if (VAL_ERROR(status))
                 {
-                    return;
+                    return status;
                 }
             }
             val_execute_test_fn();
@@ -421,7 +421,7 @@
         status = val_set_boot_flag(BOOT_UNKNOWN);
         if (VAL_ERROR(status))
         {
-            return;
+            return status;
         }
 
         /* Prepare suite summary data structure */
@@ -429,7 +429,7 @@
         if (VAL_ERROR(status))
         {
             val_print(PRINT_ERROR, "\n\tNVMEM read error", 0);
-            return;
+            return status;
         }
 
         switch (test_result)
@@ -452,7 +452,7 @@
         if (VAL_ERROR(status))
         {
             val_print(PRINT_ERROR, "\n\tNVMEM write error", 0);
-            return;
+            return status;
         }
 
         test_id_prev = test_id;
@@ -461,7 +461,7 @@
         if (VAL_ERROR(status))
         {
             val_print(PRINT_ERROR, "\n\tNVMEM write error", 0);
-            return;
+            return status;
         }
 
    } while(1);
@@ -470,7 +470,7 @@
    if (VAL_ERROR(status))
    {
        val_print(PRINT_ERROR, "\n\tNVMEM read error", 0);
-       return;
+       return status;
    }
 
    val_print(PRINT_ALWAYS, "\n************ ", 0);
@@ -483,6 +483,8 @@
    val_print(PRINT_ALWAYS, "TOTAL FAILED    : %d\n", test_count.fail_cnt);
    val_print(PRINT_ALWAYS, "TOTAL SKIPPED   : %d\n", test_count.skip_cnt);
    val_print(PRINT_ALWAYS, "******************************************\n", 0);
+
+   return (test_count.fail_cnt > 0) ? VAL_STATUS_TEST_FAILED : VAL_STATUS_SUCCESS ;
 }
 
 
diff --git a/api-tests/val/nspe/val_dispatcher.h b/api-tests/val/nspe/val_dispatcher.h
index 9adc98f..173e8c6 100644
--- a/api-tests/val/nspe/val_dispatcher.h
+++ b/api-tests/val/nspe/val_dispatcher.h
@@ -66,5 +66,5 @@
     uint32_t  elf_size;
 } test_header_t;
 
-void val_dispatcher(test_id_t);
+int32_t val_dispatcher(test_id_t);
 #endif
diff --git a/api-tests/val/nspe/val_entry.c b/api-tests/val/nspe/val_entry.c
index cff5ded..f0a44dd 100644
--- a/api-tests/val/nspe/val_entry.c
+++ b/api-tests/val/nspe/val_entry.c
@@ -23,18 +23,21 @@
 /**
     @brief    - PSA C main function, does VAL init and calls test dispatcher
     @param    - None
-    @return   - void
+    @return   - status - error code 
 **/
-void val_entry(void)
+int32_t val_entry(void)
 {
     test_id_t       test_id;
+    int32_t         status;
 
-    if (VAL_ERROR(val_uart_init()))
+    status = val_uart_init();
+    if (VAL_ERROR(status))
     {
         goto exit;
     }
 
-    if (VAL_ERROR(val_get_last_run_test_id(&test_id)))
+    status = val_get_last_run_test_id(&test_id);
+    if (VAL_ERROR(status))
     {
         goto exit;
     }
@@ -48,10 +51,12 @@
     }
 
     /* Call dispatcher routine*/
-    val_dispatcher(test_id);
+    status = val_dispatcher(test_id);
 
 exit:
     val_print(PRINT_ALWAYS, "\nEntering standby.. \n", 0);
 
     pal_terminate_simulation();
+
+    return status;
 }
diff --git a/api-tests/val/nspe/val_entry.h b/api-tests/val/nspe/val_entry.h
index 2236016..f594cc4 100644
--- a/api-tests/val/nspe/val_entry.h
+++ b/api-tests/val/nspe/val_entry.h
@@ -26,7 +26,7 @@
 /**
     @brief    - PSA Test Suite C main function, does VAL init and calls test dispatcher
     @param    - None
-    @return   - void
+    @return   - int32_t
 **/
-extern void val_entry(void);
+extern int32_t val_entry(void);
 #endif
