[U-Boot,09/53] binman: Adjust GetFdt() to be keyed by etype
diff mbox series

Message ID 20190720182416.183626-10-sjg@chromium.org
State Accepted
Commit 4bdd30055ca3a9096f462177758b97e55c15f1e7
Delegated to: Simon Glass
Headers show
Series
  • binman: Support replacing entries in an existing image
Related show

Commit Message

Simon Glass July 20, 2019, 6:23 p.m. UTC
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                           |  4 +++-
 tools/binman/entry_test.py                      |  9 +++++++++
 tools/binman/etype/blob_dtb.py                  | 16 ++++++++++++++--
 tools/binman/etype/u_boot_dtb.py                |  3 +++
 tools/binman/etype/u_boot_dtb_with_ucode.py     |  3 +++
 tools/binman/etype/u_boot_spl_dtb.py            |  3 +++
 tools/binman/etype/u_boot_tpl_dtb.py            |  3 +++
 tools/binman/etype/u_boot_tpl_dtb_with_ucode.py |  3 +++
 tools/binman/state.py                           | 14 +++++++++-----
 9 files changed, 50 insertions(+), 8 deletions(-)

Comments

Simon Glass July 29, 2019, 9:22 p.m. UTC | #1
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                           |  4 +++-
 tools/binman/entry_test.py                      |  9 +++++++++
 tools/binman/etype/blob_dtb.py                  | 16 ++++++++++++++--
 tools/binman/etype/u_boot_dtb.py                |  3 +++
 tools/binman/etype/u_boot_dtb_with_ucode.py     |  3 +++
 tools/binman/etype/u_boot_spl_dtb.py            |  3 +++
 tools/binman/etype/u_boot_tpl_dtb.py            |  3 +++
 tools/binman/etype/u_boot_tpl_dtb_with_ucode.py |  3 +++
 tools/binman/state.py                           | 14 +++++++++-----
 9 files changed, 50 insertions(+), 8 deletions(-)

Applied to u-boot-dm, thanks!

Patch
diff mbox series

diff --git a/tools/binman/entry.py b/tools/binman/entry.py
index 2ed9dc0d6f4..dd2daadf16f 100644
--- a/tools/binman/entry.py
+++ b/tools/binman/entry.py
@@ -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 {}
 
diff --git a/tools/binman/entry_test.py b/tools/binman/entry_test.py
index b6ad3edb8dc..460171ba899 100644
--- a/tools/binman/entry_test.py
+++ b/tools/binman/entry_test.py
@@ -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()
diff --git a/tools/binman/etype/blob_dtb.py b/tools/binman/etype/blob_dtb.py
index b70c3d3a3a2..b9ccf9a9540 100644
--- a/tools/binman/etype/blob_dtb.py
+++ b/tools/binman/etype/blob_dtb.py
@@ -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]}
diff --git a/tools/binman/etype/u_boot_dtb.py b/tools/binman/etype/u_boot_dtb.py
index 6263c4ebee3..6c805a666da 100644
--- a/tools/binman/etype/u_boot_dtb.py
+++ b/tools/binman/etype/u_boot_dtb.py
@@ -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'
diff --git a/tools/binman/etype/u_boot_dtb_with_ucode.py b/tools/binman/etype/u_boot_dtb_with_ucode.py
index 9224004efeb..ff7f80421a3 100644
--- a/tools/binman/etype/u_boot_dtb_with_ucode.py
+++ b/tools/binman/etype/u_boot_dtb_with_ucode.py
@@ -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
diff --git a/tools/binman/etype/u_boot_spl_dtb.py b/tools/binman/etype/u_boot_spl_dtb.py
index e7354646f13..1bcd449bf3a 100644
--- a/tools/binman/etype/u_boot_spl_dtb.py
+++ b/tools/binman/etype/u_boot_spl_dtb.py
@@ -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'
diff --git a/tools/binman/etype/u_boot_tpl_dtb.py b/tools/binman/etype/u_boot_tpl_dtb.py
index bdeb0f75a24..81a39704598 100644
--- a/tools/binman/etype/u_boot_tpl_dtb.py
+++ b/tools/binman/etype/u_boot_tpl_dtb.py
@@ -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'
diff --git a/tools/binman/etype/u_boot_tpl_dtb_with_ucode.py b/tools/binman/etype/u_boot_tpl_dtb_with_ucode.py
index 71e04fcd44f..ce19a49e2e6 100644
--- a/tools/binman/etype/u_boot_tpl_dtb_with_ucode.py
+++ b/tools/binman/etype/u_boot_tpl_dtb_with_ucode.py
@@ -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'
diff --git a/tools/binman/state.py b/tools/binman/state.py
index c8175a30334..ee11ba470e0 100644
--- a/tools/binman/state.py
+++ b/tools/binman/state.py
@@ -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):