riscv: sifive: Apply errata "cip-453" patch
authorVincent Chen <vincent.chen@sifive.com>
Mon, 22 Mar 2021 14:26:05 +0000 (22:26 +0800)
committerPalmer Dabbelt <palmerdabbelt@google.com>
Mon, 26 Apr 2021 15:24:57 +0000 (08:24 -0700)
commit800149a77c2cb8746a94457939b1ba1e37d2c14e
treea31cd1e131fc9259b2d7a12b62fe5958587b420b
parent1a0e5dbd3723e1194cc549def69fe7b557d4c72b
riscv: sifive: Apply errata "cip-453" patch

Add sign extension to the $badaddr before addressing the instruction page
fault and instruction access fault to workaround the issue "cip-453".

To avoid affecting the existing code sequence, this patch will creates two
trampolines to add sign extension to the $badaddr. By the "alternative"
mechanism, these two trampolines will replace the original exception
handler of instruction page fault and instruction access fault in the
excp_vect_table. In this case, only the specific SiFive CPU core jumps to
the do_page_fault and do_trap_insn_fault through these two trampolines.
Other CPUs are not affected.

Signed-off-by: Vincent Chen <vincent.chen@sifive.com>
Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
arch/riscv/Kconfig.erratas
arch/riscv/errata/sifive/Makefile
arch/riscv/errata/sifive/errata.c
arch/riscv/errata/sifive/errata_cip_453.S [new file with mode: 0644]
arch/riscv/include/asm/errata_list.h
arch/riscv/kernel/entry.S