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:

Reply via email to