[PATCH 2/2] cmd/sbi: add missing SBI information

Sean Anderson seanga2 at gmail.com
Tue Jul 20 03:11:34 CEST 2021


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.schuchardt at 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?

> +					/* 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)
> +		printf("  Vendor ID %lx\n", ret);

perhaps %0.8lx? And should we decode the JEDEC id?

> +	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
> 



More information about the U-Boot mailing list