mpfs_head.S: Support for booting on different harts and from eNVM
- Fix the FPU enabling code - If booting from eNVM, all harts start booting. With CONFIG_MPFS_BOOTLOADER, one can allow just one hart booting and rest are stuck in wfi. - Check that mtvec is actually updated before continuing the boot - Create 5 IRQ stacks, one for each hart Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
This commit is contained in:
parent
37761c293d
commit
c5b11f42b6
@ -130,6 +130,47 @@ __start_mpfs:
|
||||
|
||||
.skip_e51:
|
||||
|
||||
#ifdef CONFIG_MPFS_BOOTLOADER
|
||||
|
||||
/* Set all but the boot hart into wfi */
|
||||
|
||||
li a1, CONFIG_MPFS_BOOT_HART
|
||||
beq a0, a1, .continue_boot
|
||||
|
||||
/* Enable IRQ_M_SOFT */
|
||||
|
||||
li a2, (1U << 3)
|
||||
csrw mie, a2 /* Set MSIE bit to receive IPI */
|
||||
|
||||
/* flush the instruction cache */
|
||||
fence.i
|
||||
|
||||
.wait_boot:
|
||||
wfi
|
||||
|
||||
/* Only start if MIP_MSIP is set. Breakpoints in the debugger (halt)
|
||||
* will wakeup wfi, so we will check again that we actually got the soft
|
||||
* interrupt
|
||||
*/
|
||||
|
||||
csrr a2, mip
|
||||
andi a2, a2, (1U << 3) /* MIP_MSIP */
|
||||
beqz a2, .wait_boot
|
||||
|
||||
/* Disable and clear all interrupts (the sw interrupt) */
|
||||
li a2, 0x00000008 /* MSTATUS_MIE */
|
||||
csrc mstatus, a2
|
||||
csrw mie, zero
|
||||
csrw mip, zero
|
||||
|
||||
/* Jump to app (TODO: remove fixed address) */
|
||||
li a1, 0x80000000
|
||||
jr a1
|
||||
|
||||
.continue_boot:
|
||||
|
||||
#endif
|
||||
|
||||
/* Set stack pointer to the idle thread stack */
|
||||
|
||||
la sp, MPFS_IDLESTACK_TOP
|
||||
|
Loading…
Reference in New Issue
Block a user