From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vignesh R Date: Wed, 15 Feb 2017 16:37:51 +0530 Subject: [U-Boot] [PATCH v2] spl: net: Add FIT image support over network boot In-Reply-To: <20170208175142.6530-1-afd@ti.com> References: <20170208175142.6530-1-afd@ti.com> Message-ID: <4f8f4640-d531-04e3-1b49-28b6c965fb88@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 Hi, On Wednesday 08 February 2017 11:21 PM, Davis, Andrew wrote: > FIT support in the net boot case is much like the RAM boot case in that > we load our image to "load_addr" and pass a dummy read function into > "spl_load_simple_fit()". As the load address is no longer hard-coded to > the final execution address, RAW image loading will rely on "load_addr" > pointing to the execution address as they should have before. > [...] > #if defined(CONFIG_SPL_ETH_SUPPORT) || defined(CONFIG_SPL_USBETH_SUPPORT) > +static ulong spl_net_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 *)(load_addr + sector), count); > + return count; > +} > + > static int spl_net_load_image(struct spl_image_info *spl_image, > struct spl_boot_device *bootdev) > { > + struct image_header *header = (struct image_header *)load_addr; > int rv; > > env_init(); > env_relocate(); > setenv("autoload", "yes"); > - load_addr = CONFIG_SYS_TEXT_BASE - sizeof(struct image_header); This breaks when FIT image is not used (For example, breaks am335x_evm_usbspl_defconfig) Below snippet helps non FIT case: + if (!IS_ENABLED(CONFIG_SPL_LOAD_FIT)) + load_addr = CONFIG_SYS_TEXT_BASE - sizeof(struct image_header); + > rv = eth_initialize(); > if (rv == 0) { > printf("No Ethernet devices found\n"); > @@ -36,8 +46,22 @@ static int spl_net_load_image(struct spl_image_info *spl_image, > printf("Problem booting with BOOTP\n"); > return rv; > } > - return spl_parse_image_header(spl_image, > - (struct image_header *)load_addr); > + > + 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_net_load_read; > + rv = spl_load_simple_fit(spl_image, &load, 0, header); > + } else { > + debug("Legacy image\n"); > + > + rv = spl_parse_image_header(spl_image, header); > + } > + > + return rv; > } > #endif > > -- Regards Vignesh