The patch series introduces basic UART support (in interrupt mode) and support of interrupts for hypervisor mode.
To implement this the following has been added: - APLIC and IMISC initialization. - Introduce of intc_hw_operations abstraction. - Introduce some APLIC and IMSIC operations. - Introduce init_IRQ(), platform_get_irq() and setup_irq() functions. - Update do_trap() handler to handle IRQ_S_EXT. - Introduce some other functions such as: get_s_time(), smp_clear_cpu_maps(), ioremap(). - Enable UART. CI tests: https://gitlab.com/xen-project/people/olkur/xen/-/pipelines/1829069921 --- Changes in V2: - Merged to staging: xen/riscv: initialize bitmap to zero in riscv_fill_hwcap_from_isa_string() xen/asm-generic: introduce asm-generic/irq-dt.h - All other changes are patch-specific. Please check each patch separately. --- Oleksii Kurochko (14): xen/riscv: introduce smp_prepare_boot_cpu() xen/riscv: introduce support of Svpbmt extension and make it mandatory xen/riscv: add ioremap_*() variants using ioremap_attr() xen/riscv: introduce init_IRQ() xen/riscv: introduce platform_get_irq() xen/riscv: dt_processor_hartid() implementation xen/riscv: introduce register_intc_ops() and intc_hw_ops. xen/riscv: imsic_init() implementation xen/riscv: aplic_init() implementation xen/riscv: introduce intc_init() and helpers xen/riscv: implementation of aplic and imsic operations xen/riscv: add external interrupt handling for hypervisor mode xen/riscv: implement setup_irq() xen/riscv: add basic UART support automation/scripts/qemu-smoke-riscv64.sh | 1 + docs/misc/riscv/booting.txt | 4 + xen/arch/riscv/Kconfig | 5 + xen/arch/riscv/Makefile | 3 + xen/arch/riscv/aplic-priv.h | 38 ++ xen/arch/riscv/aplic.c | 300 ++++++++++++++ xen/arch/riscv/cpufeature.c | 2 + xen/arch/riscv/imsic.c | 474 +++++++++++++++++++++++ xen/arch/riscv/include/asm/Makefile | 1 + xen/arch/riscv/include/asm/aplic.h | 73 ++++ xen/arch/riscv/include/asm/cpufeature.h | 1 + xen/arch/riscv/include/asm/fixmap.h | 2 +- xen/arch/riscv/include/asm/imsic.h | 84 ++++ xen/arch/riscv/include/asm/intc.h | 32 ++ xen/arch/riscv/include/asm/io.h | 10 +- xen/arch/riscv/include/asm/irq.h | 24 ++ xen/arch/riscv/include/asm/mm-types.h | 8 + xen/arch/riscv/include/asm/page.h | 23 +- xen/arch/riscv/include/asm/smp.h | 17 + xen/arch/riscv/intc.c | 55 +++ xen/arch/riscv/irq.c | 223 +++++++++++ xen/arch/riscv/mm.c | 30 ++ xen/arch/riscv/pt.c | 20 +- xen/arch/riscv/setup.c | 21 +- xen/arch/riscv/smpboot.c | 85 ++++ xen/arch/riscv/stubs.c | 11 - xen/arch/riscv/traps.c | 19 + xen/arch/riscv/xen.lds.S | 2 + xen/drivers/char/Kconfig | 3 +- 29 files changed, 1537 insertions(+), 34 deletions(-) create mode 100644 xen/arch/riscv/aplic-priv.h create mode 100644 xen/arch/riscv/imsic.c create mode 100644 xen/arch/riscv/include/asm/aplic.h create mode 100644 xen/arch/riscv/include/asm/imsic.h create mode 100644 xen/arch/riscv/include/asm/mm-types.h create mode 100644 xen/arch/riscv/irq.c create mode 100644 xen/arch/riscv/smpboot.c -- 2.49.0