spl: net: Add FIT image support over network boot
PATCH v4 1/1 spl: net: Add FIT image support over network boot
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, legacy image loading will require load_addr to be set correctly in the image header.
---
Changes from v3:
- Relocate legacy image according to its header
Changes from v2:
- Rebased on latest upstream/master
Changes from v1:
- move "spl_net_load_read" into #ifdef block as suggested by Vignesh
common/spl/spl_net.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-)
common/spl/spl_net.c +31 -3
@@ -11,19 +11,29 @@#include <errno.h> #include <spl.h> #include <net.h> +#include <libfdt.h> DECLARE_GLOBAL_DATA_PTR ;#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 ); rv =eth_initialize ();if (rv ==0 ) {printf ("No Ethernet devices found\n" );
@@ -36,8 +46,26 @@ 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); +if (rv) +return rv; + +memcpy ((void *)spl_image->load_addr, header, spl_image->size); + } + +return rv; }#endif
Signature · 1 line
2.11.0
PATCH v4 1/1 spl: net: Add FIT image support over network boot
Quoted 7 lines · Andrew F. Davis
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, legacy image loading will requireload_addrto be set correctly in the image header.Signed-off-by Andrew F. Davis <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20170410/d62940b2/attachment.sig>