arm: relinquish one IRQ priority reserved by kernel
The Cortex-M3/4 kernel was reserving priorities 0 and 1 for itself, but
was not registering any exception on priority 0. Only reserve priority 0
and use it for SVC and fault exceptions instead of priority 1.
Change-Id: Iff2405e27fd4bed4e49ab90ec2ae984f2c0a83a6
Signed-off-by: Benjamin Walsh <benjamin.walsh@windriver.com>
diff --git a/arch/arm/include/cortex_m/exc.h b/arch/arm/include/cortex_m/exc.h
index 6157f61..601de64 100644
--- a/arch/arm/include/cortex_m/exc.h
+++ b/arch/arm/include/cortex_m/exc.h
@@ -72,16 +72,20 @@
static ALWAYS_INLINE void _ExcSetup(void)
{
_ScbExcPrioSet(_EXC_PENDSV, _EXC_PRIO(0xff));
-#if !defined(CONFIG_CPU_CORTEX_M0_M0PLUS)
- _ScbExcPrioSet(_EXC_SVC, _EXC_PRIO(0x01));
- _ScbExcPrioSet(_EXC_MPU_FAULT, _EXC_PRIO(0x01));
- _ScbExcPrioSet(_EXC_BUS_FAULT, _EXC_PRIO(0x01));
- _ScbExcPrioSet(_EXC_USAGE_FAULT, _EXC_PRIO(0x01));
+
+#ifdef CONFIG_CPU_CORTEX_M_HAS_BASEPRI
+ _ScbExcPrioSet(_EXC_SVC, _EXC_PRIO(_EXC_SVC_PRIO));
+#endif
+
+#ifdef CONFIG_CPU_CORTEX_M_HAS_PROGRAMMABLE_FAULT_PRIOS
+ _ScbExcPrioSet(_EXC_MPU_FAULT, _EXC_PRIO(_EXC_FAULT_PRIO));
+ _ScbExcPrioSet(_EXC_BUS_FAULT, _EXC_PRIO(_EXC_FAULT_PRIO));
+ _ScbExcPrioSet(_EXC_USAGE_FAULT, _EXC_PRIO(_EXC_FAULT_PRIO));
_ScbUsageFaultEnable();
_ScbBusFaultEnable();
_ScbMemFaultEnable();
-#endif /* !CONFIG_CPU_CORTEX_M0_M0PLUS */
+#endif
}
#endif /* _ASMLANGUAGE */
diff --git a/include/arch/arm/cortex_m/nvic.h b/include/arch/arm/cortex_m/nvic.h
index 4deaf8e..9705233 100644
--- a/include/arch/arm/cortex_m/nvic.h
+++ b/include/arch/arm/cortex_m/nvic.h
@@ -47,30 +47,27 @@
#define _EXC_PRIO(pri) (((pri) << (8 - CONFIG_NUM_IRQ_PRIO_BITS)) & 0xff)
#ifdef CONFIG_ZERO_LATENCY_IRQS
-#define ZERO_LATENCY_IRQS_RESERVED_PRIO 1
+#define _ZERO_LATENCY_IRQS_RESERVED_PRIO 1
#else
-#define ZERO_LATENCY_IRQS_RESERVED_PRIO 0
+#define _ZERO_LATENCY_IRQS_RESERVED_PRIO 0
#endif
-#ifdef CONFIG_CPU_CORTEX_M_HAS_BASEPRI
-#define HAS_BASEPRI_RESERVED_PRIO 1
+#if defined(CONFIG_CPU_CORTEX_M_HAS_PROGRAMMABLE_FAULT_PRIOS) || \
+ defined(CONFIG_CPU_CORTEX_M_HAS_BASEPRI)
+#define _EXCEPTION_RESERVED_PRIO 1
#else
-#define HAS_BASEPRI_RESERVED_PRIO 0
-#endif
-
-#ifdef CONFIG_CPU_CORTEX_M_HAS_PROGRAMMABLE_FAULT_PRIOS
-#define HAS_PROGRAMMABLE_FAULT_PRIOS_RESERVED_PRIO 1
-#else
-#define HAS_PROGRAMMABLE_FAULT_PRIOS_RESERVED_PRIO 0
+#define _EXCEPTION_RESERVED_PRIO 0
#endif
#define _IRQ_PRIO_OFFSET \
- (ZERO_LATENCY_IRQS_RESERVED_PRIO + \
- HAS_BASEPRI_RESERVED_PRIO + \
- HAS_PROGRAMMABLE_FAULT_PRIOS_RESERVED_PRIO)
+ (_ZERO_LATENCY_IRQS_RESERVED_PRIO + \
+ _EXCEPTION_RESERVED_PRIO)
#define _EXC_IRQ_DEFAULT_PRIO _EXC_PRIO(_IRQ_PRIO_OFFSET)
+#define _EXC_SVC_PRIO 0
+#define _EXC_FAULT_PRIO 0
+
/* no exc #0 */
#define _EXC_RESET 1
#define _EXC_NMI 2