Re: [PATCH] lib: sbi: Drop fw_rw_offset alignment requirement for single fw region
Anup Patel <[email protected]> Sat, 13 Jun 2026 15:33:19 +0530
| Newsgroups | org.infradead.lists.opensbi |
|---|---|
| Message-ID | <CAK9=C2XFeNUFXYJcWzGmtG+XM993cw206xCuPTPU2m_0dpHZ7g@mail.gmail.com> |
On Sat, May 23, 2026 at 4:57 AM Anirudh Srinivasan <[email protected]> wrote: > > From: Nicholas Piggin <[email protected]> > > In a single fw region scheme, there is no separate PMP created for RW > memory. The checks that opensbi does for the alignment between fw_start > and fw_rw_start (using fw_rw_offset) and the power of 2 check for > fw_rw_offset are no longer necessary. > > Update sbi_domain_init so that these checks are only done in the non > single fw region scheme. > > Signed-off-by: Nicholas Piggin <[email protected]> > Co-developed-by: Anirudh Srinivasan <[email protected]> > Signed-off-by: Anirudh Srinivasan <[email protected]> LGTM. Reviewed-by: Anup Patel <[email protected]> Applied this patch to the riscv/opensbi repo. Thanks, Anup > --- > lib/sbi/sbi_domain.c | 27 +++++++++++++++------------ > 1 file changed, 15 insertions(+), 12 deletions(-) > > diff --git a/lib/sbi/sbi_domain.c b/lib/sbi/sbi_domain.c > index 4f458ac0..296ee81b 100644 > --- a/lib/sbi/sbi_domain.c > +++ b/lib/sbi/sbi_domain.c > @@ -871,20 +871,23 @@ int sbi_domain_init(struct sbi_scratch *scratch, u32 cold_hartid) > struct sbi_hartmask *root_hmask; > struct sbi_domain_memregion *root_memregs; > int root_memregs_count = 0; > + const struct sbi_platform *plat = sbi_platform_ptr(scratch); > + bool fw_single_region = sbi_platform_single_fw_region(plat); > > SBI_INIT_LIST_HEAD(&domain_list); > > - if (scratch->fw_rw_offset == 0 || > - (scratch->fw_rw_offset & (scratch->fw_rw_offset - 1)) != 0) { > - sbi_printf("%s: fw_rw_offset is not a power of 2 (0x%lx)\n", > - __func__, scratch->fw_rw_offset); > - return SBI_EINVAL; > - } > - > - if ((scratch->fw_start & (scratch->fw_rw_offset - 1)) != 0) { > - sbi_printf("%s: fw_start and fw_rw_offset not aligned\n", > - __func__); > - return SBI_EINVAL; > + if (!fw_single_region) { > + if (scratch->fw_rw_offset == 0 || > + (scratch->fw_rw_offset & (scratch->fw_rw_offset - 1)) != 0) { > + sbi_printf("%s: fw_rw_offset is not a power of 2 (0x%lx)\n", > + __func__, scratch->fw_rw_offset); > + return SBI_EINVAL; > + } > + if ((scratch->fw_start & (scratch->fw_rw_offset - 1)) != 0) { > + sbi_printf("%s: fw_start and fw_rw_offset not aligned\n", > + __func__); > + return SBI_EINVAL; > + } > } > > domain_hart_ptr_offset = sbi_scratch_alloc_type_offset(void *); > @@ -913,7 +916,7 @@ int sbi_domain_init(struct sbi_scratch *scratch, u32 cold_hartid) > root.possible_harts = root_hmask; > > /* Root domain firmware memory region */ > - if (sbi_platform_single_fw_region(sbi_platform_ptr(scratch))) { > + if (fw_single_region) { > sbi_domain_memregion_init(scratch->fw_start, scratch->fw_size, > (SBI_DOMAIN_MEMREGION_M_READABLE | > SBI_DOMAIN_MEMREGION_M_WRITABLE | > > --- > base-commit: e7fa66c2160ec139de1853a00f669c09320a9256 > change-id: 20260522-fw_rw_start_alignment-44eaac884823 > > Best regards, > -- > Anirudh Srinivasan <[email protected]> > > > -- > opensbi mailing list > [email protected] > http://lists.infradead.org/mailman/listinfo/opensbi -- opensbi mailing list [email protected] http://lists.infradead.org/mailman/listinfo/opensbi