# SPDX-License-Identifier: GPL-2.0+ # Copyright 2022 Google LLC # """Bintool implementation for fiptool fiptool provides a way to package firmware in an ARM Trusted Firmware Firmware Image Package (ATF FIP) format. It is used with Trusted Firmware A, for example. Documentation is at: https://trustedfirmware-a.readthedocs.io/en/latest/getting_started/tools-build.html?highlight=fiptool#building-and-using-the-fip-tool Source code is at: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git Here is the help: usage: fiptool [--verbose] [] Global options supported: --verbose Enable verbose output for all commands. Commands supported: info List images contained in FIP. create Create a new FIP with the given images. update Update an existing FIP with the given images. unpack Unpack images from FIP. remove Remove images from FIP. version Show fiptool version. help Show help for given command. """ from binman import bintool class Bintoolfiptool(bintool.Bintool): """Image generation for ARM Trusted Firmware This bintool supports running `fiptool` with some basic parameters as neeed by binman. It also supports build fiptool from source. fiptool provides a way to package firmware in an ARM Trusted Firmware Firmware Image Package (ATF FIP) format. It is used with Trusted Firmware A, for example. See `TF-A FIP tool documentation`_ for more information. .. _`TF-A FIP tool documentation`: https://trustedfirmware-a.readthedocs.io/en/latest/getting_started/tools-build.html?highlight=fiptool#building-and-using-the-fip-tool """ def __init__(self, name): super().__init__(name, 'Manipulate ATF FIP files', r'^(.*)$', 'version') def info(self, fname): """Get info on a FIP image Args: fname (str): Filename to check Returns: str: Tool output """ args = ['info', fname] return self.run_cmd(*args) # pylint: disable=R0913 def create_new(self, fname, align, plat_toc_flags, fwu, tb_fw, blob_uuid, blob_file): """Create a new FIP Args: fname (str): Filename to write to align (int): Alignment to use for entries plat_toc_flags (int): Flags to use for the TOC header fwu (str): Filename for the fwu entry tb_fw (str): Filename for the tb_fw entry blob_uuid (str): UUID for the blob entry blob_file (str): Filename for the blob entry Returns: str: Tool output """ args = [ 'create', '--align', f'{align:x}', '--plat-toc-flags', f'{plat_toc_flags:#x}', '--fwu', fwu, '--tb-fw', tb_fw, '--blob', f'uuid={blob_uuid},file={blob_file}', fname] return self.run_cmd(*args) def create_bad(self): """Run fiptool with invalid arguments""" args = ['create', '--fred'] return self.run_cmd_result(*args) def fetch(self, method): """Fetch handler for fiptool This builds the tool from source Returns: tuple: str: Filename of fetched file to copy to a suitable directory str: Name of temp directory to remove, or None """ if method != bintool.FETCH_BUILD: return None result = self.build_from_git( 'https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git', ['fiptool'], 'tools/fiptool/fiptool') return result