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/remus-netbuf-setup
|
||||||
F: tools/hotplug/Linux/block-drbd-probe
|
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
|
RTDS SCHEDULER
|
||||||
M: Dario Faggioli <dfaggioli@suse.com>
|
M: Dario Faggioli <dfaggioli@suse.com>
|
||||||
M: Meng Xu <mengxu@cis.upenn.edu>
|
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
|
EFI_MOUNTPOINT ?= $(BOOT_DIR)/efi
|
||||||
|
|
||||||
ARCH=$(XEN_TARGET_ARCH)
|
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
|
# Don't break if the build process wasn't called from the top level
|
||||||
# we need XEN_TARGET_ARCH to generate the proper config
|
# we need XEN_TARGET_ARCH to generate the proper config
|
||||||
@@ -35,7 +37,8 @@ include $(XEN_ROOT)/Config.mk
|
|||||||
# Set ARCH/SUBARCH appropriately.
|
# Set ARCH/SUBARCH appropriately.
|
||||||
export TARGET_SUBARCH := $(XEN_TARGET_ARCH)
|
export TARGET_SUBARCH := $(XEN_TARGET_ARCH)
|
||||||
export TARGET_ARCH := $(shell echo $(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
|
# Allow someone to change their config file
|
||||||
export KCONFIG_CONFIG ?= .config
|
export KCONFIG_CONFIG ?= .config
|
||||||
@@ -335,6 +338,7 @@ _clean: delete-unfresh-files
|
|||||||
$(MAKE) $(clean) xsm
|
$(MAKE) $(clean) xsm
|
||||||
$(MAKE) $(clean) crypto
|
$(MAKE) $(clean) crypto
|
||||||
$(MAKE) $(clean) arch/arm
|
$(MAKE) $(clean) arch/arm
|
||||||
|
$(MAKE) $(clean) arch/riscv
|
||||||
$(MAKE) $(clean) arch/x86
|
$(MAKE) $(clean) arch/x86
|
||||||
$(MAKE) $(clean) test
|
$(MAKE) $(clean) test
|
||||||
$(MAKE) -f $(BASEDIR)/tools/kconfig/Makefile.kconfig ARCH=$(ARCH) SRCARCH=$(SRCARCH) clean
|
$(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:
|
||||||
|
*/
|
||||||