binman: Adjust GetFdt() to be keyed by etype
authorSimon Glass <sjg@chromium.org>
Sat, 20 Jul 2019 18:23:31 +0000 (12:23 -0600)
committerSimon Glass <sjg@chromium.org>
Mon, 29 Jul 2019 15:38:05 +0000 (09:38 -0600)
At present the FDTs are keyed by their default filename (not their actual
filename). It seems easier to key by the entry type, since this is always
the same for each FDT type.

To do this, add a new Entry method called GetFdtEtype(). This is necessary
since some entry types contain a device tree which are not the simple
three entry types 'u-boot-dtb', 'u-boot-spl' or 'u-boot-tpl'.

The code already returns a dict for GetFdt(). Update the value of that
dict to include the filename so that existing code can work.

Signed-off-by: Simon Glass <sjg@chromium.org>
tools/binman/entry.py
tools/binman/entry_test.py
tools/binman/etype/blob_dtb.py
tools/binman/etype/u_boot_dtb.py
tools/binman/etype/u_boot_dtb_with_ucode.py
tools/binman/etype/u_boot_spl_dtb.py
tools/binman/etype/u_boot_tpl_dtb.py
tools/binman/etype/u_boot_tpl_dtb_with_ucode.py
tools/binman/state.py

index 2ed9dc0d6f4b698871243744c5eb716c82c34359..dd2daadf16f143ae5251d442a0b916bdaf6445e1 100644 (file)
@@ -192,7 +192,9 @@ class Entry(object):
             Empty dict, if this entry is not a .dtb, otherwise:
             Dict:
                 key: Filename from this entry (without the path)
-                value: Fdt object for this dtb, or None if not available
+                value: Tuple:
+                    Fdt object for this dtb, or None if not available
+                    Filename of file containing this dtb
         """
         return {}
 
index b6ad3edb8dce3d9fdaa4102c1d808594c85f25ac..460171ba899309bcd35649d2623babee49e1061d 100644 (file)
@@ -84,5 +84,14 @@ class TestEntry(unittest.TestCase):
         base_entry = entry.Entry(None, None, None, read_node=False)
         self.assertIsNone(base_entry.GetDefaultFilename())
 
+    def testBlobFdt(self):
+        """Test the GetFdtEtype() method of the blob-dtb entries"""
+        base = entry.Entry.Create(None, self.GetNode(), 'blob-dtb')
+        self.assertIsNone(base.GetFdtEtype())
+
+        dtb = entry.Entry.Create(None, self.GetNode(), 'u-boot-dtb')
+        self.assertEqual('u-boot-dtb', dtb.GetFdtEtype())
+
+
 if __name__ == "__main__":
     unittest.main()
index b70c3d3a3a25aed7428a99c40b51cde5b9f390c7..b9ccf9a9540852fc1d520c88e96f54c068a46796 100644 (file)
@@ -32,12 +32,24 @@ class Entry_blob_dtb(Entry_blob):
         data = self.CompressData(indata)
         return self.ProcessContentsUpdate(data)
 
+    def GetFdtEtype(self):
+        """Get the entry type of this device tree
+
+        This can be 'u-boot-dtb', 'u-boot-spl-dtb' or 'u-boot-tpl-dtb'
+        Returns:
+            Entry type if any, e.g. 'u-boot-dtb'
+        """
+        return None
+
     def GetFdts(self):
         """Get the device trees used by this entry
 
         Returns:
             Dict:
                 key: Filename from this entry (without the path)
