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/1802596163 --- Changes in v2: - Split patch [PATCH v1 07/14] xen/riscv: Introduce intc_hw_operations abstraction into two: - xen/riscv: introduce register_intc_ops() and intc_hw_ops - xen/riscv: introduce intc_init() and helpers It was needed to be able to merge [PATCH v1 13/14] xen/riscv: initialize interrupt controller into the patch where intc_init() is introduced. - Merge [PATCH v1 13/14] xen/riscv: initialize interrupt controller to xen/riscv: introduce intc_init() and helpers. - xen/riscv: implement get_s_time() has been merged to staging. - All other changes please look in specific patch. --- Oleksii Kurochko (16): xen/riscv: initialize bitmap to zero in riscv_fill_hwcap_from_isa_string() xen/riscv: introduce smp_prepare_boot_cpu() xen/riscv: introduce support of Svpbmt extension xen/riscv: add ioremap_*() variants using ioremap_attr() xen/asm-generic: introduce asm-generic/irq-dt.h xen/riscv: introduce init_IRQ() xen/riscv: introduce platform_get_irq() xen/riscv: dt_processor_cpuid() 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/arm/include/asm/Makefile | 1 + xen/arch/arm/include/asm/irq.h | 15 +- xen/arch/riscv/Kconfig | 15 + xen/arch/riscv/Makefile | 3 + xen/arch/riscv/aplic-priv.h | 38 +++ xen/arch/riscv/aplic.c | 309 ++++++++++++++++++ xen/arch/riscv/cpufeature.c | 4 + xen/arch/riscv/imsic.c | 390 +++++++++++++++++++++++ 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 | 34 ++ xen/arch/riscv/include/asm/io.h | 11 +- xen/arch/riscv/include/asm/irq.h | 16 + xen/arch/riscv/include/asm/mm-types.h | 8 + xen/arch/riscv/include/asm/page.h | 17 +- xen/arch/riscv/include/asm/smp.h | 3 + xen/arch/riscv/intc.c | 59 ++++ xen/arch/riscv/irq.c | 218 +++++++++++++ xen/arch/riscv/mm.c | 34 ++ xen/arch/riscv/pt.c | 20 +- xen/arch/riscv/setup.c | 22 +- xen/arch/riscv/smpboot.c | 78 +++++ xen/arch/riscv/stubs.c | 11 - xen/arch/riscv/traps.c | 19 ++ xen/arch/riscv/xen.lds.S | 2 + xen/drivers/char/Kconfig | 3 +- xen/include/asm-generic/irq-dt.h | 21 ++ 32 files changed, 1470 insertions(+), 47 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 create mode 100644 xen/include/asm-generic/irq-dt.h -- 2.49.0