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

B, Ravi ravibabu at ti.com
Mon Jul 25 15:08:22 CEST 2016


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.

>
>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 


More information about the U-Boot mailing list