diff --git a/arch/xtensa/src/common/xtensa_context.S b/arch/xtensa/src/common/xtensa_context.S
index 8d9462e5a6..eb4324f901 100644
--- a/arch/xtensa/src/common/xtensa_context.S
+++ b/arch/xtensa/src/common/xtensa_context.S
@@ -227,6 +227,7 @@ _xtensa_context_save:
 	.align	4
 
 xtensa_context_save:
+	ENTRY(16)
 
 	/* Set up for call to _xtensa_context_save() */
 
@@ -248,7 +249,7 @@ xtensa_context_save:
 	l32i	a0, a2, (4 * REG_A0)			/* Recover return addess */
 	movi	a2, 0							/* Return zero */
 
-	ret
+	RET(16)
 
 	.size	xtensa_context_save, . - xtensa_context_save
 
@@ -372,6 +373,7 @@ _xtensa_context_restore:
 	.align	4
 
 xtensa_context_restore:
+	ENTRY(16)								/* REVISIT */
 
 	/* Restore the processor state */
 
diff --git a/arch/xtensa/src/esp32/esp32_cpuhead.S b/arch/xtensa/src/esp32/esp32_cpuhead.S
index 40cbf2e85d..a33a8a05ac 100644
--- a/arch/xtensa/src/esp32/esp32_cpuhead.S
+++ b/arch/xtensa/src/esp32/esp32_cpuhead.S
@@ -139,7 +139,12 @@ __cpu1_start:
 	/* Finish initialization in C */
 
 	movi	a2, 1				/* Argument 1: CPU ID */
+
+#ifdef __XTENSA_CALL0_ABI__
 	call0	xtensa_start_handler
+#else
+	call4	xtensa_start_handler
+#endif
 
 	/* xtensa_start_handler() does not return */
 
diff --git a/arch/xtensa/src/esp32/esp32_irq.c b/arch/xtensa/src/esp32/esp32_irq.c
index 4c1d15008f..7e84758813 100644
--- a/arch/xtensa/src/esp32/esp32_irq.c
+++ b/arch/xtensa/src/esp32/esp32_irq.c
@@ -187,7 +187,7 @@ void xtensa_irq_initialize(void)
 #endif
 
 #ifndef CONFIG_SUPPRESS_INTERRUPTS
-  /* And finally, enable interrupts */
+  /* And finally, enable interrupts.  Also clears PS.EXCM */
 
   up_irq_enable();
 #endif