[U-Boot] [RFC PATCH v2 3/5] spl: dfu: adding dfu support functions for SPL-DFU

Lukasz Majewski l.majewski at samsung.com
Mon Jul 25 16:16:34 CEST 2016


Hi Ravi,

> Hi Lukasz
> 
> >> Adding support functions to run dfu spl commands.
> >> 
> >> Signed-off-by: Ravi Babu <ravibabu at ti.com>
> >> ---
> >>  common/spl/Makefile  |    1 +
> >>  common/spl/spl_dfu.c |   57
> >> ++++++++++++++++++++++++++++++++++++++++++++++++++
> >> include/spl.h        |    8 +++++++ 3 files changed, 66
> >> insertions(+) create mode 100644 common/spl/spl_dfu.c
> >> 
> >> diff --git a/common/spl/Makefile b/common/spl/Makefile index 
> >> 2e0f695..0850da0 100644
> >> --- a/common/spl/Makefile
> >> +++ b/common/spl/Makefile
> >> @@ -21,4 +21,5 @@ obj-$(CONFIG_SPL_USB_SUPPORT) += spl_usb.o
> >>  obj-$(CONFIG_SPL_FAT_SUPPORT) += spl_fat.o
> >>  obj-$(CONFIG_SPL_EXT_SUPPORT) += spl_ext.o
> >>  obj-$(CONFIG_SPL_SATA_SUPPORT) += spl_sata.o
> >> +obj-$(CONFIG_SPL_DFU_SUPPORT) += spl_dfu.o
> >>  endif
> >> diff --git a/common/spl/spl_dfu.c b/common/spl/spl_dfu.c new file
> >> mode 100644 index 0000000..e8d0ba1
> >> --- /dev/null
> >> +++ b/common/spl/spl_dfu.c
> >> @@ -0,0 +1,57 @@
> >> +/*
> >> + * (C) Copyright 2016
> >> + * Texas Instruments, <www.ti.com>
> >> + *
> >> + * Ravi B <ravibabu at ti.com>
> >> + *
> >> + * SPDX-License-Identifier:	GPL-2.0+
> >> + */
> >> +#include <common.h>
> >> +#include <spl.h>
> >> +#include <linux/compiler.h>
> >> +#include <errno.h>
> >> +#include <watchdog.h>
> >> +#include <console.h>
> >> +#include <g_dnl.h>
> >> +#include <usb.h>
> >> +#include <dfu.h>
> >> +#include <environment.h>
> >> +
> >> +static int run_dfu(int usb_index, char *interface, char
> >> *devstring) {
> >> +	int ret;
> >> +
> >> +	ret = dfu_init_env_entities(interface, devstring);
> >> +	if (ret) {
> >> +		dfu_free_entities();
> >> +		goto exit;
> >> +	}
> >> +
> >> +	run_usb_dnl_gadget(usb_index, "usb_dnl_dfu");
> >> +exit:
> >> +	dfu_free_entities();
> >> +	return ret;
> >> +}
> >> +
> >> +int spl_dfu_cmd(int usbctrl, char *dfu_alt_info, char *interface, 
> >				     ^^^^^^^^^^^^^^ this is a bit
> >				     misleading.
> >				     I would rename it to
> >	"alt_info_str"
> 
> Ok. Will change to alt_info_str.
> 
> >
> >> char *devstr) +{
> >> +	char *str_env;
> >> +	int ret;
> >> +
> >> +	/* set default environment */
> >> +	set_default_env(0);
> 
> >set_default_env() accepts const char *s as the argument. Please
> >replace 0 -> NULL
> 
> Fine.
> 
> >
> >> +	str_env = getenv(dfu_alt_info);
> >> +	if (!str_env) {
> >> +		error("\"dfu_alt_info\" env variable not
> >> defined!\n");
> >> +		return -EINVAL;
> >> +	}
> >> +
> >> +	ret = setenv("dfu_alt_info", str_env);
> >> +	if (ret) {
> >> +		error("unable to set env variable
> >> \"dfu_alt_info\"!\n");
> >> +		return -EINVAL;
> >> +	}
> 
> >I'm a bit confused with this env flow.
> >
> >Is it required on your platform to:
> >
> >1. set_default_env(NULL) - which sets default envs (one which are
> >mostly defined at ./include/<board_config> file) in RAM
> 
> Actually not required, I felt it is better to use default environment
> inorder to get the latest environment from SPL which is being loaded.
> I will check once without set_default_env().
> 
> >
> >2. call getenv with "dfu_alt_info_ram", which reads this value from
> >RAM
> >
> >3. call setenv() to store already in ram available env variable to
> >some medium?
> 
> This step is required, "dfu_alt_info" is one referred by dfu driver.

But is it necessary to store "dfu_alt_info" env variable to memory
medium (e.g. eMMC) or is it enough to use the default value stored in
RAM?

> 
> >
> >If you want to store default envs in the medium (e.g. eMMC), I think
> >that it would be easier to call "saveenv".
> 
> Ok. 
> 
> >Otherwise, I would stay with default envs, since we only use this
> >u-boot for flashing other binaries.
> 
> Right.
> 
> Regards
> Ravi 
> 



-- 
Best regards,

Lukasz Majewski

Samsung R&D Institute Poland (SRPOL) | Linux Platform Group


More information about the U-Boot mailing list