4 // The maximum number of HARTs this code supports
\r
8 #define CLINT_END_HART_IPI CLINT_CTRL_ADDR + (MAX_HARTS*4)
\r
10 // The hart that non-SMP tests should run on
\r
12 #define NONSMP_HART 0
\r
15 /* If your test cannot handle multiple-threads, use this:
\r
18 #define smp_disable(reg1, reg2) \
\r
19 csrr reg1, mhartid ;\
\r
20 li reg2, NONSMP_HART ;\
\r
21 beq reg1, reg2, hart0_entry ;\
\r
27 /* If your test needs to temporarily block multiple-threads, do this:
\r
28 * smp_pause(reg1, reg2)
\r
29 * ... single-threaded work ...
\r
30 * smp_resume(reg1, reg2)
\r
31 * ... multi-threaded work ...
\r
34 #define smp_pause(reg1, reg2) \
\r
37 csrr reg2, mhartid ;\
\r
40 #define smp_resume(reg1, reg2) \
\r
41 li reg1, CLINT_CTRL_ADDR ;\
\r
45 addi reg1, reg1, 4 ;\
\r
46 li reg2, CLINT_END_HART_IPI ;\
\r
47 blt reg1, reg2, 41b ;\
\r
51 andi reg2, reg2, 0x8 ;\
\r
53 li reg1, CLINT_CTRL_ADDR ;\
\r
54 csrr reg2, mhartid ;\
\r
55 slli reg2, reg2, 2 ;\
\r
56 add reg2, reg2, reg1 ;\
\r
61 addi reg1, reg1, 4 ;\
\r
62 li reg2, CLINT_END_HART_IPI ;\
\r