implements halt using WFI if hartid!=0 and multicore
This commit is contained in:
5
env/riscv_vp/init.c
vendored
5
env/riscv_vp/init.c
vendored
@@ -103,7 +103,10 @@ void __attribute__((weak)) _init() {
|
|||||||
while(i < NUM_INTERRUPTS) {
|
while(i < NUM_INTERRUPTS) {
|
||||||
localISR[i++] = default_handler;
|
localISR[i++] = default_handler;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(NUM_HARTS) && NUM_HARTS > 1
|
||||||
|
for(int i = 1; i < NUM_HARTS; ++i)
|
||||||
|
set_aclint_msip(aclint, i, 1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
5
env/start.S
vendored
5
env/start.S
vendored
@@ -30,11 +30,14 @@ _start:
|
|||||||
2:
|
2:
|
||||||
la t0, trap_entry
|
la t0, trap_entry
|
||||||
csrw mtvec, t0
|
csrw mtvec, t0
|
||||||
#ifdef HARTX_WAIT4WFI
|
#if defined(NUM_HARTS) && NUM_HARTS>1
|
||||||
/* block other cores until hart 0 has finished initialization */
|
/* block other cores until hart 0 has finished initialization */
|
||||||
csrr t0, mhartid
|
csrr t0, mhartid
|
||||||
beqz t0, hart0_init
|
beqz t0, hart0_init
|
||||||
|
/* enable MSI locally */
|
||||||
|
csrwi mie, 0x8
|
||||||
wfi
|
wfi
|
||||||
|
csrw mie, zero
|
||||||
j hartx_start
|
j hartx_start
|
||||||
hart0_init:
|
hart0_init:
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user