grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] arm64: make sure fdt has #address-cells and #size-cells prop


From: Mark Salter
Subject: Re: [PATCH] arm64: make sure fdt has #address-cells and #size-cells properties
Date: Thu, 31 Oct 2019 13:24:01 -0400
User-agent: Evolution 3.32.4 (3.32.4-1.fc30)

On Thu, 2019-10-31 at 16:59 +0100, Javier Martinez Canillas wrote:
> On 10/31/19 12:56 PM, Vladimir 'phcoder' Serbinenko wrote:
> > This patch looks incomplete. What if "chosen" is there but does not contain
> > the relevant fields?
> > 
> 
> My understanding is that if there's a chosen node already defined in the
> Device Tree but without #address-cells and #size-cells properties, then
> is a malformed DT and is not up to GRUB to correct it.

Right. IIRC, this was the case where firmware only has ACPI tables and grub
has to create a DT with just a chosen node.

> 
> But if GRUB is adding a child node as is the case of the chosen node, then
> is up to GRUB to make sure that there are #address-cells and #size-cells
> properties also defined so the child nodes are addressed correctly.
> 
> But maybe I'm wrong on this, so I'll let Mark comment since he authored
> the patch and knows better what's the problem that's fixing.
> 
> > On Thu, 31 Oct 2019, 11:39 Javier Martinez Canillas, <address@hidden>
> > wrote:
> > 
> > > From: Mark Salter <address@hidden>
> > > 
> > > Recent upstream changes to kexec-tools relies on #address-cells
> > > and #size-cells properties in the FDT. If grub2 needs to create
> > > a chosen node, it is likely because firmware did not provide one.
> > > In that case, set #address-cells and #size-cells properties to
> > > make sure they exist.
> > > 
> > > Signed-off-by: Mark Salter <address@hidden>
> > > Signed-off-by: Javier Martinez Canillas <address@hidden>
> > > ---
> > > 
> > >  grub-core/loader/arm64/linux.c | 16 +++++++++++++++-
> > >  1 file changed, 15 insertions(+), 1 deletion(-)
> > > 
> > > diff --git grub-core/loader/arm64/linux.c grub-core/loader/arm64/linux.c
> > > index ef3e9f9444c..24d73732d89 100644
> > > --- grub-core/loader/arm64/linux.c
> > > +++ grub-core/loader/arm64/linux.c
> > > @@ -78,7 +78,21 @@ finalize_params_linux (void)
> > > 
> > >    node = grub_fdt_find_subnode (fdt, 0, "chosen");
> > >    if (node < 0)
> > > -    node = grub_fdt_add_subnode (fdt, 0, "chosen");
> > > +    {
> > > +      /*
> > > +       * If we have to create a chosen node, Make sure we
> > > +       * have #address-cells and #size-cells properties.
> > > +       */
> > > +      retval = grub_fdt_set_prop32(fdt, 0, "#address-cells", 2);
> > > +      if (retval)
> > > +        goto failure;
> > > +
> > > +      retval = grub_fdt_set_prop32(fdt, 0, "#size-cells", 2);
> > > +      if (retval)
> > > +        goto failure;
> > > +
> > > +      node = grub_fdt_add_subnode (fdt, 0, "chosen");
> > > +    }
> > > 
> > >    if (node < 1)
> > >      goto failure;
> > > --
> > > 2.21.0
> > > 
> > > 
>  
> Best regards,





reply via email to

[Prev in Thread] Current Thread [Next in Thread]