X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fimage.h;h=95d5934344cffb5add1ddbc546126690b7a1689c;hb=252d41f1ae59974c8a9120c994c0688fb9cec2b7;hp=fcfe730204a63e54f9063ad270050e84a0d1d540;hpb=75fd49c836d9a1750c9b6d86c0511b990fbe9fa8;p=u-boot diff --git a/include/image.h b/include/image.h index fcfe730204..95d5934344 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 @@ -21,6 +20,7 @@ /* Define this to avoid #ifdefs later on */ struct lmb; +struct fdt_region; #ifdef USE_HOSTCC #include @@ -53,7 +53,7 @@ struct lmb; #if IMAGE_ENABLE_FIT #include -#include +#include #include # ifdef CONFIG_SPL_BUILD # ifdef CONFIG_SPL_CRC32_SUPPORT @@ -152,6 +152,8 @@ enum { IH_OS_OSE, /* OSE */ 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, }; @@ -189,6 +191,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, }; @@ -256,7 +259,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 */ @@ -265,10 +268,14 @@ 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_COUNT, /* Number of image types */ }; @@ -373,7 +380,7 @@ typedef struct bootm_headers { bd_t *kbd; #endif - int verify; /* getenv("verify")[0] != 'n' */ + int verify; /* env_get("verify")[0] != 'n' */ #define BOOTM_STATE_START (0x00000001) #define BOOTM_STATE_FINDOS (0x00000002) @@ -557,7 +564,6 @@ ulong genimg_get_kernel_addr_fit(char * const img_addr, ulong genimg_get_kernel_addr(char * const img_addr); int genimg_get_format(const void *img_addr); int genimg_has_config(bootm_headers_t *images); -ulong genimg_get_image(ulong img_addr); int boot_get_fpga(int argc, char * const argv[], bootm_headers_t *images, uint8_t arch, const ulong *ld_start, ulong * const ld_len); @@ -576,7 +582,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. @@ -592,6 +598,31 @@ int boot_get_loadable(int argc, char * const argv[], bootm_headers_t *images, int boot_get_setup_fit(bootm_headers_t *images, uint8_t arch, ulong *setup_start, ulong *setup_len); +/** + * boot_get_fdt_fit() - load a DTB from a FIT file (applying overlays) + * + * This deals with all aspects of loading an DTB from a FIT. + * The correct base image based on configuration will be selected, and + * then any overlays specified will be applied (as present in fit_uname_configp). + * + * @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") 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 + * exit points to the selected configuration name. + * @param arch Expected architecture (IH_ARCH_...) + * @param datap Returns address of loaded image + * @param lenp Returns length of loaded image + * + * @return node offset of base image, or -ve error code on error + */ +int boot_get_fdt_fit(bootm_headers_t *images, ulong addr, + const char **fit_unamep, const char **fit_uname_configp, + int arch, ulong *datap, ulong *lenp); + /** * fit_image_load() - load an image from a FIT * @@ -605,10 +636,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 image_type Required image type (IH_TYPE_...). If this is @@ -631,25 +662,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) @@ -769,9 +800,9 @@ static inline void image_set_name(image_header_t *hdr, const char *name) int image_check_hcrc(const image_header_t *hdr); int image_check_dcrc(const image_header_t *hdr); #ifndef USE_HOSTCC -ulong getenv_bootm_low(void); -phys_size_t getenv_bootm_size(void); -phys_size_t getenv_bootm_mapsize(void); +ulong env_get_bootm_low(void); +phys_size_t env_get_bootm_size(void); +phys_size_t env_get_bootm_mapsize(void); #endif void memmove_wd(void *to, void *from, size_t len, ulong chunksz); @@ -844,6 +875,15 @@ 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 + * @return 0 if OK, 1 if the image was not recognised + */ +int booti_setup(ulong image, ulong *relocated_addr, ulong *size); /*******************************************************************/ /* New uImage format specific code (prefixed with fit_) */ @@ -861,6 +901,7 @@ int bootz_setup(ulong image, ulong *start, ulong *end); /* image node */ #define FIT_DATA_PROP "data" +#define FIT_DATA_POSITION_PROP "data-position" #define FIT_DATA_OFFSET_PROP "data-offset" #define FIT_DATA_SIZE_PROP "data-size" #define FIT_TIMESTAMP_PROP "timestamp" @@ -880,6 +921,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 @@ -942,7 +985,11 @@ int fit_image_get_entry(const void *fit, int noffset, ulong *entry); int fit_image_get_data(const void *fit, int noffset, const void **data, size_t *size); 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, @@ -974,6 +1021,8 @@ int fit_add_verification_data(const char *keydir, void *keydest, void *fit, const char *comment, int require_keys, const char *engine_id); +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); @@ -992,16 +1041,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); @@ -1233,6 +1280,8 @@ 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); void android_print_contents(const struct andr_img_hdr *hdr); @@ -1270,6 +1319,24 @@ int board_fit_config_name_match(const char *name); void board_fit_image_post_process(void **p_image, size_t *p_size); #endif /* CONFIG_SPL_FIT_IMAGE_POST_PROCESS */ +#define FDT_ERROR ((ulong)(-1)) + +ulong fdt_getprop_u32(const void *fdt, int node, const char *prop); + +/** + * fit_find_config_node() - Find the node for the best DTB in a FIT image + * + * A FIT image contains one or more DTBs. This function parses the + * configurations described in the FIT images and returns the node of + * the first matching DTB. To check if a DTB matches a board, this function + * calls board_fit_config_name_match(). If no matching DTB is found, it returns + * the node described by the default configuration if it exists. + * + * @fdt: pointer to flat device tree + * @return the node if found, -ve otherwise + */ +int fit_find_config_node(const void *fdt); + /** * Mapping of image types to function handlers to be invoked on the associated * loaded images