All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Glass <sjg@chromium.org>
To: u-boot@lists.denx.de
Subject: [PATCH 16/17] dtoc: Check that a parent is not missing
Date: Wed,  7 Apr 2021 16:32:26 +1200	[thread overview]
Message-ID: <20210407163159.16.I11cd6003245319bf9c867b3b6e0feadb1a5d09b1@changeid> (raw)
In-Reply-To: <20210407043228.2268429-1-sjg@chromium.org>

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>
---

 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 1374f01c707..c303224e295 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;
+		#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 a05e3d9ed65..e7397ae554b 100755
--- a/tools/dtoc/test_dtoc.py
+++ b/tools/dtoc/test_dtoc.py
@@ -1839,3 +1839,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))
-- 
2.31.0.208.g409f899ff0-goog

  parent reply	other threads:[~2021-04-07  4:32 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-07  4:32 [PATCH 00/17] misc: Some more misc patches Simon Glass
2021-04-07  4:32 ` [PATCH 01/17] pci: Use const for pci_find_device_id() etc Simon Glass
2021-04-08  2:29   ` Bin Meng
2021-04-07  4:32 ` [PATCH 02/17] x86: pci: Allow binding of some devices before relocation Simon Glass
2021-04-08  2:16   ` Bin Meng
2021-04-24  4:56     ` Simon Glass
2021-04-07  4:32 ` [PATCH 03/17] x86: Allow coreboot serial driver to guess the UART Simon Glass
2021-04-08  2:22   ` Bin Meng
2021-04-24  4:56     ` Simon Glass
2021-04-25  1:49       ` Bin Meng
2021-04-25  2:09         ` Simon Glass
2021-04-26  1:21           ` Bin Meng
2021-04-29 16:10             ` Simon Glass
2021-04-29 23:01               ` Bin Meng
2021-04-30 18:13                 ` Simon Glass
2021-04-30 18:41                   ` Andy Shevchenko
2021-05-04 15:26                     ` Simon Glass
2021-05-04 16:48                       ` Andy Shevchenko
2021-05-08  1:42                       ` Simon Glass
2021-05-08  1:47                         ` Bin Meng
2021-05-08  2:12                           ` Simon Glass
2021-05-08  2:26                             ` Bin Meng
2021-04-07  4:32 ` [PATCH 04/17] spi: ich: Don't require the PCH Simon Glass
2021-04-08  2:28   ` Bin Meng
2021-04-24  4:56     ` Simon Glass
2021-04-07  4:32 ` [PATCH 05/17] tpm: cr50: Drop unnecessary coral headers Simon Glass
2021-04-08  2:29   ` Bin Meng
2021-04-07  4:32 ` [PATCH 06/17] x86: Don't set up MTRRs if previously done Simon Glass
2021-04-08  2:42   ` Bin Meng
2021-04-07  4:32 ` [PATCH 07/17] x86: Update the MP constants to avoid conflicts Simon Glass
2021-04-08  2:43   ` Bin Meng
2021-04-07  4:32 ` [PATCH 08/17] x86: Do cache set-up by default when booting from coreboot Simon Glass
2021-04-08  2:43   ` Bin Meng
2021-04-07  4:32 ` [PATCH 09/17] x86: coreboot: Show the BIOS date Simon Glass
2021-04-08  2:43   ` Bin Meng
2021-04-07  4:32 ` [PATCH 10/17] x86: coral: Allow booting from coreboot Simon Glass
2021-04-08  2:43   ` Bin Meng
2021-04-07  4:32 ` [PATCH 11/17] x86: Add function comments to cb_sysinfo.h Simon Glass
2021-04-08  2:59   ` Bin Meng
2021-04-07  4:32 ` [PATCH 12/17] x86: coreboot: Use vendor in the Kconfig Simon Glass
2021-04-08  2:59   ` Bin Meng
2021-04-24  4:56     ` Simon Glass
2021-04-07  4:32 ` [PATCH 13/17] x86: coreboot: Enable the cbsysinfo command Simon Glass
2021-04-08  2:59   ` Bin Meng
2021-04-07  4:32 ` [PATCH 14/17] x86: coreboot: Document the memory map Simon Glass
2021-04-08  2:59   ` Bin Meng
2021-04-07  4:32 ` [PATCH 15/17] x86: Check ROM exists before building vboot Simon Glass
2021-04-08  2:59   ` Bin Meng
2021-04-08 22:07   ` Jaehoon Chung
2021-04-07  4:32 ` Simon Glass [this message]
2021-04-07  4:32 ` [PATCH 17/17] doc: Update documentation for cros-2021.04 release Simon Glass
2021-04-08  3:02   ` Bin Meng
2021-04-24  4:56     ` Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210407163159.16.I11cd6003245319bf9c867b3b6e0feadb1a5d09b1@changeid \
    --to=sjg@chromium.org \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.