summaryrefslogtreecommitdiff
path: root/include/image.h
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2022-10-20 18:23:03 -0600
committerTom Rini <trini@konsulko.com>2022-10-31 11:02:44 -0400
commit44ad35a0f699b0b49ef6efaa1405b6f99c703ea8 (patch)
tree5e747333f41e62e7641ed2d968c14890820359e3 /include/image.h
parentb2d93c6aaa99f3f90470c0df3e49bd5ed265d350 (diff)
image: Add the concept of a phase to FIT
We want to be able to mark an image as related to a phase, so we can easily load all the images for SPL or for U-Boot proper. Add this to the FIT specification, along with some access functions. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'include/image.h')
-rw-r--r--include/image.h74
1 files changed, 72 insertions, 2 deletions
diff --git a/include/image.h b/include/image.h
index 92efec0f04..7c3dcc407c 100644
--- a/include/image.h
+++ b/include/image.h
@@ -58,6 +58,7 @@ enum ih_category {
IH_COMP,
IH_OS,
IH_TYPE,
+ IH_PHASE,
IH_COUNT,
};
@@ -184,8 +185,7 @@ enum {
* New IDs *MUST* be appended at the end of the list and *NEVER*
* inserted for backward compatibility.
*/
-
-enum {
+enum image_type_t {
IH_TYPE_INVALID = 0, /* Invalid Image */
IH_TYPE_STANDALONE, /* Standalone Program */
IH_TYPE_KERNEL, /* OS Kernel Image */
@@ -252,6 +252,59 @@ enum {
IH_COMP_COUNT,
};
+/**
+ * Phases - images intended for particular U-Boot phases (SPL, etc.)
+ *
+ * @IH_PHASE_NONE: No phase information, can be loaded by any phase
+ * @IH_PHASE_U_BOOT: Only for U-Boot proper
+ * @IH_PHASE_SPL: Only for SPL
+ */
+enum image_phase_t {
+ IH_PHASE_NONE = 0,
+ IH_PHASE_U_BOOT,
+ IH_PHASE_SPL,
+
+ IH_PHASE_COUNT,
+};
+
+#define IMAGE_PHASE_SHIFT 8
+#define IMAGE_PHASE_MASK (0xff << IMAGE_PHASE_SHIFT)
+#define IMAGE_TYPE_MASK 0xff
+
+/**
+ * image_ph() - build a composite value combining and type
+ *
+ * @phase: Image phase value
+ * @type: Image type value
+ * Returns: Composite value containing both
+ */
+static inline int image_ph(enum image_phase_t phase, enum image_type_t type)
+{
+ return type | (phase << IMAGE_PHASE_SHIFT);
+}
+
+/**
+ * image_ph_phase() - obtain the phase from a composite phase/type value
+ *
+ * @image_ph_type: Composite value to convert
+ * Returns: Phase value taken from the composite value
+ */
+static inline int image_ph_phase(int image_ph_type)
+{
+ return (image_ph_type & IMAGE_PHASE_MASK) >> IMAGE_PHASE_SHIFT;
+}
+
+/**
+ * image_ph_type() - obtain the type from a composite phase/type value
+ *
+ * @image_ph_type: Composite value to convert
+ * Returns: Type value taken from the composite value
+ */
+static inline int image_ph_type(int image_ph_type)
+{
+ return image_ph_type & IMAGE_TYPE_MASK;
+}
+
#define LZ4F_MAGIC 0x184D2204 /* LZ4 Magic Number */
#define IH_MAGIC 0x27051956 /* Image Magic Number */
#define IH_NMLEN 32 /* Image Name Length */
@@ -438,6 +491,22 @@ const char *genimg_get_os_short_name(uint8_t comp);
const char *genimg_get_arch_name(uint8_t arch);
/**
+ * genimg_get_phase_name() - Get the friendly name for a phase
+ *
+ * @phase: Phase value to look up
+ * Returns: Friendly name for the phase (e.g. "U-Boot phase")
+ */
+const char *genimg_get_phase_name(enum image_phase_t phase);
+
+/**
+ * genimg_get_phase_id() - Convert a phase name to an ID
+ *
+ * @name: Name to convert (e.g. "u-boot")
+ * Returns: ID for that phase (e.g. IH_PHASE_U_BOOT)
+ */
+int genimg_get_phase_id(const char *name);
+
+/**
* genimg_get_arch_short_name() - get the short name for an architecture
*
* @param arch Architecture type (IH_ARCH_...)
@@ -955,6 +1024,7 @@ int booti_setup(ulong image, ulong *relocated_addr, ulong *size,
#define FIT_FPGA_PROP "fpga"
#define FIT_FIRMWARE_PROP "firmware"
#define FIT_STANDALONE_PROP "standalone"
+#define FIT_PHASE_PROP "phase"
#define FIT_MAX_HASH_LEN HASH_MAX_DIGEST_SIZE