On 7/22/23 15:27, Heinrich Schuchardt wrote: > Allow loading a FIT image via semihosting in SPL.
I had previously attempted this in [1], which is a more general approach. I put together a v4 earlier this year but I got sidetracked before I sent it out. I'll see if I can finish it up this week. --Sean [1] https://lore.kernel.org/u-boot/[email protected]/ > Signed-off-by: Heinrich Schuchardt <[email protected]> > --- > common/spl/spl_semihosting.c | 31 +++++++++++++++++++++++++++++++ > 1 file changed, 31 insertions(+) > > diff --git a/common/spl/spl_semihosting.c b/common/spl/spl_semihosting.c > index 5b5e842a11..f7dd289286 100644 > --- a/common/spl/spl_semihosting.c > +++ b/common/spl/spl_semihosting.c > @@ -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);

