From 772cbd195590af09659048a3878318e9bbb7d6e3 Mon Sep 17 00:00:00 2001 From: Kumar Gala Date: Wed, 25 Jan 2017 08:29:03 -0600 Subject: [PATCH] arm: cmsis: Convert _ScbIsInThreadMode to use direct CMSIS register access Jira: ZEP-1568 Change-Id: Idc14817ce85042ec86bdf67b8939f783224329ff Signed-off-by: Kumar Gala --- arch/arm/core/cortex_m/scb.c | 2 +- arch/arm/core/thread_abort.c | 2 +- include/arch/arm/cortex_m/scb.h | 15 --------------- 3 files changed, 2 insertions(+), 17 deletions(-) diff --git a/arch/arm/core/cortex_m/scb.c b/arch/arm/core/cortex_m/scb.c index 168413b37f6..f5bca9b33e7 100644 --- a/arch/arm/core/cortex_m/scb.c +++ b/arch/arm/core/cortex_m/scb.c @@ -36,7 +36,7 @@ static void software_reboot(void) */ __asm__ volatile("cpsie i" :::); - if (_ScbIsInThreadMode()) { + if ((SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk) == 0) { _do_software_reboot(); } else { __asm__ volatile( diff --git a/arch/arm/core/thread_abort.c b/arch/arm/core/thread_abort.c index a24e2bbcf03..166aeef8448 100644 --- a/arch/arm/core/thread_abort.c +++ b/arch/arm/core/thread_abort.c @@ -35,7 +35,7 @@ void k_thread_abort(k_tid_t thread) _thread_monitor_exit(thread); if (_current == thread) { - if (_ScbIsInThreadMode()) { + if ((SCB->ICSR & SCB_ICSR_VECTACTIVE_Msk) == 0) { _Swap(key); CODE_UNREACHABLE; } else { diff --git a/include/arch/arm/cortex_m/scb.h b/include/arch/arm/cortex_m/scb.h index df9e3a88d11..d5358aa3c1c 100644 --- a/include/arch/arm/cortex_m/scb.h +++ b/include/arch/arm/cortex_m/scb.h @@ -51,21 +51,6 @@ extern "C" { #include #include -/** - * - * @brief Find out if running in thread mode - * - * This routine determines if the current mode is thread mode. - * - * @return 1 if in thread mode, 0 otherwise - */ - -static inline int _ScbIsInThreadMode(void) -{ - /* 0 == thread mode */ - return !__scs.scb.icsr.bit.vectactive; -} - /** * * @brief Obtain the currently executing vector