[PATCH 2/3] riscv: implement local_irq_{save,restore} macros

Ben Dooks ben.dooks at sifive.com
Fri May 5 10:02:06 CEST 2023


Add implementations of the local_irq_{save,restore} macros so that
<asm/atomic.h> can be used with riscv.

Signed-off-by: Ben Dooks <ben.dooks at sifive.com>
---
 arch/riscv/include/asm/system.h | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/arch/riscv/include/asm/system.h b/arch/riscv/include/asm/system.h
index 9d8e43e394..78093681e5 100644
--- a/arch/riscv/include/asm/system.h
+++ b/arch/riscv/include/asm/system.h
@@ -7,15 +7,22 @@
 #ifndef __ASM_RISCV_SYSTEM_H
 #define __ASM_RISCV_SYSTEM_H
 
+#include <asm/csr.h>
+
 struct event;
 
 /*
- * Interrupt configuring macros.
- *
- * TODO
- *
+ * Interupt configuration macros
  */
 
+#define local_irq_save(__flags) do { \
+    __flags = csr_read_clear(CSR_SSTATUS, SR_SIE) & SR_SIE;	\
+  } while (0)
+
+#define local_irq_restore(__flags) do { \
+    csr_set(CSR_SSTATUS, __flags & SR_SIE); \
+  } while(0)
+
 /* Hook to set up the CPU (called from SPL too) */
 int riscv_cpu_setup(void *ctx, struct event *event);
 
-- 
2.39.2



More information about the U-Boot mailing list