[PATCH 13/15] HiFive1: add interrupts enable/disable support
Denis Obrezkov
denisobrezkov at gmail.com
Wed Aug 16 15:13:04 UTC 2017
---
cpukit/score/cpu/riscv32/rtems/score/cpu.h | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
diff --git a/cpukit/score/cpu/riscv32/rtems/score/cpu.h b/cpukit/score/cpu/riscv32/rtems/score/cpu.h
index 8f8a864..9b484e6 100644
--- a/cpukit/score/cpu/riscv32/rtems/score/cpu.h
+++ b/cpukit/score/cpu/riscv32/rtems/score/cpu.h
@@ -455,7 +455,7 @@ Context_Control_fp _CPU_Null_fp_context;
*
*/
-#define CPU_STACK_MINIMUM_SIZE 4096
+#define CPU_STACK_MINIMUM_SIZE 700
/*
* CPU's worst alignment requirement for data types on a byte boundary. This
@@ -538,7 +538,6 @@ Context_Control_fp _CPU_Null_fp_context;
* level is returned in _level.
*
*/
-
static inline uint32_t riscv_interrupt_disable( void )
{
register uint32_t sstatus;
@@ -549,13 +548,15 @@ static inline uint32_t riscv_interrupt_disable( void )
"csrw sstatus, %[temp]; \t"
: [temp] "=r" (temp) : [sstatus] "r" (sstatus):
);
+#elif FE3XX
+ __asm__ volatile ("csrci mstatus, 0x8");
+ (void)temp;
#else
__asm__ __volatile__ ("csrr %[sstatus], mstatus; \t"
"andi %[temp], %[sstatus], -2; \t"
"csrw mstatus, %[temp]; \t"
: [temp] "=r" (temp) : [sstatus] "r" (sstatus):
);
-
#endif
return sstatus;
}
@@ -565,15 +566,18 @@ static inline void riscv_interrupt_enable(uint32_t level)
#ifdef SEL4
__asm__ __volatile__ ("csrw sstatus, %[level];"
:: [level] "r" (level):);
+#elif FE3XX
+ __asm__ volatile ("csrsi mstatus, 0x8");
#else
__asm__ __volatile__ ("csrw mstatus, %[level];"
:: [level] "r" (level):);
-
#endif
}
#define _CPU_ISR_Disable( _level ) \
- _level = riscv_interrupt_disable()
+ do { \
+ _level = riscv_interrupt_disable();\
+ } while(0)
/*
* Enable interrupts to the previous level (returned by _CPU_ISR_Disable).
@@ -583,7 +587,9 @@ static inline void riscv_interrupt_enable(uint32_t level)
*/
#define _CPU_ISR_Enable( _level ) \
- riscv_interrupt_enable( _level )
+ do {\
+ riscv_interrupt_enable( _level ); \
+ } while(0)
/*
* This temporarily restores the interrupt to _level before immediately
--
2.1.4
More information about the devel
mailing list