From b22853b2f4bdd1ed31d601ebd331083d67d40f11 Mon Sep 17 00:00:00 2001 From: Palmer Dabbelt Date: Tue, 13 Jun 2017 15:14:38 -0700 Subject: Add a SMP example This just prints "hello world" on two cores. It contains an example of how to initialize a multi-core system using IPIs, and a simple spin lock. --- software/smp/atomic.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 software/smp/atomic.h (limited to 'software/smp/atomic.h') diff --git a/software/smp/atomic.h b/software/smp/atomic.h new file mode 100644 index 0000000..074c6a2 --- /dev/null +++ b/software/smp/atomic.h @@ -0,0 +1,29 @@ +#ifndef SIFIVE_ATOMIC_H +#define SIFIVE_ATOMIC_H + +#define ATOMIC_INIT(x) \ + { \ + .counter = (x), \ + } + +typedef struct { + int counter; +} atomic_t; + +static inline int atomic_xchg(atomic_t *v, int n) +{ + register int c; + + __asm__ __volatile__ ( + "amoswap.w.aqrl %0, %2, %1" + : "=r" (c), "+A" (v->counter) + : "r" (n)); + return c; +} + +static inline void mb(void) +{ + __asm__ __volatile__ ("fence"); +} + +#endif -- cgit v1.2.1-18-gbd029