Hi Joe, > Hi Lukasz, > > On Sun, Jul 12, 2015 at 10:30 AM, Lukasz Majewski > <l.majew...@majess.pl> wrote: > > This commit adds initial support for using tftp for downloading and > > upgrading firmware on the device. > > > > Signed-off-by: Lukasz Majewski <l.majew...@majess.pl> > > --- > > drivers/dfu/Makefile | 1 + > > drivers/dfu/dfu_tftp.c | 76 > > ++++++++++++++++++++++++++++++++++++++++++++++++++ > > include/dfu.h | 11 ++++++++ 3 files changed, 88 > > insertions(+) create mode 100644 drivers/dfu/dfu_tftp.c > > > > diff --git a/drivers/dfu/Makefile b/drivers/dfu/Makefile > > index 5cc535e..43249ce 100644 > > --- a/drivers/dfu/Makefile > > +++ b/drivers/dfu/Makefile > > @@ -10,3 +10,4 @@ obj-$(CONFIG_DFU_MMC) += dfu_mmc.o > > obj-$(CONFIG_DFU_NAND) += dfu_nand.o > > obj-$(CONFIG_DFU_RAM) += dfu_ram.o > > obj-$(CONFIG_DFU_SF) += dfu_sf.o > > +obj-$(CONFIG_DFU_TFTP) += dfu_tftp.o > > diff --git a/drivers/dfu/dfu_tftp.c b/drivers/dfu/dfu_tftp.c > > new file mode 100644 > > index 0000000..26539f2 > > --- /dev/null > > +++ b/drivers/dfu/dfu_tftp.c > > @@ -0,0 +1,76 @@ > > +/* > > + * (C) Copyright 2015 > > + * Lukasz Majewski <l.majew...@majess.pl> > > + * > > + * SPDX-License-Identifier: GPL-2.0+ > > + */ > > + > > +#include <common.h> > > +#include <malloc.h> > > +#include <errno.h> > > +#include <dfu.h> > > + > > +int dfu_tftp_write(char *dfu_entity_name, unsigned int addr, > > unsigned int len) +{ > > + char *s, *sb, *interface, *devstring; > > + int alt_setting_num, ret; > > + struct dfu_entity *dfu; > > + > > + debug("%s: name: %s addr: 0x%x len: %d\n", __func__, > > dfu_entity_name, > > + addr, len); > > + > > + interface = getenv("update_tftp_dfu_interface"); > > + if (interface == NULL) { > > + error("TFTP DFU: 'interface' not defined\n"); > > + return -EINVAL; > > + } > > + > > + devstring = getenv("update_tftp_dfu_devstring"); > > + if (devstring == NULL) { > > + error("TFTP DFU: 'devstring' not defined\n"); > > + return -EINVAL; > > + } > > It would be great if these env vars could be moved to command > parameters.
Those parameters are necessary to perform update (via update_tftp()) during boot time. Normally - when user call 'dfutftp' command he/she needs to specify this informaiton. (e.g. 'dfutftp 0 mmc 1'). > > > + > > + ret = dfu_init_env_entities(interface, devstring); > > + if (ret) > > + goto done; > > + > > + /* > > + * We need to copy name pointed by *dfu_entity_name since > > this text > > + * is the integral part of the FDT image. > > + * Any implicit modification (i.e. done by strsep()) will > > corrupt > > + * the FDT image and prevent other images to be stored. > > + */ > > + s = strdup(dfu_entity_name); > > + sb = s; > > + if (!s) { > > + ret = -ENOMEM; > > + goto done; > > + } > > + > > + strsep(&s, "@"); > > + debug("%s: image name: %s strlen: %d\n", __func__, sb, > > strlen(sb)); + > > + alt_setting_num = dfu_get_alt(sb); > > + free(sb); > > + if (alt_setting_num < 0) { > > + error("Alt setting [%d] to write not found!", > > + alt_setting_num); > > + ret = -ENODEV; > > + goto done; > > + } > > + > > + dfu = dfu_get_entity(alt_setting_num); > > + if (!dfu) { > > + error("DFU entity for alt: %d not found!", > > alt_setting_num); > > + ret = -ENODEV; > > + goto done; > > + } > > + > > + ret = dfu_write_from_mem_addr(dfu, (void *)addr, len); > > + > > +done: > > + dfu_free_entities(); > > + > > + return ret; > > +} > > diff --git a/include/dfu.h b/include/dfu.h > > index 7d31abd..adad863 100644 > > --- a/include/dfu.h > > +++ b/include/dfu.h > > @@ -207,5 +207,16 @@ static inline int dfu_fill_entity_sf(struct > > dfu_entity *dfu, char *devstr, } > > #endif > > > > +#ifdef CONFIG_DFU_TFTP > > +int dfu_tftp_write(char *dfu_entity_name, unsigned int addr, > > unsigned int len); +#else > > +static inline int dfu_tftp_write(char *dfu_entity_name, unsigned > > int addr, > > + unsigned int len) > > +{ > > + puts("TFTP write support for DFU not available!\n"); > > + return -1; > > This should be -ENOSYS probably. Good point - thanks! > > > +} > > +#endif > > + > > int dfu_add(struct usb_configuration *c); > > #endif /* __DFU_ENTITY_H_ */ > > -- > > 2.1.4 > > > > _______________________________________________ > > U-Boot mailing list > > U-Boot@lists.denx.de > > http://lists.denx.de/mailman/listinfo/u-boot Best regards, Lukasz Majewski
pgpCnlN10McDk.pgp
Description: OpenPGP digital signature
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot