1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * Copyright 2018-2019 NXP 4 */ 5 6#ifndef __CONTAINER_HEADER_H_ 7#define __CONTAINER_HEADER_H_ 8 9#include <linux/sizes.h> 10#include <linux/types.h> 11 12#define IV_MAX_LEN 32 13#define HASH_MAX_LEN 64 14 15#define CONTAINER_HDR_ALIGNMENT 0x400 16#define CONTAINER_HDR_EMMC_OFFSET 0 17#define CONTAINER_HDR_MMCSD_OFFSET SZ_32K 18#define CONTAINER_HDR_QSPI_OFFSET SZ_4K 19#define CONTAINER_HDR_NAND_OFFSET SZ_128M 20 21#define CONTAINER_HDR_TAG 0x87 22#define CONTAINER_HDR_VERSION 0 23 24struct container_hdr { 25 u8 version; 26 u8 length_lsb; 27 u8 length_msb; 28 u8 tag; 29 u32 flags; 30 u16 sw_version; 31 u8 fuse_version; 32 u8 num_images; 33 u16 sig_blk_offset; 34 u16 reserved; 35} __packed; 36 37struct boot_img_t { 38 u32 offset; 39 u32 size; 40 u64 dst; 41 u64 entry; 42 u32 hab_flags; 43 u32 meta; 44 u8 hash[HASH_MAX_LEN]; 45 u8 iv[IV_MAX_LEN]; 46} __packed; 47 48struct signature_block_hdr { 49 u8 version; 50 u8 length_lsb; 51 u8 length_msb; 52 u8 tag; 53 u16 cert_offset; 54 u16 srk_table_offset; 55 u16 signature_offset; 56 u16 blob_offset; 57 u32 reserved; 58} __packed; 59 60struct generate_key_blob_hdr { 61 u8 version; 62 u8 length_lsb; 63 u8 length_msb; 64 u8 tag; 65 u8 flags; 66 u8 size; 67 u8 algorithm; 68 u8 mode; 69} __packed; 70 71int get_container_size(ulong addr, u16 *header_length); 72 73static inline bool valid_container_hdr(struct container_hdr *container) 74{ 75 return container->tag == CONTAINER_HDR_TAG && 76 container->version == CONTAINER_HDR_VERSION; 77} 78#endif 79