mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen/riscv: introduce extension support check by compiler
Currently, RISC-V requires two extensions: _zbb and _zihintpause. This patch introduces a compiler check to check if these extensions are supported. Additionally, it introduces the riscv/booting.txt file, which contains information about the extensions that should be supported by the platform. In the future, a feature will be introduced to check whether an extension is supported at runtime. However, this feature requires functionality for parsing device tree source (DTS), which is not yet available. Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com> Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
7b02b505bb
commit
1e6cd4155d
2 files changed
+29
-2
No files matched your search
@@ -0,0 +1,16 @@
|
||||
System requirements
|
||||
===================
|
||||
|
||||
The following extensions are expected to be supported by a system on which
|
||||
Xen is run:
|
||||
- Zbb:
|
||||
RISC-V doesn't have a CLZ instruction in the base ISA.
|
||||
As a consequence, __builtin_ffs() emits a library call to ffs() on GCC,
|
||||
or a de Bruijn sequence on Clang.
|
||||
Zbb extension adds a CLZ instruction, after which __builtin_ffs() emits
|
||||
a very simple sequence.
|
||||
The similar issue occurs with other __builtin_<bitop>, so it is needed to
|
||||
provide a generic version of bitops in RISC-V bitops.h
|
||||
- Zihintpause:
|
||||
On a system that doesn't have this extension, cpu_relax() should be
|
||||
implemented properly.
|
||||
+13
-2
@@ -3,16 +3,27 @@
|
||||
|
||||
$(call cc-options-add,CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS))
|
||||
|
||||
CFLAGS-$(CONFIG_RISCV_64) += -mabi=lp64
|
||||
riscv-abi-$(CONFIG_RISCV_32) := -mabi=ilp32
|
||||
riscv-abi-$(CONFIG_RISCV_64) := -mabi=lp64
|
||||
|
||||
riscv-march-$(CONFIG_RISCV_ISA_RV64G) := rv64g
|
||||
riscv-march-$(CONFIG_RISCV_ISA_C) := $(riscv-march-y)c
|
||||
|
||||
riscv-generic-flags := $(riscv-abi-y) -march=$(riscv-march-y)
|
||||
|
||||
zbb := $(call as-insn,$(CC) $(riscv-generic-flags)_zbb,"",_zbb)
|
||||
zihintpause := $(call as-insn, \
|
||||
$(CC) $(riscv-generic-flags)_zihintpause,"pause",_zihintpause)
|
||||
|
||||
extensions := $(zbb) $(zihintpause)
|
||||
|
||||
extensions := $(subst $(space),,$(extensions))
|
||||
|
||||
# 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 += $(riscv-generic-flags)$(extensions) -mstrict-align -mcmodel=medany
|
||||
|
||||
# TODO: Drop override when more of the build is working
|
||||
override ALL_OBJS-y = arch/$(SRCARCH)/built_in.o
|
||||
|
||||