]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
spl: add FIT support to semihosting boot method
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Sat, 22 Jul 2023 19:27:48 +0000 (21:27 +0200)
committerTom Rini <trini@konsulko.com>
Mon, 14 Aug 2023 21:55:53 +0000 (17:55 -0400)
Allow loading a FIT image via semihosting in SPL.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
common/spl/spl_semihosting.c

index 5b5e842a11b1eb70169dd3b14d1b316bdbab170d..f7dd289286d442dc258faffbea017e8f11b313d9 100644 (file)
@@ -21,6 +21,23 @@ static int smh_read_full(long fd, void *memp, size_t len)
        return 0;
 }
 
+static ulong smh_fit_read(struct spl_load_info *load, ulong file_offset,
+                         ulong size, void *buf)
+{
+       long fd;
+       ulong ret;
+
+       fd = smh_open(load->filename, MODE_READ | MODE_BINARY);
+       if (fd < 0) {
+               log_debug("could not open %s: %ld\n", load->filename, fd);
+               return 0;
+       }
+       ret = smh_read(fd, buf, size);
+       smh_close(fd);
+
+       return ret;
+}
+
 static int spl_smh_load_image(struct spl_image_info *spl_image,
                              struct spl_boot_device *bootdev)
 {
@@ -49,6 +66,20 @@ static int spl_smh_load_image(struct spl_image_info *spl_image,
                goto out;
        }
 
+       if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) &&
+           image_get_magic(header) == FDT_MAGIC) {
+               struct spl_load_info load;
+
+               debug("Found FIT\n");
+               load.read = smh_fit_read;
+               load.bl_len = 1;
+               load.filename = filename;
+               load.priv = NULL;
+               smh_close(fd);
+
+               return spl_load_simple_fit(spl_image, &load, 0, header);
+       }
+
        ret = spl_parse_image_header(spl_image, bootdev, header);
        if (ret) {
                log_debug("failed to parse image header: %d\n", ret);