This code allows using DFU defined mediums for storing data received via TFTP protocol.
It reuses legacy code at common/update.c. To run update_tftp() during boot one needs to define "update_tftp_exec_at_boot=true". Signed-off-by: Lukasz Majewski <l.majew...@majess.pl> --- common/update.c | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/common/update.c b/common/update.c index 75c6d62..f3ed036 100644 --- a/common/update.c +++ b/common/update.c @@ -18,6 +18,7 @@ #include <net.h> #include <tftp.h> #include <malloc.h> +#include <dfu.h> /* env variable holding the location of the update file */ #define UPDATE_FILE_ENV "updatefile" @@ -224,11 +225,18 @@ static int update_fit_getparams(const void *fit, int noffset, ulong *addr, int update_tftp(ulong addr) { - char *filename, *env_addr; - int images_noffset, ndepth, noffset; + char *filename, *env_addr, *fit_image_name; ulong update_addr, update_fladdr, update_size; - void *fit; + int images_noffset, ndepth, noffset; + bool update_tftp_dfu = false; int ret = 0; + void *fit; + + if (!getenv("update_tftp_exec_at_boot")) + return 0; + + if (getenv("update_tftp_dfu")) + update_tftp_dfu = true; /* use already present image */ if (addr) @@ -277,8 +285,8 @@ got_update_file: if (ndepth != 1) goto next_node; - printf("Processing update '%s' :", - fit_get_name(fit, noffset, NULL)); + fit_image_name = (char *)fit_get_name(fit, noffset, NULL); + printf("Processing update '%s' :", fit_image_name); if (!fit_image_verify(fit, noffset)) { printf("Error: invalid update hash, aborting\n"); @@ -294,10 +302,21 @@ got_update_file: ret = 1; goto next_node; } - if (update_flash(update_addr, update_fladdr, update_size)) { - printf("Error: can't flash update, aborting\n"); - ret = 1; - goto next_node; + + if (!update_tftp_dfu) { + if (update_flash(update_addr, update_fladdr, + update_size)) { + printf("Error: can't flash update, aborting\n"); + ret = 1; + goto next_node; + } + } else if (fit_image_check_type(fit, noffset, + IH_TYPE_FIRMWARE)) { + if (dfu_tftp_write(fit_image_name, + update_addr, update_size)) { + ret = 1; + goto next_node; + } } next_node: noffset = fdt_next_node(fit, noffset, &ndepth); -- 2.1.4 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot