[PATCH v2 5/9] lib: sbi_hart: add WID protection mechanism

Yu-Chien Peter Lin peter.lin at sifive.com
Fri Oct 23 01:11:56 PDT 2026


On Fri, Oct 16, 2026 at 06:33:17PM +0000, Radim Krcmar wrote:
> 2026-10-16T17:24:07+00:00, Radim Krcmar <rkrcmar at qti.qualcomm.com>:
> > 2026-08-17T17:04:59+08:00, Yu-Chien Peter Lin <peter.lin at sifive.com>:
> >> +static struct sbi_hart_protection wid_protection = {
> >> +	.name		= "wid",
> >> +	.rating		= 100,
> >> +	.type		= SBI_HART_PROTECTION_TYPE_ID,
> >> +	.configure	= sbi_hart_worlds_configure,
> >> +	.unconfigure	= NULL
> >> +};
> >> +
> >> +int sbi_hart_worlds_init(struct sbi_scratch *scratch)
> >> +{
> >> +	if (!sbi_hart_has_extension(scratch, SBI_HART_EXT_SMLWID))
> >> +		return 0;
> >> +
> >> +	return sbi_hart_protection_register(&wid_protection);
> >
> > All that I said above applies to domain intialization.
> > The actual code during context switch should be much simpler:
> >
> >   {
> >     csr_write(CSR_MLWID, dom->wid);
> >     if (sbi_hart_has_extension(scratch, SBI_HART_EXT_SMWIDDELEG))
> >       csr_write(CSR_MWIDDELEG, dom->widdeleg);
> >   }
> >
> > Or only
> >
> >   {
> >     csr_write(CSR_MLWID, dom->wid);
> >   }
> >
> > since we have to touch mwiddeleg when switching slwid anyway and the
> > unconfigure/configure is not good.
> > Alternatively, we can add a `switch` function to sbi_hart_protection and
> > move the slwid switching here.
> 
> Taking a step back, what is actually the benefit of fitting WID into
> sbi_hart_protection instead of simple domain state?
> 
> Thanks.

I'd like to keep this inside the sbi_hart_protection layer mainly for
consistency with other protection mechanisms, rather than swapping
it as plain domain context.

Thanks,
Peter Lin



More information about the opensbi mailing list