aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/generic/armcm_irq.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/generic/armcm_irq.c b/src/generic/armcm_irq.c
index 5c186995..c4909222 100644
--- a/src/generic/armcm_irq.c
+++ b/src/generic/armcm_irq.c
@@ -4,6 +4,7 @@
//
// This file may be distributed under the terms of the GNU GPLv3 license.
+#include "board/internal.h" // __CORTEX_M
#include "irq.h" // irqstatus_t
#include "sched.h" // DECL_SHUTDOWN
@@ -37,7 +38,11 @@ irq_restore(irqstatus_t flag)
void
irq_wait(void)
{
- asm volatile("cpsie i\n wfi\n cpsid i\n" ::: "memory");
+ if (__CORTEX_M >= 7)
+ // Cortex-m7 may disable cpu counter on wfi, so use nop
+ asm volatile("cpsie i\n nop\n cpsid i\n" ::: "memory");
+ else
+ asm volatile("cpsie i\n wfi\n cpsid i\n" ::: "memory");
}
void