blob: c6d71cebc2189f3bf1051f2f4beed226434345e4 [file] [log] [blame]
Simon Glassbf87b202022-01-09 20:13:53 -07001# SPDX-License-Identifier: GPL-2.0+
2# Copyright 2022 Google LLC
3#
4"""Bintool implementation for fiptool
5
6fiptool provides a way to package firmware in an ARM Trusted Firmware Firmware
7Image Package (ATF FIP) format. It is used with Trusted Firmware A, for example.
8
9Documentation is at:
10https://trustedfirmware-a.readthedocs.io/en/latest/getting_started/tools-build.html?highlight=fiptool#building-and-using-the-fip-tool
11
12Source code is at:
13https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git
14
15Here is the help:
16
17usage: fiptool [--verbose] <command> [<args>]
18Global options supported:
19 --verbose Enable verbose output for all commands.
20
21Commands supported:
22 info List images contained in FIP.
23 create Create a new FIP with the given images.
24 update Update an existing FIP with the given images.
25 unpack Unpack images from FIP.
26 remove Remove images from FIP.
27 version Show fiptool version.
28 help Show help for given command.
29
30"""
31
32from binman import bintool
33
34class Bintoolfiptool(bintool.Bintool):
35 """Image generation for ARM Trusted Firmware
36
37 This bintool supports running `fiptool` with some basic parameters as
38 neeed by binman.
39
40 It also supports build fiptool from source.
41
42 fiptool provides a way to package firmware in an ARM Trusted Firmware
43 Firmware Image Package (ATF FIP) format. It is used with Trusted Firmware A,
44 for example.
45
46 See `TF-A FIP tool documentation`_ for more information.
47
48 .. _`TF-A FIP tool documentation`:
49 https://trustedfirmware-a.readthedocs.io/en/latest/getting_started/tools-build.html?highlight=fiptool#building-and-using-the-fip-tool
50 """
51 def __init__(self, name):
52 super().__init__(name, 'Manipulate ATF FIP files')
53
54 def info(self, fname):
55 """Get info on a FIP image
56
57 Args:
58 fname (str): Filename to check
59
60 Returns:
61 str: Tool output
62 """
63 args = ['info', fname]
64 return self.run_cmd(*args)
65
66 # pylint: disable=R0913
67 def create_new(self, fname, align, plat_toc_flags, fwu, tb_fw, blob_uuid,
68 blob_file):
69 """Create a new FIP
70
71 Args:
72 fname (str): Filename to write to
73 align (int): Alignment to use for entries
74 plat_toc_flags (int): Flags to use for the TOC header
75 fwu (str): Filename for the fwu entry
76 tb_fw (str): Filename for the tb_fw entry
77 blob_uuid (str): UUID for the blob entry
78 blob_file (str): Filename for the blob entry
79
80 Returns:
81 str: Tool output
82 """
83 args = [
84 'create',
85 '--align', f'{align:x}',
86 '--plat-toc-flags', f'{plat_toc_flags:#x}',
87 '--fwu', fwu,
88 '--tb-fw', tb_fw,
89 '--blob', f'uuid={blob_uuid},file={blob_file}',
90 fname]
91 return self.run_cmd(*args)
92
93 def create_bad(self):
94 """Run fiptool with invalid arguments"""
95 args = ['create', '--fred']
96 return self.run_cmd_result(*args)
97
98 def fetch(self, method):
99 """Fetch handler for fiptool
100
101 This builds the tool from source
102
103 Returns:
104 tuple:
105 str: Filename of fetched file to copy to a suitable directory
106 str: Name of temp directory to remove, or None
107 """
108 if method != bintool.FETCH_BUILD:
109 return None
110 result = self.build_from_git(
111 'https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git',
112 'fiptool',
113 'tools/fiptool/fiptool')
114 return result
115
116 def version(self):
117 """Version handler for fiptool
118
119 Returns:
120 str: Version number of fiptool
121 """
122 out = self.run_cmd('version').strip()
123 return out or super().version()