提交 4bdd3005 编写于 作者: S Simon Glass

binman: Adjust GetFdt() to be keyed by etype

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: NSimon Glass <sjg@chromium.org>
上级 726e2961
......@@ -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 {}
......
......@@ -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()
......@@ -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]}
......@@ -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'
......@@ -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
......
......@@ -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'
......@@ -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'
......@@ -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'
......@@ -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):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册