vbe: Record which phases loaded using VBE
authorSimon Glass <sjg@chromium.org>
Fri, 21 Oct 2022 00:23:18 +0000 (18:23 -0600)
committerTom Rini <trini@konsulko.com>
Mon, 31 Oct 2022 15:04:00 +0000 (11:04 -0400)
We expect VPL and SPL to load using VBE. Add a record of this so we can
check it in U-Boot proper.

Signed-off-by: Simon Glass <sjg@chromium.org>
boot/vbe_simple_fw.c
include/bloblist.h
include/vbe.h

index fc05e9e..0a49d28 100644 (file)
@@ -9,6 +9,7 @@
 #define LOG_CATEGORY LOGC_BOOT
 
 #include <common.h>
+#include <bloblist.h>
 #include <bootdev.h>
 #include <bootflow.h>
 #include <bootmeth.h>
@@ -154,11 +155,17 @@ static int simple_load_from_image(struct spl_image_info *spl_image,
        struct udevice *meth, *bdev;
        struct simple_priv *priv;
        struct bootflow bflow;
+       struct vbe_handoff *handoff;
        int ret;
 
        if (spl_phase() != PHASE_VPL && spl_phase() != PHASE_SPL)
                return -ENOENT;
 
+       ret = bloblist_ensure_size(BLOBLISTT_VBE, sizeof(struct vbe_handoff),
+                                  0, (void **)&handoff);
+       if (ret)
+               return log_msg_ret("ro", ret);
+
        vbe_find_first_device(&meth);
        if (!meth)
                return log_msg_ret("vd", -ENODEV);
@@ -190,6 +197,9 @@ static int simple_load_from_image(struct spl_image_info *spl_image,
        /* this is not used from now on, so free it */
        bootflow_free(&bflow);
 
+       /* Record that VBE was used in this phase */
+       handoff->phases |= 1 << spl_phase();
+
        return 0;
 }
 SPL_LOAD_IMAGE_METHOD("vbe_simple", 5, BOOT_DEVICE_VBE,
index 9684bfd..2a2f170 100644 (file)
@@ -112,6 +112,7 @@ enum bloblist_tag_t {
         */
        BLOBLISTT_PROJECT_AREA = 0x8000,
        BLOBLISTT_U_BOOT_SPL_HANDOFF = 0x8000, /* Hand-off info from SPL */
+       BLOBLISTT_VBE           = 0x8001,       /* VBE per-phase state */
 
        /*
         * Vendor-specific tags are permitted here. Projects can be open source
index ece2697..5ede818 100644 (file)
@@ -26,6 +26,15 @@ enum vbe_phase_t {
 };
 
 /**
+ * struct vbe_handoff - information about VBE progress
+ *
+ * @phases: Indicates which phases used the VBE bootmeth (1 << PHASE_...)
+ */
+struct vbe_handoff {
+       u8 phases;
+};
+
+/**
  * vbe_phase() - get current VBE phase
  *
  * Returns: Current VBE phase