diff --git a/arch/sandbox/cpu/cpu.c b/arch/sandbox/cpu/cpu.c
index d6177fbbd14..791af49464b 100644
--- a/arch/sandbox/cpu/cpu.c
+++ b/arch/sandbox/cpu/cpu.c
@@ -20,7 +20,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-void __noreturn sandbox_exit(void)
+void __noreturn sandbox_exit(int exit_code)
 {
 	/* Do this here while it still has an effect */
 	os_fd_restore();
@@ -28,8 +28,7 @@ void __noreturn sandbox_exit(void)
 	if (state_uninit())
 		os_exit(2);
 
-	/* This is considered normal termination for now */
-	os_exit(0);
+	os_exit(exit_code);
 }
 
 /* delay x useconds */
diff --git a/arch/sandbox/include/asm/u-boot-sandbox.h b/arch/sandbox/include/asm/u-boot-sandbox.h
index 941f35f9e69..60fb300f623 100644
--- a/arch/sandbox/include/asm/u-boot-sandbox.h
+++ b/arch/sandbox/include/asm/u-boot-sandbox.h
@@ -41,7 +41,7 @@ struct udevice;
 void sandbox_reset(void);
 
 /* Exit sandbox (quit U-Boot) */
-void __noreturn sandbox_exit(void);
+void __noreturn sandbox_exit(int exit_code);
 
 /**
  * sandbox_init() - init sandbox
diff --git a/arch/sandbox/lib/interrupts.c b/arch/sandbox/lib/interrupts.c
index 3f6583e11f0..e9207b82032 100644
--- a/arch/sandbox/lib/interrupts.c
+++ b/arch/sandbox/lib/interrupts.c
@@ -53,6 +53,6 @@ void os_signal_action(int sig, unsigned long pc)
 		printf("resetting ...\n\n");
 		sandbox_reset();
 	} else {
-		sandbox_exit();
+		sandbox_exit(0);
 	}
 }
diff --git a/drivers/sysreset/sysreset_sandbox.c b/drivers/sysreset/sysreset_sandbox.c
index d126fad0372..6739ecbd92f 100644
--- a/drivers/sysreset/sysreset_sandbox.c
+++ b/drivers/sysreset/sysreset_sandbox.c
@@ -63,13 +63,13 @@ static int sandbox_sysreset_request(struct udevice *dev, enum sysreset_t type)
 		state->last_sysreset = type;
 		if (!state->sysreset_allowed[type])
 			return -EACCES;
-		sandbox_exit();
+		sandbox_exit(0);
 	case SYSRESET_POWER:
 	case SYSRESET_HOT:
 	case SYSRESET_TO_FIRMWARE_UI:
 		if (!state->sysreset_allowed[type])
 			return -EACCES;
-		sandbox_exit();
+		sandbox_exit(0);
 	default:
 		return -EPROTONOSUPPORT;
 	}
