Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions machine/mcall.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@
#define SBI_REMOTE_SFENCE_VMA 6
#define SBI_REMOTE_SFENCE_VMA_ASID 7
#define SBI_SHUTDOWN 8
#define SBI_CLEAR_TIP 9

#endif
10 changes: 9 additions & 1 deletion machine/mtrap.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,11 @@ static uintptr_t mcall_clear_ipi()
return clear_csr(mip, MIP_SSIP) & MIP_SSIP;
}

static uintptr_t mcall_clear_tip()
{
return clear_csr(mip, MIP_STIP);
}

static uintptr_t mcall_shutdown()
{
poweroff(0);
Expand All @@ -87,7 +92,7 @@ static uintptr_t mcall_shutdown()
static uintptr_t mcall_set_timer(uint64_t when)
{
*HLS()->timecmp = when;
clear_csr(mip, MIP_STIP);
mcall_clear_tip();
set_csr(mie, MIP_MTIP);
return 0;
}
Expand Down Expand Up @@ -152,6 +157,9 @@ void mcall_trap(uintptr_t* regs, uintptr_t mcause, uintptr_t mepc)
case SBI_CLEAR_IPI:
retval = mcall_clear_ipi();
break;
case SBI_CLEAR_TIP:
retval = mcall_clear_tip();
break;
case SBI_SHUTDOWN:
retval = mcall_shutdown();
break;
Expand Down