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