From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lokesh Vutla Date: Wed, 18 May 2016 20:42:39 +0530 Subject: [U-Boot] [PATCH v2] SPL: FIT: Enable SPL_FIT_LOAD in RAM based boot mode In-Reply-To: <8e3d705c04c22e79959554093678775cdd84b4e3.1463504422.git.michal.simek@xilinx.com> References: <8e3d705c04c22e79959554093678775cdd84b4e3.1463504422.git.michal.simek@xilinx.com> Message-ID: <573C8667.10005@ti.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 5/17/2016 10:30 PM, Michal Simek wrote: > Support loading FIT in SPL for RAM bootmode. > CONFIG_SPL_LOAD_FIT_ADRESS points to address where FIT image is stored > in memory. > > Signed-off-by: Michal Simek > Reviewed-by: Simon Glass > --- > > Changes in v2: > - Fix empty line > - Fix addr name and remove SPL_LOAD_FIT macro > > common/spl/spl.c | 45 ++++++++++++++++++++++++++++++++++++--------- > 1 file changed, 36 insertions(+), 9 deletions(-) > > diff --git a/common/spl/spl.c b/common/spl/spl.c > index 0fc5b058be31..3faa751e4b43 100644 > --- a/common/spl/spl.c > +++ b/common/spl/spl.c > @@ -136,20 +136,47 @@ __weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image) > image_entry(); > } > > +#ifndef CONFIG_SPL_LOAD_FIT_ADDRESS > +# define CONFIG_SPL_LOAD_FIT_ADDRESS 0 > +#endif > + May be a good idea to default this to CONFIG_SYS_TEXT_BASE instead of 0? Other than that patch looks good to me. Reviewed-by: Lokesh Vutla Thanks and regards, Lokesh > #ifdef CONFIG_SPL_RAM_DEVICE > +static ulong spl_ram_load_read(struct spl_load_info *load, ulong sector, > + ulong count, void *buf) > +{ > + debug("%s: sector %lx, count %lx, buf %lx\n", > + __func__, sector, count, (ulong)buf); > + memcpy(buf, (void *)(CONFIG_SPL_LOAD_FIT_ADDRESS + sector), count); > + return count; > +} > + > static int spl_ram_load_image(void) > { > - const struct image_header *header; > + struct image_header *header; > > - /* > - * Get the header. It will point to an address defined by handoff > - * which will tell where the image located inside the flash. For > - * now, it will temporary fixed to address pointed by U-Boot. > - */ > - header = (struct image_header *) > - (CONFIG_SYS_TEXT_BASE - sizeof(struct image_header)); > + header = (struct image_header *)CONFIG_SPL_LOAD_FIT_ADDRESS; > > - spl_parse_image_header(header); > + if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) && > + image_get_magic(header) == FDT_MAGIC) { > + struct spl_load_info load; > + > + debug("Found FIT\n"); > + load.bl_len = 1; > + load.read = spl_ram_load_read; > + spl_load_simple_fit(&load, 0, header); > + } else { > + debug("Legacy image\n"); > + /* > + * Get the header. It will point to an address defined by > + * handoff which will tell where the image located inside > + * the flash. For now, it will temporary fixed to address > + * pointed by U-Boot. > + */ > + header = (struct image_header *) > + (CONFIG_SYS_TEXT_BASE - sizeof(struct image_header)); > + > + spl_parse_image_header(header); > + } > > return 0; > } >