[PATCH 10/13] lib: utils: Disable appropriate IMSIC DT nodes in fdt_fixups()
Anup Patel
anup at brainfault.org
Wed Feb 9 04:46:17 PST 2022
On Tue, Feb 8, 2022 at 2:43 PM Atish Patra <atishp at atishpatra.org> wrote:
>
> On Tue, Jan 4, 2022 at 2:13 AM Anup Patel <apatel at ventanamicro.com> wrote:
> >
> > We should disable IMSIC DT nodes in fdt_fixups() which are not
> > accessible to the next booting stage based on currently assigned
> > domain.
> >
> > Signed-off-by: Anup Patel <anup.patel at wdc.com>
> > Signed-off-by: Anup Patel <apatel at ventanamicro.com>
> > ---
> > include/sbi_utils/fdt/fdt_fixup.h | 17 ++++++++++++++--
> > lib/utils/fdt/fdt_fixup.c | 32 +++++++++++++++++++++++++++++--
> > 2 files changed, 45 insertions(+), 4 deletions(-)
> >
> > diff --git a/include/sbi_utils/fdt/fdt_fixup.h b/include/sbi_utils/fdt/fdt_fixup.h
> > index c38e5d9..77575bb 100644
> > --- a/include/sbi_utils/fdt/fdt_fixup.h
> > +++ b/include/sbi_utils/fdt/fdt_fixup.h
> > @@ -21,6 +21,18 @@
> > */
> > void fdt_cpu_fixup(void *fdt);
> >
> > +/**
> > + * Fix up the IMSIC nodes in the device tree
> > + *
> > + * This routine disables IMSIC nodes which are not accessible to the next
> > + * booting stage based on currently assigned domain.
> > + *
> > + * It is recommended that platform codes call this helper in their final_init()
> > + *
> > + * @param fdt: device tree blob
> > + */
> > +void fdt_imsic_fixup(void *fdt);
> > +
> > /**
> > * Fix up the PLIC node in the device tree
> > *
> > @@ -64,8 +76,9 @@ int fdt_reserved_memory_nomap_fixup(void *fdt);
> > * General device tree fix-up
> > *
> > * This routine do all required device tree fix-ups for a typical platform.
> > - * It fixes up the PLIC node and the reserved memory node in the device tree
> > - * by calling the corresponding helper routines to accomplish the task.
> > + * It fixes up the PLIC node, IMSIC nodes, and the reserved memory node in
> > + * the device tree by calling the corresponding helper routines to accomplish
> > + * the task.
> > *
> > * It is recommended that platform codes call this helper in their final_init()
> > *
> > diff --git a/lib/utils/fdt/fdt_fixup.c b/lib/utils/fdt/fdt_fixup.c
> > index ac01ba3..c2460b8 100644
> > --- a/lib/utils/fdt/fdt_fixup.c
> > +++ b/lib/utils/fdt/fdt_fixup.c
> > @@ -52,6 +52,34 @@ void fdt_cpu_fixup(void *fdt)
> > }
> > }
> >
> > +static void fdt_domain_based_fixup_one(void *fdt, int nodeoff)
> > +{
> > + int rc;
> > + uint64_t reg_addr, reg_size;
> > + struct sbi_domain *dom = sbi_domain_thishart_ptr();
> > +
> > + rc = fdt_get_node_addr_size(fdt, nodeoff, 0, ®_addr, ®_size);
> > + if (rc < 0 || !reg_addr || !reg_size)
> > + return;
> > +
> > + if (!sbi_domain_check_addr(dom, reg_addr, dom->next_mode,
> > + SBI_DOMAIN_READ | SBI_DOMAIN_WRITE)) {
> > + rc = fdt_open_into(fdt, fdt, fdt_totalsize(fdt) + 32);
> > + if (rc < 0)
> > + return;
> > + fdt_setprop_string(fdt, nodeoff, "status", "disabled");
> > + }
> > +}
> > +
>
> This should be in a separate patch as it is a generic function and
> doesn't match the commit text.
This is a static function only used here. If it were a public function
then I would have moved it to a separate patch.
Regards,
Anup
>
> > +void fdt_imsic_fixup(void *fdt)
> > +{
> > + int noff = 0;
> > +
> > + while ((noff = fdt_node_offset_by_compatible(fdt, noff,
> > + "riscv,imsics")) >= 0)
> > + fdt_domain_based_fixup_one(fdt, noff);
> > +}
> > +
> > void fdt_plic_fixup(void *fdt)
> > {
> > u32 *cells;
> > @@ -261,10 +289,10 @@ int fdt_reserved_memory_nomap_fixup(void *fdt)
> >
> > void fdt_fixups(void *fdt)
> > {
> > + fdt_imsic_fixup(fdt);
> > +
> > fdt_plic_fixup(fdt);
> >
> > fdt_reserved_memory_fixup(fdt);
> > fdt_pmu_fixup(fdt);
> > }
> > -
> > -
> > --
> > 2.25.1
> >
>
> Otherwise, LGTM.
>
> Reviewed-by: Atish Patra <atishp at rivosinc.com>
>
>
> --
> Regards,
> Atish
More information about the opensbi
mailing list