mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 03:58:17 +00:00 
			
		
		
		
	The argument type of `build_from_git` was changed from string to list in d71e7116997f14097735f04cc7847f0a68dbc485. This commit adapts the argument type of all bintools using this function. Signed-off-by: Lukas Funke <lukas.funke@weidmueller.com> Reviewed-by: Simon Glass <sjg@chromium.org> Tested-by: Simon Glass <sjg@chromium.org>
		
			
				
	
	
		
			138 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # SPDX-License-Identifier: GPL-2.0+
 | |
| # Copyright (C) 2023 Weidmüller Interface GmbH & Co. KG
 | |
| # Lukas Funke <lukas.funke@weidmueller.com>
 | |
| #
 | |
| """Bintool implementation for bootgen
 | |
| 
 | |
| bootgen allows creating bootable SPL for Zynq(MP)
 | |
| 
 | |
| Documentation is available via:
 | |
| https://www.xilinx.com/support/documents/sw_manuals/xilinx2022_1/ug1283-bootgen-user-guide.pdf
 | |
| 
 | |
| Source code is available at:
 | |
| https://github.com/Xilinx/bootgen
 | |
| 
 | |
| """
 | |
| 
 | |
| from binman import bintool
 | |
| from u_boot_pylib import tools
 | |
| 
 | |
| # pylint: disable=C0103
 | |
| class Bintoolbootgen(bintool.Bintool):
 | |
|     """Generate bootable fsbl image for zynq/zynqmp
 | |
| 
 | |
|     This bintools supports running Xilinx "bootgen" in order
 | |
|     to generate a bootable, authenticated image form an SPL.
 | |
| 
 | |
|     """
 | |
|     def __init__(self, name):
 | |
|         super().__init__(name, 'Xilinx Bootgen',
 | |
|                          version_regex=r'^\*\*\*\*\*\* *Xilinx Bootgen *(.*)',
 | |
|                          version_args='-help')
 | |
| 
 | |
|     # pylint: disable=R0913
 | |
|     def sign(self, arch, spl_elf_fname, pmufw_elf_fname,
 | |
|              psk_fname, ssk_fname, fsbl_config, auth_params, keysrc_enc,
 | |
|              output_fname):
 | |
