mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen: add files needed for minimal riscv build
Add arch-specific makefiles and configs needed to build for riscv. Also add a minimal head.S that is a simple infinite loop. head.o can be built with $ make XEN_TARGET_ARCH=riscv64 SUBSYSTEMS=xen -C xen tiny64_defconfig $ make XEN_TARGET_ARCH=riscv64 SUBSYSTEMS=xen -C xen TARGET=riscv64/head.o No other TARGET is supported at the moment. Signed-off-by: Connor Davis <connojdavis@gmail.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Acked-by: Bobby Eshleman <bobbyeshleman@gmail.com>
This commit is contained in:
1 parent
5151ce8ba1
commit
f5035d480f
12 files changed
+150
-2
No files matched your search
@@ -456,6 +456,15 @@ F: tools/libs/light/libxl_nonetbuffer.c
|
||||
F: tools/hotplug/Linux/remus-netbuf-setup
|
||||
F: tools/hotplug/Linux/block-drbd-probe
|
||||
|
||||
RISCV
|
||||
M: Bob Eshleman <bobbyeshleman@gmail.com>
|
||||
M: Alistair Francis <alistair.francis@wdc.com>
|
||||
R: Connor Davis <connojdavis@gmail.com>
|
||||
S: Supported
|
||||
F: config/riscv64.mk
|
||||
F: xen/arch/riscv/
|
||||
F: xen/include/asm-riscv/
|
||||
|
||||
RTDS SCHEDULER
|
||||
M: Dario Faggioli <dfaggioli@suse.com>
|
||||
M: Meng Xu <mengxu@cis.upenn.edu>
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
CONFIG_RISCV := y
|
||||
CONFIG_RISCV_64 := y
|
||||
CONFIG_RISCV_$(XEN_OS) := y
|
||||
|
||||
CONFIG_XEN_INSTALL_SUFFIX :=
|
||||
+6
-2
@@ -26,7 +26,9 @@ MAKEFLAGS += -rR
|
||||
EFI_MOUNTPOINT ?= $(BOOT_DIR)/efi
|
||||
|
||||
ARCH=$(XEN_TARGET_ARCH)
|
||||
SRCARCH=$(shell echo $(ARCH) | sed -e 's/x86.*/x86/' -e s'/arm\(32\|64\)/arm/g')
|
||||
SRCARCH=$(shell echo $(ARCH) | \
|
||||
sed -e 's/x86.*/x86/' -e s'/arm\(32\|64\)/arm/g' \
|
||||
-e s'/riscv.*/riscv/g')
|
||||
|
||||
# Don't break if the build process wasn't called from the top level
|
||||
# we need XEN_TARGET_ARCH to generate the proper config
|
||||
@@ -35,7 +37,8 @@ include $(XEN_ROOT)/Config.mk
|
||||
# Set ARCH/SUBARCH appropriately.
|
||||
export TARGET_SUBARCH := $(XEN_TARGET_ARCH)
|
||||
export TARGET_ARCH := $(shell echo $(XEN_TARGET_ARCH) | \
|
||||
sed -e 's/x86.*/x86/' -e s'/arm\(32\|64\)/arm/g')
|
||||
sed -e 's/x86.*/x86/' -e s'/arm\(32\|64\)/arm/g' \
|
||||
-e s'/riscv.*/riscv/g')
|
||||
|
||||
# Allow someone to change their config file
|
||||
export KCONFIG_CONFIG ?= .config
|
||||
@@ -335,6 +338,7 @@ _clean: delete-unfresh-files
|
||||
$(MAKE) $(clean) xsm
|
||||
$(MAKE) $(clean) crypto
|
||||
$(MAKE) $(clean) arch/arm
|
||||
$(MAKE) $(clean) arch/riscv
|
||||
$(MAKE) $(clean) arch/x86
|
||||
$(MAKE) $(clean) test
|
||||
$(MAKE) -f $(BASEDIR)/tools/kconfig/Makefile.kconfig ARCH=$(ARCH) SRCARCH=$(SRCARCH) clean
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
config RISCV
|
||||
def_bool y
|
||||
|
||||
config RISCV_64
|
||||
def_bool y
|
||||
select 64BIT
|
||||
|
||||
config ARCH_DEFCONFIG
|
||||
string
|
||||
default "arch/riscv/configs/tiny64_defconfig"
|
||||
|
||||
menu "Architecture Features"
|
||||
|
||||
source "arch/Kconfig"
|
||||
|
||||
endmenu
|
||||
|
||||
menu "ISA Selection"
|
||||
|
||||
choice
|
||||
prompt "Base ISA"
|
||||
default RISCV_ISA_RV64IMA if RISCV_64
|
||||
help
|
||||
This selects the base ISA extensions that Xen will target.
|
||||
|
||||
config RISCV_ISA_RV64IMA
|
||||
bool "RV64IMA"
|
||||
help
|
||||
Use the RV64I base ISA, plus the "M" and "A" extensions
|
||||
for integer multiply/divide and atomic instructions, respectively.
|
||||
|
||||
endchoice
|
||||
|
||||
config RISCV_ISA_C
|
||||
bool "Compressed extension"
|
||||
default y
|
||||
help
|
||||
Add "C" to the ISA subsets that the toolchain is allowed to
|
||||
emit when building Xen, which results in compressed instructions
|
||||
in the Xen binary.
|
||||
|
||||
If unsure, say Y.
|
||||
|
||||
endmenu
|
||||
|
||||
source "common/Kconfig"
|
||||
|
||||
source "drivers/Kconfig"
|
||||
Whitespace-only changes.
@@ -0,0 +1,2 @@
|
||||
.PHONY: include
|
||||
include:
|
||||
Whitespace-only changes.
@@ -0,0 +1,14 @@
|
||||
########################################
|
||||
# RISCV-specific definitions
|
||||
|
||||
CFLAGS-$(CONFIG_RISCV_64) += -mabi=lp64
|
||||
|
||||
riscv-march-$(CONFIG_RISCV_ISA_RV64IMA) := rv64ima
|
||||
riscv-march-$(CONFIG_RISCV_ISA_C) := $(riscv-march-y)c
|
||||
|
||||
# Note that -mcmodel=medany is used so that Xen can be mapped
|
||||
# into the upper half _or_ the lower half of the address space.
|
||||
# -mcmodel=medlow would force Xen into the lower half.
|
||||
|
||||
CFLAGS += -march=$(riscv-march-y) -mstrict-align -mcmodel=medany
|
||||
CFLAGS += -I$(BASEDIR)/include
|
||||
@@ -0,0 +1,13 @@
|
||||
# CONFIG_SCHED_CREDIT is not set
|
||||
# CONFIG_SCHED_RTDS is not set
|
||||
# CONFIG_SCHED_NULL is not set
|
||||
# CONFIG_SCHED_ARINC653 is not set
|
||||
# CONFIG_TRACEBUFFER is not set
|
||||
# CONFIG_HYPFS is not set
|
||||
# CONFIG_GRANT_TABLE is not set
|
||||
# CONFIG_SPECULATIVE_HARDEN_ARRAY is not set
|
||||
|
||||
CONFIG_RISCV_64=y
|
||||
CONFIG_DEBUG=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_EXPERT=y
|
||||
Whitespace-only changes.
@@ -0,0 +1,6 @@
|
||||
#include <asm/config.h>
|
||||
|
||||
.text
|
||||
|
||||
ENTRY(start)
|
||||
j start
|
||||
@@ -0,0 +1,47 @@
|
||||
#ifndef __RISCV_CONFIG_H__
|
||||
#define __RISCV_CONFIG_H__
|
||||
|
||||
#if defined(CONFIG_RISCV_64)
|
||||
# define LONG_BYTEORDER 3
|
||||
# define ELFSIZE 64
|
||||
# define MAX_VIRT_CPUS 128u
|
||||
#else
|
||||
# error "Unsupported RISCV variant"
|
||||
#endif
|
||||
|
||||
#define BYTES_PER_LONG (1 << LONG_BYTEORDER)
|
||||
#define BITS_PER_LONG (BYTES_PER_LONG << 3)
|
||||
#define POINTER_ALIGN BYTES_PER_LONG
|
||||
|
||||
#define BITS_PER_LLONG 64
|
||||
|
||||
/* xen_ulong_t is always 64 bits */
|
||||
#define BITS_PER_XEN_ULONG 64
|
||||
|
||||
#define CONFIG_RISCV_L1_CACHE_SHIFT 6
|
||||
#define CONFIG_PAGEALLOC_MAX_ORDER 18
|
||||
#define CONFIG_DOMU_MAX_ORDER 9
|
||||
#define CONFIG_HWDOM_MAX_ORDER 10
|
||||
|
||||
#define OPT_CONSOLE_STR "dtuart"
|
||||
#define INVALID_VCPU_ID MAX_VIRT_CPUS
|
||||
|
||||
/* Linkage for RISCV */
|
||||
#ifdef __ASSEMBLY__
|
||||
#define ALIGN .align 2
|
||||
|
||||
#define ENTRY(name) \
|
||||
.globl name; \
|
||||
ALIGN; \
|
||||
name:
|
||||
#endif
|
||||
|
||||
#endif /* __RISCV_CONFIG_H__ */
|
||||
/*
|
||||
* Local variables:
|
||||
* mode: C
|
||||
* c-file-style: "BSD"
|
||||
* c-basic-offset: 4
|
||||
* indent-tabs-mode: nil
|
||||
* End:
|
||||
*/
|
||||