arch: fe310: Fix mstatus handling

In previous commit, mstatus.mie was set when creating a new task
    but this change was incorrect and had a side effect such that
    a machine interrupt would be enabled just before returning from
    interrupt handling routine to switch context.

    Also, mstatus.mpp is set to machine mode in up_get_newintctx()
    instead of fe310_dispatch_irq().
This commit is contained in:
Masayuki Ishikawa 2020-01-08 10:38:27 -03:00 committed by Alan Carvalho de Assis
parent 38b043da9f
commit d76ba14d58
3 changed files with 6 additions and 5 deletions

View File

@ -47,6 +47,7 @@
#define MSTATUS_MIE (0x1 << 3) /* Machine Interrupt Enable */
#define MSTATUS_MPIE (0x1 << 7) /* Machine Previous Interrupt Enable */
#define MSTATUS_MPPM (0x3 << 11) /* Machine Previous Privilege (m-mode) */
/* In mie (machine interrupt enable) register */

View File

@ -193,7 +193,11 @@ void up_enable_irq(int irq)
uint32_t up_get_newintctx(void)
{
return (MSTATUS_MPIE | MSTATUS_MIE);
/* Set machine previous privilege mode to machine mode.
* Also set machine previous interrupt enable
*/
return (MSTATUS_MPPM | MSTATUS_MPIE);
}
/****************************************************************************

View File

@ -131,10 +131,6 @@ void *fe310_dispatch_irq(uint32_t vector, uint32_t *regs)
regs = (uint32_t *)g_current_regs;
g_current_regs = NULL;
/* Set machine previous privilege mode to machine mode */
*(regs + REG_INT_CTX_NDX) |= 0x3 << 11;
return regs;
}