[kvm-unit-tests PATCH v11 3/8] riscv: Use asm-offsets to generate SBI_EXT_HSM values
Andrew Jones
andrew.jones at linux.dev
Thu Mar 20 06:36:26 PDT 2025
On Mon, Mar 17, 2025 at 05:46:48PM +0100, Clément Léger wrote:
> Replace hardcoded values with generated ones using sbi-asm-offset. This
> allows to directly use ASM_SBI_EXT_HSM and ASM_SBI_EXT_HSM_STOP in
> assembly.
>
> Signed-off-by: Clément Léger <cleger at rivosinc.com>
> Reviewed-by: Andrew Jones <andrew.jones at linux.dev>
> ---
> riscv/Makefile | 2 +-
> riscv/sbi-asm.S | 6 ++++--
> riscv/sbi-asm-offsets.c | 11 +++++++++++
> riscv/.gitignore | 1 +
> 4 files changed, 17 insertions(+), 3 deletions(-)
> create mode 100644 riscv/sbi-asm-offsets.c
> create mode 100644 riscv/.gitignore
>
> diff --git a/riscv/Makefile b/riscv/Makefile
> index ae9cf02a..02d2ac39 100644
> --- a/riscv/Makefile
> +++ b/riscv/Makefile
> @@ -87,7 +87,7 @@ CFLAGS += -ffreestanding
> CFLAGS += -O2
> CFLAGS += -I $(SRCDIR)/lib -I $(SRCDIR)/lib/libfdt -I lib -I $(SRCDIR)/riscv
>
> -asm-offsets = lib/riscv/asm-offsets.h
> +asm-offsets = lib/riscv/asm-offsets.h riscv/sbi-asm-offsets.h
> include $(SRCDIR)/scripts/asm-offsets.mak
>
> .PRECIOUS: %.aux.o
> diff --git a/riscv/sbi-asm.S b/riscv/sbi-asm.S
> index f4185496..51f46efd 100644
> --- a/riscv/sbi-asm.S
> +++ b/riscv/sbi-asm.S
> @@ -6,6 +6,8 @@
> */
> #include <asm/asm.h>
> #include <asm/csr.h>
> +#include <asm/asm-offsets.h>
> +#include <generated/sbi-asm-offsets.h>
Doing this causes sbi-asm.o to depend on generated files, so I had to add
the change below to the Makefile in order for 'make -j' to work.
Thanks,
drew
diff --git a/riscv/Makefile b/riscv/Makefile
index 02d2ac392f11..e4dba6772377 100644
--- a/riscv/Makefile
+++ b/riscv/Makefile
@@ -19,6 +19,8 @@ all: $(tests)
$(TEST_DIR)/sbi-deps = $(TEST_DIR)/sbi-asm.o $(TEST_DIR)/sbi-fwft.o
+all_deps += $($(TEST_DIR)/sbi-deps)
+
# When built for EFI sieve needs extra memory, run with e.g. '-m 256' on QEMU
$(TEST_DIR)/sieve.$(exe): AUXFLAGS = 0x1
@@ -134,7 +136,7 @@ else
endif
generated-files = $(asm-offsets)
-$(tests:.$(exe)=.o) $(cstart.o) $(cflatobjs): $(generated-files)
+$(tests:.$(exe)=.o) $(cstart.o) $(cflatobjs) $(all_deps): $(generated-files)
arch_clean: asm_offsets_clean
$(RM) $(TEST_DIR)/*.{o,flat,elf,so,efi,debug} \
>
> #include "sbi-tests.h"
>
> @@ -57,8 +59,8 @@ sbi_hsm_check:
> 7: lb t0, 0(t1)
> pause
> beqz t0, 7b
> - li a7, 0x48534d /* SBI_EXT_HSM */
> - li a6, 1 /* SBI_EXT_HSM_HART_STOP */
> + li a7, ASM_SBI_EXT_HSM
> + li a6, ASM_SBI_EXT_HSM_HART_STOP
> ecall
> 8: pause
> j 8b
> diff --git a/riscv/sbi-asm-offsets.c b/riscv/sbi-asm-offsets.c
> new file mode 100644
> index 00000000..bd37b6a2
> --- /dev/null
> +++ b/riscv/sbi-asm-offsets.c
> @@ -0,0 +1,11 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +#include <kbuild.h>
> +#include <asm/sbi.h>
> +
> +int main(void)
> +{
> + DEFINE(ASM_SBI_EXT_HSM, SBI_EXT_HSM);
> + DEFINE(ASM_SBI_EXT_HSM_HART_STOP, SBI_EXT_HSM_HART_STOP);
> +
> + return 0;
> +}
> diff --git a/riscv/.gitignore b/riscv/.gitignore
> new file mode 100644
> index 00000000..0a8c5a36
> --- /dev/null
> +++ b/riscv/.gitignore
> @@ -0,0 +1 @@
> +/*-asm-offsets.[hs]
> --
> 2.47.2
>
More information about the kvm-riscv
mailing list