Skip to content

Commit

Permalink
Fix SEC_STAT.IRM bit handling in ARC SEM interrupt entry/exit
Browse files Browse the repository at this point in the history
Related to FreeRTOS#331

Fix the Memory Read Protection Violation from Secure MPU exception on exit from interrupt.

* Add code to store SEC_STAT.IRM bit in INTERRUPT_PROLOGUE macro.
* Add code to restore SEC_STAT.IRM bit in INTERRUPT_EPILOGUE macro.
* Modify `portable/ThirdParty/GCC/ARC_EM_HS/arc_support.s` to include the changes in the interrupt entry/exit macros.

---

For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/FreeRTOS/FreeRTOS-Kernel/issues/331?shareId=XXXX-XXXX-XXXX-XXXX).
  • Loading branch information
vishwamartur committed Nov 1, 2024
1 parent 8225a7f commit 786fdbc
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions portable/ThirdParty/GCC/ARC_EM_HS/arc_support.s
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,9 @@ exc_entry_int:
mov blink, sp

clri /* disable interrupt */
lr r0, [AUX_SEC_STAT]
and r0, r0, 0x8
PUSH r0
ld r3, [exc_nest_count]
add r2, r3, 1
st r2, [exc_nest_count]
Expand Down Expand Up @@ -294,6 +297,8 @@ ret_int:
brne r0, 0, ret_int_2
ret_int_1: /* return from non-task context */
INTERRUPT_EPILOGUE
POP r0
sflag r0
rtie
/* there is a dispatch request */
ret_int_2:
Expand All @@ -319,6 +324,8 @@ ret_int_r:
RESTORE_CALLEE_REGS /* recover registers */
POPAX AUX_IRQ_ACT
INTERRUPT_EPILOGUE
POP r0
sflag r0
rtie

#if ARC_FEATURE_FIRQ == 1
Expand Down

0 comments on commit 786fdbc

Please sign in to comment.