]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
binman: Add a temporary hack for duplicate phandles
authorSimon Glass <sjg@chromium.org>
Wed, 2 Aug 2023 15:23:13 +0000 (09:23 -0600)
committerSimon Glass <sjg@chromium.org>
Wed, 2 Aug 2023 18:05:57 +0000 (12:05 -0600)
Three boards use a phandle in a FIT generator and the maintainer is
away. For now, add a hack to allow this.

Signed-off-by: Simon Glass <sjg@chromium.org>
Makefile
tools/binman/cmdline.py
tools/binman/control.py
tools/dtoc/fdt.py

index 41f37714f7e4d539afbd1f2f23af40e172aa6605..b8a9ed818a88e1b3498d302479b981d20dd1ca7e 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1328,6 +1328,11 @@ u-boot.ldr:      u-boot
 # Use 'make BINMAN_VERBOSE=3' to set vebosity level
 default_dt := $(if $(DEVICE_TREE),$(DEVICE_TREE),$(CONFIG_DEFAULT_DEVICE_TREE))
 
+# Temporary workaround for Venice boards
+ifneq ($(CONFIG_TARGET_IMX8MM_VENICE),$(CONFIG_TARGET_IMX8MN_VENICE),$(CONFIG_TARGET_IMX8MP_VENICE),)
+ignore_dups := --ignore-dup-phandles
+endif
+
 quiet_cmd_binman = BINMAN  $@
 cmd_binman = $(srctree)/tools/binman/binman $(if $(BINMAN_DEBUG),-D) \
                $(foreach f,$(BINMAN_TOOLPATHS),--toolpath $(f)) \
@@ -1349,6 +1354,7 @@ cmd_binman = $(srctree)/tools/binman/binman $(if $(BINMAN_DEBUG),-D) \
                -a spl-dtb=$(CONFIG_SPL_OF_REAL) \
                -a tpl-dtb=$(CONFIG_TPL_OF_REAL) \
                -a pre-load-key-path=${PRE_LOAD_KEY_PATH} \
+               $(ignore_dups) \
                $(BINMAN_$(@F))
 
 OBJCOPYFLAGS_u-boot.ldr.hex := -I binary -O ihex
index 9632ec115e5daf406f8ad5db984ae82d97030acc..39c61c2c032247c7ce0b65b4e8ba4a0947189bc5 100644 (file)
@@ -126,6 +126,8 @@ controlled by a description in the board device tree.'''
             help='Comma-separated list of bintools to consider missing (for testing)')
     build_parser.add_argument('-i', '--image', type=str, action='append',
             help='Image filename to build (if not specified, build all)')
+    build_parser.add_argument('--ignore-dup-phandles', action='store_true',
+            help='Temporary option to ignore duplicate phandles')
     build_parser.add_argument('-I', '--indir', action='append',
             help='Add a path to the list of directories to use for input files')
     build_parser.add_argument('-m', '--map', action='store_true',
index c6d3205b8c2508988ef0886431059231e7b8ea2b..459489558125855887308e8182f28c1902a33255 100644 (file)
@@ -22,6 +22,7 @@ from binman import bintool
 from binman import cbfs_util
 from binman import elf
 from binman import entry
+from dtoc import fdt
 from dtoc import fdt_util
 from u_boot_pylib import command
 from u_boot_pylib import tools
@@ -816,6 +817,10 @@ def Binman(args):
         cbfs_util.VERBOSE = args.verbosity > 2
         state.use_fake_dtb = args.fake_dtb
 
+        # Temporary hack
+        if args.ignore_dup_phandles: # pragma: no cover
+            fdt.IGNORE_DUP_PHANDLES = True
+
         # Normally we replace the 'u-boot' etype with 'u-boot-expanded', etc.
         # When running tests this can be disabled using this flag. When not
         # updating the FDT in image, it is not needed by binman, but we use it
index 5963925146a5df3fadbf29e33f6d5e995b5ff300..0b20d52f3136c5019e1ca646435b85b663036ae0 100644 (file)
@@ -15,6 +15,9 @@ from libfdt import QUIET_NOTFOUND
 from u_boot_pylib import tools
 from u_boot_pylib import tout
 
+# Temporary hack
+IGNORE_DUP_PHANDLES = False
+
 # This deals with a device tree, presenting it as an assortment of Node and
 # Prop objects, representing nodes and properties, respectively. This file
 # contains the base classes and defines the high-level API. You can use
@@ -339,10 +342,11 @@ class Node:
         if phandle:
             dup = self._fdt.phandle_to_node.get(phandle)
             if dup:
-                raise ValueError(
-                    f'Duplicate phandle {phandle} in nodes {dup.path} and {self.path}')
-
-            self._fdt.phandle_to_node[phandle] = self
+                if not IGNORE_DUP_PHANDLES:
+                    raise ValueError(
+                        f'Duplicate phandle {phandle} in nodes {dup.path} and {self.path}')
+            else:
+                self._fdt.phandle_to_node[phandle] = self
 
         offset = fdt_obj.first_subnode(self.Offset(), QUIET_NOTFOUND)
         while offset >= 0: