The patch series is based on another one [Basic early_printk and smoke
test implementation] which hasn't been commited yet.
The patch series provides a basic implementation of exception handling.
It can do only basic things such as decode a cause of an exception,
save/restore registers and execute "wfi" instruction if an exception
can not be handled.
To verify that exception handling works well it was implemented macros
from <asm/bug.h> such as BUG/WARN/run_in_exception/assert_failed.
The implementation of macros is used "ebreak" instruction and set up bug
frame tables for each type of macros.
Also it was implemented register save/restore to return and continue work
after WARN/run_in_exception.
Not all functionality of the macros was implemented as some of them
require hard-panic the system which is not available now. Instead of
hard-panic 'wfi' instruction is used but it should be definitely changed
in the neareset future.
It wasn't implemented show_execution_state() and stack trace discovering
as it's not necessary now.
Oleksii Kurochko (14):
xen/riscv: add _zicsr to CFLAGS
xen/riscv: add <asm/asm.h> header
xen/riscv: add <asm/riscv_encoding.h header
xen/riscv: add <asm/csr.h> header
xen/riscv: add early_printk_hnum() function
xen/riscv: introduce exception context
xen/riscv: introduce exception handlers implementation
xen/riscv: introduce decode_cause() stuff
xen/riscv: introduce do_unexpected_trap()
xen/riscv: mask all interrupts
xen/riscv: introduce setup_trap_handler()
xen/riscv: introduce an implementation of macros from <asm/bug.h>
xen/riscv: test basic handling stuff
automation: add smoke test to verify macros from bug.h
automation/scripts/qemu-smoke-riscv64.sh | 2 +
xen/arch/riscv/Makefile | 2 +
xen/arch/riscv/arch.mk | 2 +-
xen/arch/riscv/early_printk.c | 39 +
xen/arch/riscv/entry.S | 97 ++
xen/arch/riscv/include/asm/asm.h | 54 ++
xen/arch/riscv/include/asm/bug.h | 120 +++
xen/arch/riscv/include/asm/csr.h | 82 ++
xen/arch/riscv/include/asm/early_printk.h | 2 +
xen/arch/riscv/include/asm/processor.h | 114 +++
xen/arch/riscv/include/asm/riscv_encoding.h | 945 ++++++++++++++++++++
xen/arch/riscv/include/asm/traps.h | 13 +
xen/arch/riscv/riscv64/head.S | 5 +
xen/arch/riscv/setup.c | 27 +
xen/arch/riscv/traps.c | 229 +++++
xen/arch/riscv/xen.lds.S | 10 +
16 files changed, 1742 insertions(+), 1 deletion(-)
create mode 100644 xen/arch/riscv/entry.S
create mode 100644 xen/arch/riscv/include/asm/asm.h
create mode 100644 xen/arch/riscv/include/asm/bug.h
create mode 100644 xen/arch/riscv/include/asm/csr.h
create mode 100644 xen/arch/riscv/include/asm/processor.h
create mode 100644 xen/arch/riscv/include/asm/riscv_encoding.h
create mode 100644 xen/arch/riscv/include/asm/traps.h
create mode 100644 xen/arch/riscv/traps.c
--
2.39.0