[U-Boot] [PATCH 17/19] riscv: Pass correct exception code to _exit_trap()

Auer, Lukas lukas.auer at aisec.fraunhofer.de
Wed Nov 14 22:58:59 UTC 2018


Hi Bin,

On Tue, 2018-11-13 at 00:22 -0800, Bin Meng wrote:
> The most significant bit in mcause register should be masked to
> form the exception code for _exit_trap().
> 
> Signed-off-by: Bin Meng <bmeng.cn at gmail.com>
> ---
> 
>  arch/riscv/lib/interrupts.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/riscv/lib/interrupts.c
> b/arch/riscv/lib/interrupts.c
> index c568706..5e09196 100644
> --- a/arch/riscv/lib/interrupts.c
> +++ b/arch/riscv/lib/interrupts.c
> @@ -73,7 +73,7 @@ ulong handle_trap(ulong mcause, ulong epc, struct
> pt_regs *regs)
>  	else if ((is_int) && ((mcause & MCAUSE_CAUSE)  == IRQ_M_TIMER))
>  		timer_interrupt(0);	/* handle_m_timer_interrupt
> */
>  	else
> -		_exit_trap(mcause, epc, regs);
> +		_exit_trap(mcause & MCAUSE_CAUSE, epc, regs);

The exception codes differ between traps caused by an interrupt (MSB
set) and those that are not. Besides software interrupts, the
handle_trap already checks for all possible machine-mode interrupts.

Thanks,
Lukas

>  
>  	return epc;
>  }


More information about the U-Boot mailing list