|         """Sign SPL elf file and bundle it with PMU firmware into an image
 | |
| 
 | |
|         The method bundels the SPL together with a 'Platform Management Unit'
 | |
|         (PMU)[1] firmware into a single bootable image. The image in turn is
 | |
|         signed with the provided 'secondary secret key' (ssk), which in turn is
 | |
|         signed with the 'primary secret key' (psk). In order to verify the
 | |
|         authenticity of the ppk, it's hash has to be fused into the device
 | |
|         itself.
 | |
| 
 | |
|         In Xilinx terms the SPL is usually called 'FSBL'
 | |
|         (First Stage Boot Loader). The jobs of the SPL and the FSBL are mostly
 | |
|         the same: load bitstream, bootstrap u-boot.
 | |
| 
 | |
|         Args:
 | |
|             arch (str): Xilinx SoC architecture. Currently only 'zynqmp' is
 | |
|                 supported.
 | |
|             spl_elf_fname (str): Filename of SPL ELF file. The filename must end
 | |
|                 with '.elf' in order for bootgen to recognized it as an ELF
 | |
|                 file. Otherwise the start address field is missinterpreted.
 | |
|             pmufw_elf_fname (str): Filename PMU ELF firmware.
 | |
|             psk_fname (str): Filename of the primary secret key (psk). The psk
 | |
|                 is a .pem file which holds the RSA private key used for signing
 | |
|                 the secondary secret key.
 | |
|             ssk_fname (str): Filename of the secondary secret key. The ssk
 | |
|                 is a .pem file which holds the RSA private key used for signing
 | |
|                 the actual boot firmware.
 | |
|             fsbl_config (str): FSBL config options. A string list of fsbl config
 | |
|                 options. Valid values according to [2] are:
 | |
|                 "bh_auth_enable": Boot Header Authentication Enable: RSA
 | |
|                     authentication of the bootimage is done
 | |
|                     excluding the verification of PPK hash and SPK ID. This is
 | |
|                     useful for debugging before bricking a device.
 | |
|                 "auth_only": Boot image is only RSA signed. FSBL should not be
 | |
|                     decrypted. See the
 | |
|                     Zynq UltraScale+ Device Technical Reference Manual (UG1085)
 | |
|                     for more information.
 | |
|                 There are more options which relate to PUF (physical unclonable
 | |
|                 functions). Please refer to Xilinx manuals for further info.
 | |
|             auth_params (str): Authentication parameter. A semicolon separated
 | |
|                 list of authentication parameters. Valid values according to [3]
 | |
|                 are:
 | |
|                 "ppk_select=<0|1>" - Select which ppk to use
 | |
|                 "spk_id=<32-bit spk id>" - Specifies which SPK can be
 | |
|                     used or revoked, default is 0x0
 | |
|                 "spk_select=<spk-efuse/user-efuse>" - To differentiate spk and
 | |
|                     user efuses.
 | |
|                 "auth_header" - To authenticate headers when no partition
 | |
|                     is authenticated.
 | |
|             keysrc_enc (str): This specifies the Key source for encryption.
 | |
|                 Valid values according to [3] are:
 | |
|                 "bbram_red_key" - RED key stored in BBRAM
 | |
|                 "efuse_red_key" - RED key stored in eFUSE
 | |
|                 "efuse_gry_key" - Grey (Obfuscated) Key stored in eFUSE.
 | |
|                 "bh_gry_key" - Grey (Obfuscated) Key stored in boot header
 | |
|                 "bh_blk_key" - Black Key stored in boot header
 | |
|                 "efuse_blk_key" - Black Key stored in eFUSE
 | |
|                 "kup_key" - User Key
 | |
| 
 | |
|             output_fname (str): Filename where bootgen should write the result
 | |
|         
 | |
|         Returns:
 | |
|             str: Bootgen output from stdout
 | |
| 
 | |
|         [1] https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18841724/PMU+Firmware
 | |
|         [2] https://docs.xilinx.com/r/en-US/ug1283-bootgen-user-guide/fsbl_config
 | |
|         [3] https://docs.xilinx.com/r/en-US/ug1283-bootgen-user-guide/auth_params
 | |
|         [4] https://docs.xilinx.com/r/en-US/ug1283-bootgen-user-guide/keysrc_encryption
 | |
|         """
 | |
| 
 | |
|         _fsbl_config = f"[fsbl_config] {fsbl_config}" if fsbl_config else ""
 | |
|         _auth_params = f"[auth_params] {auth_params}" if auth_params else ""
 | |
|         _keysrc_enc  = f"[keysrc_encryption] {keysrc_enc}" if keysrc_enc else ""
 | |
| 
 | |
|         bif_template = f"""u_boot_spl_aes_rsa: {{
 | |
|             [pskfile] {psk_fname}
 | |
|             [sskfile] {ssk_fname}
 | |
|             {_keysrc_enc}
 | |
|             {_fsbl_config}
 | |
|             {_auth_params}
 | |
|             [ bootloader,
 | |
|               authentication = rsa,
 | |
|               destination_cpu=a53-0] {spl_elf_fname}
 | |
|             [pmufw_image] {pmufw_elf_fname}
 | |
|         }}"""
 | |
|         args = ["-arch", arch]
 | |
| 
 | |
|         bif_fname = tools.get_output_filename('bootgen-in.sign.bif')
 | |
|         tools.write_file(bif_fname, bif_template, False)
 | |
|         args += ["-image", bif_fname, '-w', '-o', output_fname]
 | |
|         return self.run_cmd(*args)
 | |
| 
 | |
|     def fetch(self, method):
 | |
|         """Fetch bootgen from git"""
 | |
|         if method != bintool.FETCH_BUILD:
 | |
|             return None
 | |
| 
 | |
|         result = self.build_from_git(
 | |
|             'https://github.com/Xilinx/bootgen',
 | |
|             ['all'],
 | |
|             'bootgen')
 | |
|         return result
 |