From a2429d7c9d3660a96e54074251663725052aa6b9 Mon Sep 17 00:00:00 2001 From: Rahul Pathak Date: Fri, 12 Aug 2022 19:24:42 +0530 Subject: [PATCH] lib: sbi_illegal_insn: Fix FENCE.TSO emulation infinite trap loop In case of missing "FENCE.TSO" instruction implementation, opensbi can emulate the "FENCE.TSO" with "FENCE RW,RW", but mepc was not incremented to continue from the next instruction causing infinite trap. Fixes: cb8271c8 ("lib: sbi_illegal_insn: Add emulation for fence.tso") Signed-off-by: Rahul Pathak Reviewed-by: Andrew Jones Reviewed-by: Xiang W Reviewed-by: Samuel Holland --- opensbi/lib/sbi/sbi_illegal_insn.c | 1 + 1 file changed, 1 insertion(+) diff --git a/opensbi/lib/sbi/sbi_illegal_insn.c b/opensbi/lib/sbi/sbi_illegal_insn.c index fb67c28d23..45e7ce9399 100644 --- a/opensbi/lib/sbi/sbi_illegal_insn.c +++ b/opensbi/lib/sbi/sbi_illegal_insn.c @@ -37,6 +37,7 @@ static int misc_mem_opcode_insn(ulong insn, struct sbi_trap_regs *regs) /* Errata workaround: emulate `fence.tso` as `fence rw, rw`. */ if ((insn & INSN_MASK_FENCE_TSO) == INSN_MATCH_FENCE_TSO) { smp_mb(); + regs->mepc += 4; return 0; }