# SPDX-License-Identifier: GPL-2.0+ # Copyright 2018 Google, Inc # Written by Simon Glass # # Holds and modifies the state information held by binman # import re from sets import Set import os import tools # Records the device-tree files known to binman, keyed by filename (e.g. # 'u-boot-spl.dtb') fdt_files = {} # Arguments passed to binman to provide arguments to entries entry_args = {} # Set of all device tree files references by images fdt_set = Set() # Same as above, but excluding the main one fdt_subset = Set() # The DTB which contains the full image information main_dtb = None def GetFdt(fname): """Get the Fdt object for a particular device-tree filename Binman keeps track of at least one device-tree file called u-boot.dtb but can also have others (e.g. for SPL). This function looks up the given filename and returns the associated Fdt object. Args: fname: Filename to look up (e.g. 'u-boot.dtb'). Returns: Fdt object associated with the filename """ return fdt_files[fname] def GetFdtPath(fname): """Get the full pathname of a particular Fdt object Similar to GetFdt() but returns the pathname associated with the Fdt. Args: fname: Filename to look up (e.g. 'u-boot.dtb'). Returns: Full path name to the associated Fdt """ return fdt_files[fname]._fname def SetEntryArgs(args): """Set the value of the entry args This sets up the entry_args dict which is used to supply entry arguments to entries. Args: args: List of entry arguments, each in the format "name=value" """ global entry_args entry_args = {} if args: for arg in args: m = re.match('([^=]*)=(.*)', arg) if not m: raise ValueError("Invalid entry arguemnt '%s'" % arg) entry_args[m.group(1)] = m.group(2) def GetEntryArg(name): """Get the value of an entry argument Args: name: Name of argument to retrieve Returns: String value of argument """ return entry_args.get(name) def Prepare(dtb): """Get device tree files ready for use This sets up a set of device tree files that can be retrieved by GetFdts(). At present there is only one, that for U-Boot proper. Args: dtb: Main dtb """ global fdt_set, fdt_subset, fdt_files, main_dtb # Import these here in case libfdt.py is not available, in which case # the above help option still works. import fdt import fdt_util # If we are updating the DTBs we need to put these updated versions # where Entry_blob_dtb can find them. We can ignore 'u-boot.dtb' # since it is assumed to be the one passed in with options.dt, and # was handled just above. main_dtb = dtb fdt_files.clear() fdt_files['u-boot.dtb'] = dtb fdt_set = Set() fdt_subset = Set() def GetFdts(): """Yield all device tree files being used by binman Yields: Device trees being used (U-Boot proper, SPL, TPL) """ yield main_dtb