Commit 0b1cdd42 authored by Simon Glass's avatar Simon Glass
Browse files

binman: Use standard filenames for SPL/TPL devicetree

At present, before any entry expansion is done (such as a 'files' entry
expanding out to individual entries for each file it contains), we check
the binman definition (i.e. '/binman' node) to find out what devicetree
files are used in the images.

This is a pain, since the definition may change during expansion. For
example if there is no u-boot-spl-dtb entry in the definition at the start,
we assume that the SPL devicetree is not used. But if an entry later
expands to include this, then we don't notice.

In fact the flexibility provided by the current approach of checking the
definition is not really useful. We know that we can have SPL and TPL
devicetrees. We know the pathname to each, so we can simply check if the
files are present. If they are present, we can prepare them and update
them regardless of whether they are actually used. If they are not present,
we cannot prepare/update them anyway, i.e. an error will be generated.

Simplify state.Prepare() so it uses a hard-coded list of devicetree files.

Note that state.PrepareFromLoadedData() is left untouched, since in that
case we have a complete definition from the loaded file, but cannot of
course rely on the devicetree files that created it still being present.
So in that case we still check the image defitions.
Signed-off-by: Simon Glass's avatarSimon Glass <>
parent df0364fd
...@@ -188,17 +188,16 @@ def Prepare(images, dtb): ...@@ -188,17 +188,16 @@ def Prepare(images, dtb):
output_fdt_info[etype] = [dtb, fname] output_fdt_info[etype] = [dtb, fname]
else: else:
fdt_set = {} fdt_set = {}
for image in images.values(): for etype, fname in DTB_TYPE_FNAME.items():
fdt_set.update(image.GetFdts()) infile = tools.GetInputFilename(fname, allow_missing=True)
for etype, other in fdt_set.items(): if infile and os.path.exists(infile):
entry, fname = other fname_dtb = fdt_util.EnsureCompiled(infile)
infile = tools.GetInputFilename(fname) out_fname = tools.GetOutputFilename('%s.out' %
fname_dtb = fdt_util.EnsureCompiled(infile) os.path.split(fname)[1])
out_fname = tools.GetOutputFilename('%s.out' % tools.WriteFile(out_fname, tools.ReadFile(fname_dtb))
os.path.split(fname)[1]) other_dtb = fdt.FdtScan(out_fname)
tools.WriteFile(out_fname, tools.ReadFile(fname_dtb)) output_fdt_info[etype] = [other_dtb, out_fname]
other_dtb = fdt.FdtScan(out_fname)
output_fdt_info[etype] = [other_dtb, out_fname]
def PrepareFromLoadedData(image): def PrepareFromLoadedData(image):
"""Get device tree files ready for use with a loaded image """Get device tree files ready for use with a loaded image
...@@ -130,8 +130,12 @@ def GetInputFilename(fname, allow_missing=False): ...@@ -130,8 +130,12 @@ def GetInputFilename(fname, allow_missing=False):
allow_missing: True if the filename can be missing allow_missing: True if the filename can be missing
Returns: Returns:
The full path of the filename, within the input directory, or fname, if indir is None;
None on error full path of the filename, within the input directory;
None, if file is missing and allow_missing is True
ValueError if file is missing and allow_missing is False
""" """
if not indir or fname[:1] == '/': if not indir or fname[:1] == '/':
return fname return fname
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment