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:
Oleksii Kurochko authored and Jan Beulich committed 2024-04-04 12:00:17 +02:00
1 parent 7b02b505bb
commit 1e6cd4155d
2 files changed
+29 -2

No files matched your search

+16
View File
@@ -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
View File
@@ -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
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.