[PATCH] dtoc: Check that a parent is not missing
Simon Glass
sjg at chromium.org
Sat Jul 31 23:12:58 CEST 2021
Hi Walter,
On Sun, 25 Jul 2021 at 18:43, Walter Lozano <wlozano at collabora.com> wrote:
>
> Hi Simon,
>
> Thanks for the patch, it will be a nice way to spot errors and avoid
> headaches!
>
> On 7/7/21 8:22 AM, Simon Glass wrote:
> > With of-platdata-inst we want to set up a reference to each devices'
> > parent device, if there is one. If we find that the device has a parent
> > (i.e. is not a root node) but it is not in the list of devices being
> > written, then we cannot create the reference.
> >
> > Report an error in this case, since it indicates that the parent node
> > is either missing a compatible string, is disabled, or perhaps does not
> > have any properties because it was not tagged for SPL.
> >
> > Signed-off-by: Simon Glass <sjg at chromium.org>
> > ---
> >
> > tools/dtoc/dtb_platdata.py | 9 ++++++++
> > tools/dtoc/test/dtoc_test_noparent.dts | 32 ++++++++++++++++++++++++++
> > tools/dtoc/test_dtoc.py | 10 ++++++++
> > 3 files changed, 51 insertions(+)
> > create mode 100644 tools/dtoc/test/dtoc_test_noparent.dts
> >
> > diff --git a/tools/dtoc/dtb_platdata.py b/tools/dtoc/dtb_platdata.py
> > index 2d42480a9a5..a951a5a2264 100644
> > --- a/tools/dtoc/dtb_platdata.py
> > +++ b/tools/dtoc/dtb_platdata.py
> > @@ -749,6 +749,15 @@ class DtbPlatdata():
> > break
> >
> > if node.parent and node.parent.parent:
> > + if node.parent not in self._valid_nodes:
> > + # This might indicate that the parent node is not in the
> > + # SPL/TPL devicetree but the child is. For example if we are
> > + # dealing with of-platdata in TPL, the parent has a
> > + # u-boot,dm-spl tag but the child has u-boot,dm-pre-reloc. In
> > + # this case the child node exists in TPL but the parent does
> > + # not.
> > + raise ValueError("Node '%s' requires parent node '%s' but it is not in the valid list" %
> > + (node.path, node.parent.path))
> > self.buf('\t.parent\t\t= DM_DEVICE_REF(%s),\n' %
> > node.parent.var_name)
> > if priv_name:
> > diff --git a/tools/dtoc/test/dtoc_test_noparent.dts b/tools/dtoc/test/dtoc_test_noparent.dts
> > new file mode 100644
> > index 00000000000..5a820301e72
> > --- /dev/null
> > +++ b/tools/dtoc/test/dtoc_test_noparent.dts
> > @@ -0,0 +1,32 @@
> > +// SPDX-License-Identifier: GPL-2.0+
> > +/*
> > + * Test device tree file for dtoc
> > + *
> > + * Copyright 2017 Google, Inc
> > + */
> > +
> > +/dts-v1/;
> > +
> > +/ {
> > + #address-cells = <1>;
> > + #size-cells = <1>;
> > + i2c at 0 {
> > + compatible = "sandbox,i2c";
> > + u-boot,dm-pre-tpl;
>
> Does u-boot,dm-pre-tpl exists? Probably I'm missing something here but I
> was expecting u-boot,dm-spl.
I'm not quite sure what happened here, but I think I corrected it when applying.
This patch has been applied at some point.
>
> > + #address-cells = <1>;
> > + #size-cells = <0>;
> > + spl-test {
> > + u-boot,dm-pre-reloc;
> > + compatible = "sandbox,spl-test";
> > + #address-cells = <1>;
> > + #size-cells = <0>;
> > + status = "disabled";
> > + pmic at 9 {
> > + compatible = "sandbox,pmic";
> > + u-boot,dm-pre-reloc;
> > + reg = <9>;
> > + low-power;
> > + };
> > + };
> > + };
> > +};
> > diff --git a/tools/dtoc/test_dtoc.py b/tools/dtoc/test_dtoc.py
> > index 0b2805feed2..863ede90b7a 100755
> > --- a/tools/dtoc/test_dtoc.py
> > +++ b/tools/dtoc/test_dtoc.py
> > @@ -1830,3 +1830,13 @@ U_BOOT_DRVINFO(spl_test2) = {
> > dtb_file = get_dtb_file('dtoc_test_single_reg.dts')
> > output = tools.GetOutputFilename('output')
> > self.run_test(['struct'], dtb_file, output)
> > +
> > + def test_missing_parent(self):
> > + """Test detection of a parent node with no properties"""
> > + dtb_file = get_dtb_file('dtoc_test_noparent.dts', capture_stderr=True)
> > + output = tools.GetOutputFilename('output')
> > + with self.assertRaises(ValueError) as exc:
> > + self.run_test(['device'], dtb_file, output, instantiate=True)
> > + self.assertIn("Node '/i2c at 0/spl-test/pmic at 9' requires parent node "
> > + "'/i2c at 0/spl-test' but it is not in the valid list",
> > + str(exc.exception))
>
Regards,
Simon
More information about the U-Boot
mailing list