diff options
author | Simon Glass <sjg@chromium.org> | 2023-07-30 11:16:50 -0600 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2023-08-10 18:34:54 -0600 |
commit | 4cfe4510f1e6e0cf2e346f5bd9de5d5be346238d (patch) | |
tree | 548a090ea3399e53a96baaa4721c1f6b5b16ff9e /boot/bootmeth_cros.c | |
parent | de30aa9a2f5659ecee599d61e1940b30c76d627c (diff) | |
download | u-boot-4cfe4510f1e6e0cf2e346f5bd9de5d5be346238d.tar.gz u-boot-4cfe4510f1e6e0cf2e346f5bd9de5d5be346238d.tar.bz2 u-boot-4cfe4510f1e6e0cf2e346f5bd9de5d5be346238d.zip |
bootstd: cros: Support a kernel on either partition
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>
Diffstat (limited to 'boot/bootmeth_cros.c')
-rw-r--r-- | boot/bootmeth_cros.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/boot/bootmeth_cros.c b/boot/bootmeth_cros.c index 385eca3738..7b25042bfe 100644 --- a/boot/bootmeth_cros.c +++ b/boot/bootmeth_cros.c @@ -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); |