Am 20. Juli 2021 03:11:34 MESZ schrieb Sean Anderson <sean...@gmail.com>: >On 7/19/21 4:28 PM, Heinrich Schuchardt wrote: >> Let the sbi command display: >> >> * SBI implementation version >> * machine vendor ID >> * machine architecture ID >> * machine implementation ID >> >> With this patch the output for the HiFive Unmatched looks like >> >> => sbi >> SBI 0.3 >> OpenSBI 0.9 >> Machine: >> Vendor ID 489 >> Architecture ID 8000000000000007 >> Implementation ID 20181004 >> Extensions: >> sbi_set_timer >> sbi_console_putchar >> sbi_console_getchar >> sbi_clear_ipi >> sbi_send_ipi >> sbi_remote_fence_i >> sbi_remote_sfence_vma >> sbi_remote_sfence_vma_asid >> sbi_shutdown >> SBI Base Functionality >> Timer Extension >> IPI Extension >> RFENCE Extension >> Hart State Management Extension >> System Reset Extension >> >> Signed-off-by: Heinrich Schuchardt ><heinrich.schucha...@canonical.com> >> --- >> cmd/riscv/sbi.c | 19 ++++++++++++++++++- >> 1 file changed, 18 insertions(+), 1 deletion(-) >> >> diff --git a/cmd/riscv/sbi.c b/cmd/riscv/sbi.c >> index 90c0811e14..c0db763ba7 100644 >> --- a/cmd/riscv/sbi.c >> +++ b/cmd/riscv/sbi.c >> @@ -59,13 +59,30 @@ static int do_sbi(struct cmd_tbl *cmdtp, int >flag, int argc, >> if (ret >= 0) { >> for (i = 0; i < ARRAY_SIZE(implementations); ++i) { >> if (ret == implementations[i].id) { >> - printf("%s\n", implementations[i].name); >> + printf("%s", implementations[i].name); >> + ret = sbi_get_impl_version(); >> + if (ret > 0) { > >Shouldn't this have to check to ensure that i == 1?
Other SBI implementions may also provide a version number. I did not analyze how the should be formatted. > >> + /* OpenSBI specific version encoding */ >> + printf(" %ld", ret >> 16); >> + printf(".%ld", ret & 0xffff); >> + } >> + printf("\n"); >> break; >> } >> } >> if (i == ARRAY_SIZE(implementations)) >> printf("Unknown implementation ID %ld\n", ret); >> } >> + printf("Machine:\n"); >> + ret = sbi_get_mvendorid(); >> + if (ret != -ENOTSUPP) Should we use an unsigned int as return value and 0 to indicate a missing implementation? mvendorid is only 32 bits wide. >> + printf(" Vendor ID %lx\n", ret); > >perhaps %0.8lx? And should we decode the JEDEC id? Leading zeros won't add any meaning here. Splitting into the 25 bit and 7 bit subfields could be reasonable. Decoding could result in up to 2^26 digits. I don't want to wait for all of these on my serial console. Best regards Heinrich > >> + ret = sbi_get_marchid(); >> + if (ret != -ENOTSUPP) >> + printf(" Architecture ID %lx\n", ret); >> + ret = sbi_get_mimpid(); >> + if (ret != -ENOTSUPP) >> + printf(" Implementation ID %lx\n", ret); >> printf("Extensions:\n"); >> for (i = 0; i < ARRAY_SIZE(extensions); ++i) { >> ret = sbi_probe_extension(extensions[i].id); >> -- >> 2.30.2 >>