[kvm-unit-tests PATCH v2] riscv: sbi: Improve spec version test
Andrew Jones
andrew.jones at linux.dev
Mon Nov 11 07:06:08 PST 2024
On Wed, Nov 06, 2024 at 09:39:27AM +0100, Andrew Jones wrote:
> SBI spec version states that bit 31 must be zero and, when xlen
> is greater than 32, that bit 32 and higher must be zero. Check
> these bits are zero in the expected value to ensure we test
> appropriately.
>
> Signed-off-by: Andrew Jones <andrew.jones at linux.dev>
> ---
> lib/riscv/sbi.c | 2 +-
> riscv/sbi.c | 13 +++++++++----
> 2 files changed, 10 insertions(+), 5 deletions(-)
>
> diff --git a/lib/riscv/sbi.c b/lib/riscv/sbi.c
> index 8972e765fea2..f25bde169490 100644
> --- a/lib/riscv/sbi.c
> +++ b/lib/riscv/sbi.c
> @@ -107,7 +107,7 @@ long sbi_probe(int ext)
> struct sbiret ret;
>
> ret = sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_GET_SPEC_VERSION, 0, 0, 0, 0, 0, 0);
> - assert(!ret.error && ret.value >= 2);
> + assert(!ret.error && (ret.value & 0x7ffffffful) >= 2);
>
> ret = sbi_ecall(SBI_EXT_BASE, SBI_EXT_BASE_PROBE_EXT, ext, 0, 0, 0, 0, 0);
> assert(!ret.error);
> diff --git a/riscv/sbi.c b/riscv/sbi.c
> index 52434e0ca86f..c081953c877c 100644
> --- a/riscv/sbi.c
> +++ b/riscv/sbi.c
> @@ -105,18 +105,23 @@ static void check_base(void)
> report_prefix_push("base");
>
> ret = sbi_base(SBI_EXT_BASE_GET_SPEC_VERSION, 0);
> - if (ret.error || ret.value < 2) {
> - report_skip("SBI spec version 0.2 or higher required");
> - return;
> - }
>
> report_prefix_push("spec_version");
> if (env_or_skip("SBI_SPEC_VERSION")) {
> expected = (long)strtoul(getenv("SBI_SPEC_VERSION"), NULL, 0);
> + assert_msg(!(expected & BIT(31)), "SBI spec version bit 31 must be zero");
> + assert_msg(__riscv_xlen == 32 || !(expected >> 32), "SBI spec version bits greater than 31 must be zero");
> gen_report(&ret, 0, expected);
> }
> report_prefix_pop();
>
> + ret.value &= 0x7ffffffful;
> +
> + if (ret.error || ret.value < 2) {
> + report_skip("SBI spec version 0.2 or higher required");
> + return;
> + }
> +
> report_prefix_push("impl_id");
> if (env_or_skip("SBI_IMPL_ID")) {
> expected = (long)strtoul(getenv("SBI_IMPL_ID"), NULL, 0);
> --
> 2.47.0
>
Merged through riscv/sbi.
Thanks,
drew
More information about the kvm-riscv
mailing list