Hello everyone,
My name is Xie Xun and I am a graduate student in computer science. I
spend some time porting Xen to RISV-V based on Bobby's work. Now Xen
can use device tree to initialize memory and load guest kernel. Timer
interrupt is also enabled for both xen and guest kernel.
This patch series is the first part of the work. It only adds
necessary files for a successful xen build. The only thing xen will do
is printing a message.
There are some problems though. The first patch of this series is
very large, but it seems most of the code is necessary for building
xen. I am trying my best to remove some code but it still has more
than 8000 lines of code.
Looking forward to your feedback.
Xen can be built with:
$ make XEN_TARGET_ARCH=riscv64 CROSS_COMPILE=riscv64-linux-gnu- tiny64_defconfig
$ make XEN_TARGET_ARCH=riscv64 CROSS_COMPILE=riscv64-linux-gnu-
Run with Qemu:
$ qemu-system-riscv64 -machine virt -m 1G -kernel xen
Bobby and Alistair's patch:
https://lists.xenproject.org/archives/html/xen-devel/2020-01/msg01731.html
This patch series is based on Bobby's Repo:
https://gitlab.com/xen-on-risc-v/xen/-/tree/riscv-rebase
This patch series is available in:
https://github.com/xiexun162534/xen/tree/riscv-patch
My latest work:
https://github.com/xiexun162534/xen/tree/riscv-port
Xie Xun (6):
xen/riscv: Add necessary headers and definitions to build xen.
xen/riscv: Add early page table setup code.
xen/riscv: Add head.S
xen/riscv: Add sbi.c, sbi.h
xen/riscv: Add early_printk
xen/riscv: Print "xen start" in start_xen using early_printk.
xen/arch/riscv/Kconfig | 2 +
xen/arch/riscv/Makefile | 53 ++
xen/arch/riscv/Rules.mk | 57 ++
xen/arch/riscv/delay.c | 14 +
xen/arch/riscv/domain.c | 191 ++++
xen/arch/riscv/domctl.c | 52 ++
xen/arch/riscv/early_printk.c | 48 +
xen/arch/riscv/guestcopy.c | 59 ++
xen/arch/riscv/include/asm/acpi.h | 9 +
xen/arch/riscv/include/asm/altp2m.h | 39 +
xen/arch/riscv/include/asm/asm.h | 76 ++
xen/arch/riscv/include/asm/atomic.h | 375 ++++++++
xen/arch/riscv/include/asm/bitops.h | 397 ++++++++
xen/arch/riscv/include/asm/bug.h | 67 ++
xen/arch/riscv/include/asm/byteorder.h | 16 +
xen/arch/riscv/include/asm/cache.h | 24 +
xen/arch/riscv/include/asm/cmpxchg.h | 382 ++++++++
xen/arch/riscv/include/asm/config.h | 149 ++-
xen/arch/riscv/include/asm/cpufeature.h | 68 ++
xen/arch/riscv/include/asm/csr.h | 81 ++
xen/arch/riscv/include/asm/current.h | 41 +
xen/arch/riscv/include/asm/debugger.h | 15 +
xen/arch/riscv/include/asm/delay.h | 28 +
xen/arch/riscv/include/asm/desc.h | 12 +
xen/arch/riscv/include/asm/device.h | 93 ++
xen/arch/riscv/include/asm/div64.h | 23 +
xen/arch/riscv/include/asm/domain.h | 80 ++
xen/arch/riscv/include/asm/early_printk.h | 10 +
xen/arch/riscv/include/asm/event.h | 42 +
xen/arch/riscv/include/asm/fence.h | 12 +
xen/arch/riscv/include/asm/flushtlb.h | 56 ++
xen/arch/riscv/include/asm/grant_table.h | 93 ++
xen/arch/riscv/include/asm/guest_access.h | 125 +++
xen/arch/riscv/include/asm/guest_atomics.h | 62 ++
xen/arch/riscv/include/asm/hardirq.h | 27 +
xen/arch/riscv/include/asm/hypercall.h | 12 +
xen/arch/riscv/include/asm/init.h | 42 +
xen/arch/riscv/include/asm/io.h | 283 ++++++
xen/arch/riscv/include/asm/iocap.h | 16 +
xen/arch/riscv/include/asm/iommu.h | 46 +
xen/arch/riscv/include/asm/iommu_fwspec.h | 68 ++
xen/arch/riscv/include/asm/irq.h | 62 ++
xen/arch/riscv/include/asm/mem_access.h | 35 +
xen/arch/riscv/include/asm/mm.h | 320 +++++++
xen/arch/riscv/include/asm/monitor.h | 65 ++
xen/arch/riscv/include/asm/nospec.h | 25 +
xen/arch/riscv/include/asm/numa.h | 41 +
xen/arch/riscv/include/asm/p2m.h | 307 +++++++
xen/arch/riscv/include/asm/page-bits.h | 14 +
xen/arch/riscv/include/asm/page.h | 319 +++++++
xen/arch/riscv/include/asm/paging.h | 16 +
xen/arch/riscv/include/asm/pci.h | 31 +
xen/arch/riscv/include/asm/percpu.h | 35 +
xen/arch/riscv/include/asm/processor.h | 176 ++++
xen/arch/riscv/include/asm/random.h | 9 +
xen/arch/riscv/include/asm/regs.h | 42 +
xen/arch/riscv/include/asm/riscv_encoding.h | 960 ++++++++++++++++++++
xen/arch/riscv/include/asm/sbi.h | 275 ++++++
xen/arch/riscv/include/asm/setup.h | 23 +
xen/arch/riscv/include/asm/smp.h | 69 ++
xen/arch/riscv/include/asm/softirq.h | 16 +
xen/arch/riscv/include/asm/spinlock.h | 13 +
xen/arch/riscv/include/asm/string.h | 28 +
xen/arch/riscv/include/asm/system.h | 98 ++
xen/arch/riscv/include/asm/time.h | 81 ++
xen/arch/riscv/include/asm/trace.h | 12 +
xen/arch/riscv/include/asm/traps.h | 30 +
xen/arch/riscv/include/asm/types.h | 73 ++
xen/arch/riscv/include/asm/vm_event.h | 63 ++
xen/arch/riscv/include/asm/xenoprof.h | 12 +
xen/arch/riscv/irq.c | 126 +++
xen/arch/riscv/lib/Makefile | 1 +
xen/arch/riscv/lib/find_next_bit.c | 285 ++++++
xen/arch/riscv/mm.c | 633 +++++++++++++
xen/arch/riscv/p2m.c | 97 ++
xen/arch/riscv/percpu.c | 84 ++
xen/arch/riscv/platforms/Kconfig | 31 +
xen/arch/riscv/riscv64/Makefile | 2 +-
xen/arch/riscv/riscv64/asm-offsets.c | 39 +
xen/arch/riscv/riscv64/head.S | 219 ++++-
xen/arch/riscv/sbi.c | 483 ++++++++++
xen/arch/riscv/setup.c | 67 ++
xen/arch/riscv/shutdown.c | 24 +
xen/arch/riscv/smp.c | 38 +
xen/arch/riscv/smpboot.c | 78 ++
xen/arch/riscv/sysctl.c | 31 +
xen/arch/riscv/time.c | 69 ++
xen/arch/riscv/traps.c | 87 ++
xen/arch/riscv/vm_event.c | 51 ++
xen/arch/riscv/xen.lds.S | 274 ++++++
xen/include/public/arch-riscv.h | 182 ++++
xen/include/public/arch-riscv/hvm/save.h | 39 +
xen/include/public/hvm/save.h | 2 +
xen/include/public/io/protocols.h | 3 +
xen/include/public/pmu.h | 2 +
xen/include/public/xen.h | 2 +
96 files changed, 9536 insertions(+), 8 deletions(-)
create mode 100644 xen/arch/riscv/delay.c
create mode 100644 xen/arch/riscv/domain.c
create mode 100644 xen/arch/riscv/domctl.c
create mode 100644 xen/arch/riscv/early_printk.c
create mode 100644 xen/arch/riscv/guestcopy.c
create mode 100644 xen/arch/riscv/include/asm/acpi.h
create mode 100644 xen/arch/riscv/include/asm/altp2m.h
create mode 100644 xen/arch/riscv/include/asm/asm.h
create mode 100644 xen/arch/riscv/include/asm/atomic.h
create mode 100644 xen/arch/riscv/include/asm/bitops.h
create mode 100644 xen/arch/riscv/include/asm/bug.h
create mode 100644 xen/arch/riscv/include/asm/byteorder.h
create mode 100644 xen/arch/riscv/include/asm/cache.h
create mode 100644 xen/arch/riscv/include/asm/cmpxchg.h
create mode 100644 xen/arch/riscv/include/asm/cpufeature.h
create mode 100644 xen/arch/riscv/include/asm/csr.h
create mode 100644 xen/arch/riscv/include/asm/current.h
create mode 100644 xen/arch/riscv/include/asm/debugger.h
create mode 100644 xen/arch/riscv/include/asm/delay.h
create mode 100644 xen/arch/riscv/include/asm/desc.h
create mode 100644 xen/arch/riscv/include/asm/device.h
create mode 100644 xen/arch/riscv/include/asm/div64.h
create mode 100644 xen/arch/riscv/include/asm/domain.h
create mode 100644 xen/arch/riscv/include/asm/early_printk.h
create mode 100644 xen/arch/riscv/include/asm/event.h
create mode 100644 xen/arch/riscv/include/asm/fence.h
create mode 100644 xen/arch/riscv/include/asm/flushtlb.h
create mode 100644 xen/arch/riscv/include/asm/grant_table.h
create mode 100644 xen/arch/riscv/include/asm/guest_access.h
create mode 100644 xen/arch/riscv/include/asm/guest_atomics.h
create mode 100644 xen/arch/riscv/include/asm/hardirq.h
create mode 100644 xen/arch/riscv/include/asm/hypercall.h
create mode 100644 xen/arch/riscv/include/asm/init.h
create mode 100644 xen/arch/riscv/include/asm/io.h
create mode 100644 xen/arch/riscv/include/asm/iocap.h
create mode 100644 xen/arch/riscv/include/asm/iommu.h
create mode 100644 xen/arch/riscv/include/asm/iommu_fwspec.h
create mode 100644 xen/arch/riscv/include/asm/irq.h
create mode 100644 xen/arch/riscv/include/asm/mem_access.h
create mode 100644 xen/arch/riscv/include/asm/mm.h
create mode 100644 xen/arch/riscv/include/asm/monitor.h
create mode 100644 xen/arch/riscv/include/asm/nospec.h
create mode 100644 xen/arch/riscv/include/asm/numa.h
create mode 100644 xen/arch/riscv/include/asm/p2m.h
create mode 100644 xen/arch/riscv/include/asm/page-bits.h
create mode 100644 xen/arch/riscv/include/asm/page.h
create mode 100644 xen/arch/riscv/include/asm/paging.h
create mode 100644 xen/arch/riscv/include/asm/pci.h
create mode 100644 xen/arch/riscv/include/asm/percpu.h
create mode 100644 xen/arch/riscv/include/asm/processor.h
create mode 100644 xen/arch/riscv/include/asm/random.h
create mode 100644 xen/arch/riscv/include/asm/regs.h
create mode 100644 xen/arch/riscv/include/asm/riscv_encoding.h
create mode 100644 xen/arch/riscv/include/asm/sbi.h
create mode 100644 xen/arch/riscv/include/asm/setup.h
create mode 100644 xen/arch/riscv/include/asm/smp.h
create mode 100644 xen/arch/riscv/include/asm/softirq.h
create mode 100644 xen/arch/riscv/include/asm/spinlock.h
create mode 100644 xen/arch/riscv/include/asm/string.h
create mode 100644 xen/arch/riscv/include/asm/system.h
create mode 100644 xen/arch/riscv/include/asm/time.h
create mode 100644 xen/arch/riscv/include/asm/trace.h
create mode 100644 xen/arch/riscv/include/asm/traps.h
create mode 100644 xen/arch/riscv/include/asm/types.h
create mode 100644 xen/arch/riscv/include/asm/vm_event.h
create mode 100644 xen/arch/riscv/include/asm/xenoprof.h
create mode 100644 xen/arch/riscv/irq.c
create mode 100644 xen/arch/riscv/lib/Makefile
create mode 100644 xen/arch/riscv/lib/find_next_bit.c
create mode 100644 xen/arch/riscv/mm.c
create mode 100644 xen/arch/riscv/p2m.c
create mode 100644 xen/arch/riscv/percpu.c
create mode 100644 xen/arch/riscv/platforms/Kconfig
create mode 100644 xen/arch/riscv/sbi.c
create mode 100644 xen/arch/riscv/setup.c
create mode 100644 xen/arch/riscv/shutdown.c
create mode 100644 xen/arch/riscv/smp.c
create mode 100644 xen/arch/riscv/smpboot.c
create mode 100644 xen/arch/riscv/sysctl.c
create mode 100644 xen/arch/riscv/time.c
create mode 100644 xen/arch/riscv/traps.c
create mode 100644 xen/arch/riscv/vm_event.c
create mode 100644 xen/arch/riscv/xen.lds.S
create mode 100644 xen/include/public/arch-riscv.h
create mode 100644 xen/include/public/arch-riscv/hvm/save.h
--
2.30.2