]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
bootstd: cros: Support a kernel on either partition
authorSimon Glass <sjg@chromium.org>
Sun, 30 Jul 2023 17:16:50 +0000 (11:16 -0600)
committerSimon Glass <sjg@chromium.org>
Fri, 11 Aug 2023 00:34:54 +0000 (18:34 -0600)
ChromiumOS allows a kernel to be on either partition 2 or 4. Add support
for scanning both and using the first one we find with a suitable
signature.

Record the partition which is used.

Signed-off-by: Simon Glass <sjg@chromium.org>
boot/bootmeth_cros.c

index 385eca37381c504e05cbb537f1cc35c5c0515ba1..7b25042bfe56ebc7fc444639b163d71dc69fbef7 100644 (file)
@@ -13,6 +13,7 @@
 #include <bootdev.h>
 #include <bootflow.h>
 #include <bootmeth.h>
+#include <display_options.h>
 #include <dm.h>
 #include <malloc.h>
 #include <mapmem.h>
@@ -133,7 +134,7 @@ static int cros_read_bootflow(struct udevice *dev, struct bootflow *bflow)
        struct disk_partition info;
        const char *uuid = NULL;
        void *buf, *hdr;
-       int ret;
+       int part, ret;
 
        log_debug("starting, part=%d\n", bflow->part);
 
@@ -141,13 +142,19 @@ static int cros_read_bootflow(struct udevice *dev, struct bootflow *bflow)
        if (bflow->part)
                return log_msg_ret("max", -ENOENT);
 
-       /* Check partition 2 */
-       ret = scan_part(bflow->blk, 2, &info, &hdr);
-       if (ret)
-               return log_msg_ret("scan", ret);
-       bflow->part = 2;
+       /* Check partition 2 then 4 */
+       part = 2;
+       ret = scan_part(bflow->blk, part, &info, &hdr);
+       if (ret) {
+               part = 4;
+               ret = scan_part(bflow->blk, part, &info, &hdr);
+               if (ret)
+                       return log_msg_ret("scan", ret);
+       }
+       bflow->part = part;
 
-       log_info("Header at %lx\n", (ulong)map_to_sysmem(hdr));
+       log_info("Selected parition %d, header at %lx\n", bflow->part,
+                (ulong)map_to_sysmem(hdr));
        start = *(u32 *)(hdr + KERN_START);
        size = ALIGN(*(u32 *)(hdr + KERN_SIZE), desc->blksz);
        log_debug("Reading start %lx size %lx\n", start, size);