[PATCH 13/15] HiFive1: add interrupts enable/disable support
Hesham Almatary
heshamelmatary at gmail.com
Sun Aug 20 03:18:33 UTC 2017
On Thu, Aug 17, 2017 at 1:13 AM, Denis Obrezkov <denisobrezkov at gmail.com> wrote:
> ---
> 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;
Consider implementing this proprely as we discussed before. Also,
there's no need for the #elif FE3XX; just modify the #else below.
Enabling/disabling global interrupts in RISC-V (and this file) is
ISA/RISC-V specific, not BSP specific.
> #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");
ditto
> #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
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
--
Hesham
More information about the devel
mailing list