X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=include%2Fimage.h;h=889305cbefdb932c994a290174f51fa850aa0832;hb=b4ee6daad7a2604ca9466b2ba48de86cc27d381f;hp=a128a623e51bc0c0a229385804042e1248c20abb;hpb=6b308494c5d5ef0cbdb76af4628b3478d0445b41;p=platform%2Fkernel%2Fu-boot.git diff --git a/include/image.h b/include/image.h index a128a62..889305c 100644 --- a/include/image.h +++ b/include/image.h @@ -1,10 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ /* * (C) Copyright 2008 Semihalf * * (C) Copyright 2000-2005 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. - * - * SPDX-License-Identifier: GPL-2.0+ ******************************************************************** * NOTE: This header file defines an interface to U-Boot. Including * this (unmodified) header file in another file is considered normal @@ -18,9 +17,11 @@ #include "compiler.h" #include +#include /* Define this to avoid #ifdefs later on */ struct lmb; +struct fdt_region; #ifdef USE_HOSTCC #include @@ -29,6 +30,7 @@ struct lmb; #define IMAGE_ENABLE_FIT 1 #define IMAGE_ENABLE_OF_LIBFDT 1 #define CONFIG_FIT_VERBOSE 1 /* enable fit_format_{error,warning}() */ +#define CONFIG_FIT_ENABLE_RSASSA_PSS_SUPPORT 1 #define CONFIG_FIT_ENABLE_SHA256_SUPPORT #define CONFIG_SHA1 #define CONFIG_SHA256 @@ -53,7 +55,7 @@ struct lmb; #if IMAGE_ENABLE_FIT #include -#include +#include #include # ifdef CONFIG_SPL_BUILD # ifdef CONFIG_SPL_CRC32_SUPPORT @@ -124,7 +126,8 @@ enum ih_category { * Operating System Codes * * The following are exposed to uImage header. - * Do not change values for backward compatibility. + * New IDs *MUST* be appended at the end of the list and *NEVER* + * inserted for backward compatibility. */ enum { IH_OS_INVALID = 0, /* Invalid OS */ @@ -153,6 +156,7 @@ enum { IH_OS_PLAN9, /* Plan 9 */ IH_OS_OPENRTOS, /* OpenRTOS */ IH_OS_ARM_TRUSTED_FIRMWARE, /* ARM Trusted Firmware */ + IH_OS_TEE, /* Trusted Execution Environment */ IH_OS_COUNT, }; @@ -161,7 +165,8 @@ enum { * CPU Architecture Codes (supported by Linux) * * The following are exposed to uImage header. - * Do not change values for backward compatibility. + * New IDs *MUST* be appended at the end of the list and *NEVER* + * inserted for backward compatibility. */ enum { IH_ARCH_INVALID = 0, /* Invalid CPU */ @@ -190,6 +195,7 @@ enum { IH_ARCH_ARC, /* Synopsys DesignWare ARC */ IH_ARCH_X86_64, /* AMD x86_64, Intel and Via */ IH_ARCH_XTENSA, /* Xtensa */ + IH_ARCH_RISCV, /* RISC-V */ IH_ARCH_COUNT, }; @@ -233,7 +239,8 @@ enum { * as command interpreter (=> Shell Scripts). * * The following are exposed to uImage header. - * Do not change values for backward compatibility. + * New IDs *MUST* be appended at the end of the list and *NEVER* + * inserted for backward compatibility. */ enum { @@ -257,7 +264,7 @@ enum { IH_TYPE_MXSIMAGE, /* Freescale MXSBoot Image */ IH_TYPE_GPIMAGE, /* TI Keystone GPHeader Image */ IH_TYPE_ATMELIMAGE, /* ATMEL ROM bootable Image */ - IH_TYPE_SOCFPGAIMAGE, /* Altera SOCFPGA Preloader */ + IH_TYPE_SOCFPGAIMAGE, /* Altera SOCFPGA CV/AV Preloader */ IH_TYPE_X86_SETUP, /* x86 setup.bin Image */ IH_TYPE_LPC32XXIMAGE, /* x86 setup.bin Image */ IH_TYPE_LOADABLE, /* A list of typeless images */ @@ -266,11 +273,17 @@ enum { IH_TYPE_RKSPI, /* Rockchip SPI image */ IH_TYPE_ZYNQIMAGE, /* Xilinx Zynq Boot Image */ IH_TYPE_ZYNQMPIMAGE, /* Xilinx ZynqMP Boot Image */ + IH_TYPE_ZYNQMPBIF, /* Xilinx ZynqMP Boot Image (bif) */ IH_TYPE_FPGA, /* FPGA Image */ IH_TYPE_VYBRIDIMAGE, /* VYBRID .vyb Image */ IH_TYPE_TEE, /* Trusted Execution Environment OS Image */ IH_TYPE_FIRMWARE_IVT, /* Firmware Image with HABv4 IVT */ IH_TYPE_PMMC, /* TI Power Management Micro-Controller Firmware */ + IH_TYPE_STM32IMAGE, /* STMicroelectronics STM32 Image */ + IH_TYPE_SOCFPGAIMAGE_V1, /* Altera SOCFPGA A10 Preloader */ + IH_TYPE_MTKIMAGE, /* MediaTek BootROM loadable Image */ + IH_TYPE_IMX8MIMAGE, /* Freescale IMX8MBoot Image */ + IH_TYPE_IMX8IMAGE, /* Freescale IMX8Boot Image */ IH_TYPE_COUNT, /* Number of image types */ }; @@ -279,7 +292,8 @@ enum { * Compression Types * * The following are exposed to uImage header. - * Do not change values for backward compatibility. + * New IDs *MUST* be appended at the end of the list and *NEVER* + * inserted for backward compatibility. */ enum { IH_COMP_NONE = 0, /* No Compression Used */ @@ -292,6 +306,7 @@ enum { IH_COMP_COUNT, }; +#define LZ4F_MAGIC 0x184D2204 /* LZ4 Magic Number */ #define IH_MAGIC 0x27051956 /* Image Magic Number */ #define IH_NMLEN 32 /* Image Name Length */ @@ -577,7 +592,7 @@ int boot_get_ramdisk(int argc, char * const argv[], bootm_headers_t *images, * boot_get_loadable() will take the given FIT configuration, and look * for a field named "loadables". Loadables, is a list of elements in * the FIT given as strings. exe: - * loadables = "linux_kernel@1", "fdt@2"; + * loadables = "linux_kernel", "fdt-2"; * this function will attempt to parse each string, and load the * corresponding element from the FIT into memory. Once placed, * no aditional actions are taken. @@ -603,10 +618,10 @@ int boot_get_setup_fit(bootm_headers_t *images, uint8_t arch, * @param images Boot images structure * @param addr Address of FIT in memory * @param fit_unamep On entry this is the requested image name - * (e.g. "kernel@1") or NULL to use the default. On exit + * (e.g. "kernel") or NULL to use the default. On exit * points to the selected image name * @param fit_uname_configp On entry this is the requested configuration - * name (e.g. "conf@1") or NULL to use the default. On + * name (e.g. "conf-1") or NULL to use the default. On * exit points to the selected configuration name. * @param arch Expected architecture (IH_ARCH_...) * @param datap Returns address of loaded image @@ -631,10 +646,10 @@ int boot_get_fdt_fit(bootm_headers_t *images, ulong addr, * @param images Boot images structure * @param addr Address of FIT in memory * @param fit_unamep On entry this is the requested image name - * (e.g. "kernel@1") or NULL to use the default. On exit + * (e.g. "kernel") or NULL to use the default. On exit * points to the selected image name * @param fit_uname_configp On entry this is the requested configuration - * name (e.g. "conf@1") or NULL to use the default. On + * name (e.g. "conf-1") or NULL to use the default. On * exit points to the selected configuration name. * @param arch Expected architecture (IH_ARCH_...) * @param image_type Required image type (IH_TYPE_...). If this is @@ -657,25 +672,25 @@ int fit_image_load(bootm_headers_t *images, ulong addr, /** * fit_get_node_from_config() - Look up an image a FIT by type * - * This looks in the selected conf@ node (images->fit_uname_cfg) for a + * This looks in the selected conf- node (images->fit_uname_cfg) for a * particular image type (e.g. "kernel") and then finds the image that is * referred to. * * For example, for something like: * * images { - * kernel@1 { + * kernel { * ... * }; * }; * configurations { - * conf@1 { - * kernel = "kernel@1"; + * conf-1 { + * kernel = "kernel"; * }; * }; * * the function will return the node offset of the kernel@1 node, assuming - * that conf@1 is the chosen configuration. + * that conf-1 is the chosen configuration. * * @param images Boot images structure * @param prop_name Property name to look up (FIT_..._PROP) @@ -870,6 +885,17 @@ int image_setup_linux(bootm_headers_t *images); */ int bootz_setup(ulong image, ulong *start, ulong *end); +/** + * Return the correct start address and size of a Linux aarch64 Image. + * + * @image: Address of image + * @start: Returns start address of image + * @size : Returns size image + * @force_reloc: Ignore image->ep field, always place image to RAM start + * @return 0 if OK, 1 if the image was not recognised + */ +int booti_setup(ulong image, ulong *relocated_addr, ulong *size, + bool force_reloc); /*******************************************************************/ /* New uImage format specific code (prefixed with fit_) */ @@ -907,6 +933,8 @@ int bootz_setup(ulong image, ulong *start, ulong *end); #define FIT_DEFAULT_PROP "default" #define FIT_SETUP_PROP "setup" #define FIT_FPGA_PROP "fpga" +#define FIT_FIRMWARE_PROP "firmware" +#define FIT_STANDALONE_PROP "standalone" #define FIT_MAX_HASH_LEN HASH_MAX_DIGEST_SIZE @@ -972,6 +1000,8 @@ int fit_image_get_data_offset(const void *fit, int noffset, int *data_offset); int fit_image_get_data_position(const void *fit, int noffset, int *data_position); int fit_image_get_data_size(const void *fit, int noffset, int *data_size); +int fit_image_get_data_and_size(const void *fit, int noffset, + const void **data, size_t *size); int fit_image_hash_get_algo(const void *fit, int noffset, char **algo); int fit_image_hash_get_value(const void *fit, int noffset, uint8_t **value, @@ -988,6 +1018,7 @@ int fit_set_timestamp(void *fit, int noffset, time_t timestamp); * @comment: Comment to add to signature nodes * @require_keys: Mark all keys as 'required' * @engine_id: Engine to use for signing + * @cmdname: Command name used when reporting errors * * Adds hash values for all component images in the FIT blob. * Hashes are calculated for all component images which have hash subnodes @@ -1001,8 +1032,10 @@ int fit_set_timestamp(void *fit, int noffset, time_t timestamp); */ int fit_add_verification_data(const char *keydir, void *keydest, void *fit, const char *comment, int require_keys, - const char *engine_id); + const char *engine_id, const char *cmdname); +int fit_image_verify_with_data(const void *fit, int image_noffset, + const void *data, size_t size); int fit_image_verify(const void *fit, int noffset); int fit_config_verify(const void *fit, int conf_noffset); int fit_all_image_verify(const void *fit); @@ -1021,16 +1054,14 @@ int fit_conf_get_node(const void *fit, const char *conf_uname); * @noffset: Offset of conf@xxx node to check * @prop_name: Property to read from the conf node * - * The conf@ nodes contain references to other nodes, using properties - * like 'kernel = "kernel@1"'. Given such a property name (e.g. "kernel"), + * The conf- nodes contain references to other nodes, using properties + * like 'kernel = "kernel"'. Given such a property name (e.g. "kernel"), * return the offset of the node referred to (e.g. offset of node - * "/images/kernel@1". + * "/images/kernel". */ int fit_conf_get_prop_node(const void *fit, int noffset, const char *prop_name); -void fit_conf_print(const void *fit, int noffset, const char *p); - int fit_check_ramdisk(const void *fit, int os_noffset, uint8_t arch, int verify); @@ -1077,6 +1108,7 @@ struct image_sign_info { int node_offset; /* Offset of signature node */ const char *name; /* Algorithm name */ struct checksum_algo *checksum; /* Checksum algorithm information */ + struct padding_algo *padding; /* Padding algorithm information */ struct crypto_algo *crypto; /* Crypto algorithm information */ const void *fdt_blob; /* FDT containing public keys */ int required_keynode; /* Node offset of key to use: -1=any */ @@ -1162,6 +1194,13 @@ struct crypto_algo { uint8_t *sig, uint sig_len); }; +struct padding_algo { + const char *name; + int (*verify)(struct image_sign_info *info, + uint8_t *pad, int pad_len, + const uint8_t *hash, int hash_len); +}; + /** * image_get_checksum_algo() - Look up a checksum algorithm * @@ -1179,6 +1218,14 @@ struct checksum_algo *image_get_checksum_algo(const char *full_name); struct crypto_algo *image_get_crypto_algo(const char *full_name); /** + * image_get_padding_algo() - Look up a padding algorithm + * + * @param name Name of padding algorithm + * @return pointer to algorithm information, or NULL if not found + */ +struct padding_algo *image_get_padding_algo(const char *name); + +/** * fit_image_verify_required_sigs() - Verify signatures marked as 'required' * * @fit: FIT to check @@ -1262,8 +1309,11 @@ int android_image_get_kernel(const struct andr_img_hdr *hdr, int verify, ulong *os_data, ulong *os_len); int android_image_get_ramdisk(const struct andr_img_hdr *hdr, ulong *rd_data, ulong *rd_len); +int android_image_get_second(const struct andr_img_hdr *hdr, + ulong *second_data, ulong *second_len); ulong android_image_get_end(const struct andr_img_hdr *hdr); ulong android_image_get_kload(const struct andr_img_hdr *hdr); +ulong android_image_get_kcomp(const struct andr_img_hdr *hdr); void android_print_contents(const struct andr_img_hdr *hdr); #endif /* CONFIG_ANDROID_BOOT_IMAGE */