-                value: Fdt object for this dtb, or None if not available
+                value: Tuple:
+                    Fdt object for this dtb, or None if not available
+                    Filename of file containing this dtb
         """
-        return {self.GetDefaultFilename(): None}
+        fname = self.GetDefaultFilename()
+        return {self.GetFdtEtype(): [self, fname]}
index 6263c4ebee31d4f069433f69fe83ff66478ec02d..6c805a666da492e738156e28e6d574fad00ff1bc 100644 (file)
@@ -26,3 +26,6 @@ class Entry_u_boot_dtb(Entry_blob_dtb):
 
     def GetDefaultFilename(self):
         return 'u-boot.dtb'
+
+    def GetFdtEtype(self):
+        return 'u-boot-dtb'
index 9224004efeb490c326561cf9e8b4aded89f78589..ff7f80421a32975de0f3741ea8864f7d5c54f244 100644 (file)
@@ -36,6 +36,9 @@ class Entry_u_boot_dtb_with_ucode(Entry_blob_dtb):
     def GetDefaultFilename(self):
         return 'u-boot.dtb'
 
+    def GetFdtEtype(self):
+        return 'u-boot-dtb'
+
     def ProcessFdt(self, fdt):
         # So the module can be loaded without it
         import fdt
index e7354646f136dec5e83dbd1e53f738a6c99a65f5..1bcd449bf3ad625cca28da105097585f3826f710 100644 (file)
@@ -23,3 +23,6 @@ class Entry_u_boot_spl_dtb(Entry_blob_dtb):
 
     def GetDefaultFilename(self):
         return 'spl/u-boot-spl.dtb'
+
+    def GetFdtEtype(self):
+        return 'u-boot-spl-dtb'
index bdeb0f75a24a549ff23d26077af7dd0bb1d9d25c..81a39704598fcf979ce2fd7d08690638416b8735 100644 (file)
@@ -23,3 +23,6 @@ class Entry_u_boot_tpl_dtb(Entry_blob_dtb):
 
     def GetDefaultFilename(self):
         return 'tpl/u-boot-tpl.dtb'
+
+    def GetFdtEtype(self):
+        return 'u-boot-tpl-dtb'
index 71e04fcd44f884684c90c7248db6d6fb66dc54b1..ce19a49e2e6334820fc2fc3795dfe461139cb67e 100644 (file)
@@ -23,3 +23,6 @@ class Entry_u_boot_tpl_dtb_with_ucode(Entry_u_boot_dtb_with_ucode):
 
     def GetDefaultFilename(self):
         return 'tpl/u-boot-tpl.dtb'
+
+    def GetFdtEtype(self):
+        return 'u-boot-tpl-dtb'
index c8175a303342d86e24a40de82619c38c852de7fb..ee11ba470e08347459affc500eb02b26b73d831a 100644 (file)
@@ -22,7 +22,10 @@ entry_args = {}
 # ftest.py)
 use_fake_dtb = False
 
-# Dict of device trees, keyed by filename, but excluding the main one
+# Dict of device trees, keyed by entry type, but excluding the main one
+# The value is as returned by Entry.GetFdts(), i.e. a tuple:
+#     Fdt object for this dtb, or None if not available
+#     Filename of file containing this dtb
 fdt_subset = {}
 
 # The DTB which contains the full image information
@@ -142,9 +145,10 @@ def Prepare(images, dtb):
     if not use_fake_dtb:
         for image in images.values():
             fdt_subset.update(image.GetFdts())
-        if 'u-boot.dtb' in fdt_subset:
-            del fdt_subset['u-boot.dtb']
-        for other_fname in fdt_subset:
+        if 'u-boot-dtb' in fdt_subset:
+            del fdt_subset['u-boot-dtb']
+        for etype, other in fdt_subset.items():
+            _, other_fname = other
             infile = tools.GetInputFilename(other_fname)
             other_fname_dtb = fdt_util.EnsureCompiled(infile)
             out_fname = tools.GetOutputFilename('%s.out' %
@@ -160,7 +164,7 @@ def GetAllFdts():
         Device trees being used (U-Boot proper, SPL, TPL)
     """
     yield main_dtb
-    for other_fname in fdt_subset:
+    for etype, other_fname in fdt_subset.values():
         yield fdt_files[other_fname]
 
 def GetUpdateNodes(node):