SPDX: Convert all of our single license tags to Linux Kernel style
[platform/kernel/u-boot.git] / include / image.h
index af98ed9..6a22c98 100644 (file)
@@ -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 <sys/types.h>
@@ -53,7 +53,7 @@ struct lmb;
 
 #if IMAGE_ENABLE_FIT
 #include <hash.h>
-#include <libfdt.h>
+#include <linux/libfdt.h>
 #include <fdt_support.h>
 # 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,
 };
@@ -270,6 +273,7 @@ enum {
        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_COUNT,                  /* Number of image types */
 };
@@ -558,7 +562,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);
@@ -577,7 +580,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 +606,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 +634,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 +660,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 +873,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_) */
@@ -887,6 +899,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"
@@ -906,6 +919,7 @@ 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_MAX_HASH_LEN       HASH_MAX_DIGEST_SIZE
 
@@ -968,6 +982,8 @@ 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_hash_get_algo(const void *fit, int noffset, char **algo);
@@ -1000,6 +1016,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);
@@ -1018,10 +1036,10 @@ 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);
@@ -1259,6 +1277,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);
@@ -1299,6 +1319,19 @@ void board_fit_image_post_process(void **p_image, size_t *p_size);
 #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);
 
 /**