mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-25 06:00:43 +00:00
dtoc: Check that a parent is not missing
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@chromium.org>
This commit is contained in:
parent
54e0bd1728
commit
1c56469ce1
3 changed files with 51 additions and 0 deletions
|
@ -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-tpl 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:
|
||||
|
|
32
tools/dtoc/test/dtoc_test_noparent.dts
Normal file
32
tools/dtoc/test/dtoc_test_noparent.dts
Normal file
|
@ -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@0 {
|
||||
compatible = "sandbox,i2c";
|
||||
u-boot,dm-tpl;
|
||||
#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@9 {
|
||||
compatible = "sandbox,pmic";
|
||||
u-boot,dm-pre-reloc;
|
||||
reg = <9>;
|
||||
low-power;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
|
@ -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@0/spl-test/pmic@9' requires parent node "
|
||||
"'/i2c@0/spl-test' but it is not in the valid list",
|
||||
str(exc.exception))
|
||||
|
|
Loading…
Reference in a new issue