This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 60fb1adaca72c7867274a47c951197ca2f910096 Author: Dong Heng <dongh...@espressif.com> AuthorDate: Fri May 21 13:38:08 2021 +0800 riscv: Add inline IRQ process functions Remove functions from RISC-V chips. --- arch/risc-v/include/c906/irq.h | 32 ------------- arch/risc-v/include/esp32c3/irq.h | 86 +---------------------------------- arch/risc-v/include/irq.h | 63 ++++++++++++++++++++++++- arch/risc-v/include/mpfs/irq.h | 32 ------------- arch/risc-v/src/bl602/bl602_irq.c | 35 -------------- arch/risc-v/src/c906/c906_irq.c | 33 -------------- arch/risc-v/src/esp32c3/esp32c3_irq.c | 25 ++++++++++ arch/risc-v/src/fe310/fe310_irq.c | 33 -------------- arch/risc-v/src/k210/k210_irq.c | 33 -------------- arch/risc-v/src/litex/litex_irq.c | 33 -------------- arch/risc-v/src/mpfs/mpfs_irq.c | 33 -------------- arch/risc-v/src/rv32m1/rv32m1_irq.c | 35 -------------- 12 files changed, 87 insertions(+), 386 deletions(-) diff --git a/arch/risc-v/include/c906/irq.h b/arch/risc-v/include/c906/irq.h index a670d7c..b6f852b 100644 --- a/arch/risc-v/include/c906/irq.h +++ b/arch/risc-v/include/c906/irq.h @@ -72,36 +72,4 @@ #define NR_IRQS (C906_IRQ_UART0 + 1) -/**************************************************************************** - * Public Types - ****************************************************************************/ - -#ifndef __ASSEMBLY__ - -/**************************************************************************** - * Public Data - ****************************************************************************/ - -#undef EXTERN -#if defined(__cplusplus) -#define EXTERN extern "C" -extern "C" -{ -#else -#define EXTERN extern -#endif - -/**************************************************************************** - * Public Function Prototypes - ****************************************************************************/ - -EXTERN irqstate_t up_irq_save(void); -EXTERN void up_irq_restore(irqstate_t); -EXTERN irqstate_t up_irq_enable(void); - -#undef EXTERN -#if defined(__cplusplus) -} -#endif -#endif /* __ASSEMBLY__ */ #endif /* __ARCH_RISCV_INCLUDE_C906_IRQ_H */ diff --git a/arch/risc-v/include/esp32c3/irq.h b/arch/risc-v/include/esp32c3/irq.h index d7aff5e..89334e2 100644 --- a/arch/risc-v/include/esp32c3/irq.h +++ b/arch/risc-v/include/esp32c3/irq.h @@ -27,6 +27,7 @@ #ifndef __ASSEMBLY__ # include <arch/csr.h> +# include <arch/irq.h> #endif #include <sys/types.h> @@ -227,89 +228,4 @@ #define NR_IRQS (RISCV_NIRQ_INTERRUPTS + ESP32C3_NIRQ_PERIPH + ESP32C3_NIRQ_GPIO) -/**************************************************************************** - * Inline functions - ****************************************************************************/ - -#ifndef __ASSEMBLY__ - -/**************************************************************************** - * Name: up_irq_restore - * - * Description: - * Restore the value of the mstatus register - * - ****************************************************************************/ - -static inline void up_irq_restore(irqstate_t flags) -{ - __asm__ __volatile__ - ( - "csrw mstatus, %0" : /* no output */ : "r" (flags) - ); -} - -/**************************************************************************** - * Name: up_irq_save - * - * Description: - * Disable interrupts and return the previous value of the mstatus register - * - ****************************************************************************/ - -static inline irqstate_t up_irq_save(void) -{ - irqstate_t flags; - - /* Read mstatus & clear machine interrupt enable (MIE) in mstatus */ - - __asm__ __volatile__ - ( - "csrrc %0, mstatus, %1" : "=r" (flags) : "r"(MSTATUS_MIE) - ); - - /* Return the previous mstatus value so that it can be restored with - * up_irq_restore(). - */ - - return flags; -} - -/**************************************************************************** - * Name: up_irq_enable - * - * Description: - * Return the current interrupt state and enable interrupts - * - ****************************************************************************/ - -static inline irqstate_t up_irq_enable(void) -{ - uint32_t flags; - - /* Read mstatus & set machine interrupt enable (MIE) in mstatus */ - - __asm__ __volatile__ - ( - "csrrs %0, mstatus, %1": "=r" (flags) : "r"(MSTATUS_MIE) - ); - - return flags; -} - -/**************************************************************************** - * Name: up_irq_disable - * - * Description: - * Disable interrupts - * - ****************************************************************************/ - -static inline void up_irq_disable(void) -{ - up_irq_save(); -} - -#endif /* __ASSEMBLY__ */ - #endif /* __ARCH_RISCV_INCLUDE_ESP32C3_IRQ_H */ diff --git a/arch/risc-v/include/irq.h b/arch/risc-v/include/irq.h index 6622f2c..00241ad 100644 --- a/arch/risc-v/include/irq.h +++ b/arch/risc-v/include/irq.h @@ -33,6 +33,7 @@ #include <stdint.h> #include <nuttx/irq.h> +#include <arch/csr.h> #include <arch/chip/irq.h> /* Include RISC-V architecture-specific IRQ definitions */ @@ -65,11 +66,69 @@ extern "C" #endif /**************************************************************************** + * Inline Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: up_irq_save + * + * Description: + * Disable interrupts and return the previous value of the mstatus register + * + ****************************************************************************/ + +static inline irqstate_t up_irq_save(void) +{ + irqstate_t flags; + + /* Read mstatus & clear machine interrupt enable (MIE) in mstatus */ + + __asm__ __volatile__ + ( + "csrrc %0, mstatus, %1\n" + : "=r" (flags) + : "r"(MSTATUS_MIE) + : "memory" + ); + + /* Return the previous mstatus value so that it can be restored with + * up_irq_restore(). + */ + + return flags; +} + +/**************************************************************************** + * Name: up_irq_restore + * + * Description: + * Restore the value of the mstatus register + * + ****************************************************************************/ + +static inline void up_irq_restore(irqstate_t flags) +{ + __asm__ __volatile__ + ( + "csrw mstatus, %0\n" + : /* no output */ + : "r" (flags) + : "memory" + ); +} + +/**************************************************************************** * Public Function Prototypes ****************************************************************************/ -EXTERN irqstate_t up_irq_save(void); -EXTERN void up_irq_restore(irqstate_t); +/**************************************************************************** + * Name: up_irq_enable + * + * Description: + * Return the current interrupt state and enable interrupts + * + ****************************************************************************/ + EXTERN irqstate_t up_irq_enable(void); #undef EXTERN diff --git a/arch/risc-v/include/mpfs/irq.h b/arch/risc-v/include/mpfs/irq.h index 89c7878..4ee52ac 100755 --- a/arch/risc-v/include/mpfs/irq.h +++ b/arch/risc-v/include/mpfs/irq.h @@ -305,36 +305,4 @@ #define NR_IRQS (MPFS_IRQ_BUS_ERROR_UNIT_HART_4 + 1) -/**************************************************************************** - * Public Types - ****************************************************************************/ - -#ifndef __ASSEMBLY__ - -/**************************************************************************** - * Public Data - ****************************************************************************/ - -#undef EXTERN -#if defined(__cplusplus) -#define EXTERN extern "C" -extern "C" -{ -#else -#define EXTERN extern -#endif - -/**************************************************************************** - * Public Function Prototypes - ****************************************************************************/ - -EXTERN irqstate_t up_irq_save(void); -EXTERN void up_irq_restore(irqstate_t); -EXTERN irqstate_t up_irq_enable(void); - -#undef EXTERN -#if defined(__cplusplus) -} -#endif -#endif /* __ASSEMBLY__ */ #endif /* __ARCH_RISCV_INCLUDE_MPFS_IRQ_H */ diff --git a/arch/risc-v/src/bl602/bl602_irq.c b/arch/risc-v/src/bl602/bl602_irq.c index b5476f2..f59391c 100644 --- a/arch/risc-v/src/bl602/bl602_irq.c +++ b/arch/risc-v/src/bl602/bl602_irq.c @@ -204,41 +204,6 @@ void riscv_ack_irq(int irq) } /**************************************************************************** - * Name: up_irq_save - * - * Description: - * Return the current interrupt state and disable interrupts - * - ****************************************************************************/ - -irqstate_t up_irq_save(void) -{ - uint32_t oldstat; - - /* Read mstatus & clear machine interrupt enable (MIE) in mstatus */ - - asm volatile("csrrc %0, mstatus, %1" : "=r"(oldstat) : "r"(MSTATUS_MIE)); - return oldstat; -} - -/**************************************************************************** - * Name: up_irq_restore - * - * Description: - * Restore previous IRQ mask state - * - ****************************************************************************/ - -void up_irq_restore(irqstate_t flags) -{ - /* Write flags to mstatus */ - - asm volatile("csrw mstatus, %0" - : /* no output */ - : "r"(flags)); -} - -/**************************************************************************** * Name: up_irq_enable * * Description: diff --git a/arch/risc-v/src/c906/c906_irq.c b/arch/risc-v/src/c906/c906_irq.c index f03d65f..8db7060 100644 --- a/arch/risc-v/src/c906/c906_irq.c +++ b/arch/risc-v/src/c906/c906_irq.c @@ -235,39 +235,6 @@ void riscv_ack_irq(int irq) } /**************************************************************************** - * Name: up_irq_save - * - * Description: - * Return the current interrupt state and disable interrupts - * - ****************************************************************************/ - -irqstate_t up_irq_save(void) -{ - uint64_t oldstat; - - /* Read mstatus & clear machine interrupt enable (MIE) in mstatus */ - - asm volatile ("csrrc %0, mstatus, %1": "=r" (oldstat) : "r"(MSTATUS_MIE)); - return oldstat; -} - -/**************************************************************************** - * Name: up_irq_restore - * - * Description: - * Restore previous IRQ mask state - * - ****************************************************************************/ - -void up_irq_restore(irqstate_t flags) -{ - /* Write flags to mstatus */ - - asm volatile("csrw mstatus, %0" : /* no output */ : "r" (flags)); -} - -/**************************************************************************** * Name: up_irq_enable * * Description: diff --git a/arch/risc-v/src/esp32c3/esp32c3_irq.c b/arch/risc-v/src/esp32c3/esp32c3_irq.c index 17a9681..734a74e 100644 --- a/arch/risc-v/src/esp32c3/esp32c3_irq.c +++ b/arch/risc-v/src/esp32c3/esp32c3_irq.c @@ -416,3 +416,28 @@ IRAM_ATTR uint32_t *esp32c3_dispatch_irq(uint32_t mcause, uint32_t *regs) return regs; } + +/**************************************************************************** + * Name: up_irq_enable + * + * Description: + * Return the current interrupt state and enable interrupts + * + ****************************************************************************/ + +irqstate_t up_irq_enable(void) +{ + uint32_t flags; + + /* Read mstatus & set machine interrupt enable (MIE) in mstatus */ + + __asm__ __volatile__ + ( + "csrrs %0, mstatus, %1\n" + : "=r" (flags) + : "r"(MSTATUS_MIE) + : "memory" + ); + + return flags; +} diff --git a/arch/risc-v/src/fe310/fe310_irq.c b/arch/risc-v/src/fe310/fe310_irq.c index c27b249..258bb32 100644 --- a/arch/risc-v/src/fe310/fe310_irq.c +++ b/arch/risc-v/src/fe310/fe310_irq.c @@ -199,39 +199,6 @@ void riscv_ack_irq(int irq) } /**************************************************************************** - * Name: up_irq_save - * - * Description: - * Return the current interrupt state and disable interrupts - * - ****************************************************************************/ - -irqstate_t up_irq_save(void) -{ - uint32_t oldstat; - - /* Read mstatus & clear machine interrupt enable (MIE) in mstatus */ - - asm volatile ("csrrc %0, mstatus, %1": "=r" (oldstat) : "r"(MSTATUS_MIE)); - return oldstat; -} - -/**************************************************************************** - * Name: up_irq_restore - * - * Description: - * Restore previous IRQ mask state - * - ****************************************************************************/ - -void up_irq_restore(irqstate_t flags) -{ - /* Write flags to mstatus */ - - asm volatile("csrw mstatus, %0" : /* no output */ : "r" (flags)); -} - -/**************************************************************************** * Name: up_irq_enable * * Description: diff --git a/arch/risc-v/src/k210/k210_irq.c b/arch/risc-v/src/k210/k210_irq.c index 4dd0424..2ebaa5b 100644 --- a/arch/risc-v/src/k210/k210_irq.c +++ b/arch/risc-v/src/k210/k210_irq.c @@ -255,39 +255,6 @@ void riscv_ack_irq(int irq) } /**************************************************************************** - * Name: up_irq_save - * - * Description: - * Return the current interrupt state and disable interrupts - * - ****************************************************************************/ - -irqstate_t up_irq_save(void) -{ - uint64_t oldstat; - - /* Read mstatus & clear machine interrupt enable (MIE) in mstatus */ - - asm volatile ("csrrc %0, mstatus, %1": "=r" (oldstat) : "r"(MSTATUS_MIE)); - return oldstat; -} - -/**************************************************************************** - * Name: up_irq_restore - * - * Description: - * Restore previous IRQ mask state - * - ****************************************************************************/ - -void up_irq_restore(irqstate_t flags) -{ - /* Write flags to mstatus */ - - asm volatile("csrw mstatus, %0" : /* no output */ : "r" (flags)); -} - -/**************************************************************************** * Name: up_irq_enable * * Description: diff --git a/arch/risc-v/src/litex/litex_irq.c b/arch/risc-v/src/litex/litex_irq.c index cc9faa4..0751131 100644 --- a/arch/risc-v/src/litex/litex_irq.c +++ b/arch/risc-v/src/litex/litex_irq.c @@ -204,39 +204,6 @@ void riscv_ack_irq(int irq) } /**************************************************************************** - * Name: up_irq_save - * - * Description: - * Return the current interrupt state and disable interrupts - * - ****************************************************************************/ - -irqstate_t up_irq_save(void) -{ - uint32_t oldstat; - - /* Read mstatus & clear machine interrupt enable (MIE) in mstatus */ - - asm volatile ("csrrc %0, mstatus, %1": "=r" (oldstat) : "r"(MSTATUS_MIE)); - return oldstat; -} - -/**************************************************************************** - * Name: up_irq_restore - * - * Description: - * Restore previous IRQ mask state - * - ****************************************************************************/ - -void up_irq_restore(irqstate_t flags) -{ - /* Write flags to mstatus */ - - asm volatile("csrw mstatus, %0" : /* no output */ : "r" (flags)); -} - -/**************************************************************************** * Name: up_irq_enable * * Description: diff --git a/arch/risc-v/src/mpfs/mpfs_irq.c b/arch/risc-v/src/mpfs/mpfs_irq.c index 159188c..cde6115 100755 --- a/arch/risc-v/src/mpfs/mpfs_irq.c +++ b/arch/risc-v/src/mpfs/mpfs_irq.c @@ -262,39 +262,6 @@ void riscv_ack_irq(int irq) } /**************************************************************************** - * Name: up_irq_save - * - * Description: - * Return the current interrupt state and disable interrupts - * - ****************************************************************************/ - -irqstate_t up_irq_save(void) -{ - uint64_t oldstat; - - /* Read mstatus & clear machine interrupt enable (MIE) in mstatus */ - - asm volatile ("csrrc %0, mstatus, %1": "=r" (oldstat) : "r"(MSTATUS_MIE)); - return oldstat; -} - -/**************************************************************************** - * Name: up_irq_restore - * - * Description: - * Restore previous IRQ mask state - * - ****************************************************************************/ - -void up_irq_restore(irqstate_t flags) -{ - /* Write flags to mstatus */ - - asm volatile("csrw mstatus, %0" : /* no output */ : "r" (flags)); -} - -/**************************************************************************** * Name: up_irq_enable * * Description: diff --git a/arch/risc-v/src/rv32m1/rv32m1_irq.c b/arch/risc-v/src/rv32m1/rv32m1_irq.c index 7d71b56..b09abf4 100644 --- a/arch/risc-v/src/rv32m1/rv32m1_irq.c +++ b/arch/risc-v/src/rv32m1/rv32m1_irq.c @@ -245,41 +245,6 @@ void riscv_ack_irq(int irq) } /**************************************************************************** - * Name: up_irq_save - * - * Description: - * Return the current interrupt state and disable interrupts - * - ****************************************************************************/ - -LOCATE_ITCM -irqstate_t up_irq_save(void) -{ - uint32_t oldstat; - - /* Read mstatus & clear machine interrupt enable (MIE) in mstatus */ - - asm volatile ("csrrc %0, mstatus, %1": "=r" (oldstat) : "r"(MSTATUS_MIE)); - return oldstat; -} - -/**************************************************************************** - * Name: up_irq_restore - * - * Description: - * Restore previous IRQ mask state - * - ****************************************************************************/ - -LOCATE_ITCM -void up_irq_restore(irqstate_t flags) -{ - /* Write flags to mstatus */ - - asm volatile("csrw mstatus, %0" : /* no output */ : "r" (flags)); -} - -/**************************************************************************** * Name: up_irq_enable * * Description: