[U-Boot] [Uboot-stm32] [PATCH v3 12/15] stm32mp1: activate SET_DFU_ALT_INFO

Patrice CHOTARD patrice.chotard at st.com
Wed Oct 23 09:15:51 UTC 2019


Hi Patrick

On 10/14/19 9:28 AM, Patrick Delaunay wrote:
> Generate automatically dfu_alt_info for the supported device.
> The simple command "dfu 0" allows to start the dfu stack on usb 0
> for the supported devices:
> - dfu mtd for nand0
> - dfu mtd for nor0
> - dfu mmc for SDCard
> - dfu mmc for eMMC
> - dfu ram for images in DDR
>
> The DUF alternate use the "part", "partubi" and "mmcpart" options
> to select the correct MTD or GPT partition or the eMMC hw boot partition.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay at st.com>
> ---
>
> Changes in v3: None
> Changes in v2: None
>
>  board/st/stm32mp1/README     | 111 +++++++++++++++++++++++++++++++++++
>  board/st/stm32mp1/stm32mp1.c |  51 ++++++++++++++++
>  include/configs/stm32mp1.h   |  32 ++++++++++
>  3 files changed, 194 insertions(+)
>
> diff --git a/board/st/stm32mp1/README b/board/st/stm32mp1/README
> index c807e0842e..f2069bcefa 100644
> --- a/board/st/stm32mp1/README
> +++ b/board/st/stm32mp1/README
> @@ -390,3 +390,114 @@ B/ Automatically by using FIT feature and generic DISTRO bootcmd
>      the correct configuration
>  	=> stm32mp157c-ev1-m4
>  	=> stm32mp157c-dk2-m4
> +
> +11. DFU support
> +===============
> +
> +The DFU is supported on ST board.
> +The env variable dfu_alt_info is automatically build, and all
> +the memory present on the ST boards are exported.
> +
> +The mode is started by
> +
> +STM32MP> dfu 0
> +
> +On EV1 board:
> +
> +STM32MP> dfu 0 list
> +
> +DFU alt settings list:
> +dev: RAM alt: 0 name: uImage layout: RAM_ADDR
> +dev: RAM alt: 1 name: devicetree.dtb layout: RAM_ADDR
> +dev: RAM alt: 2 name: uramdisk.image.gz layout: RAM_ADDR
> +dev: eMMC alt: 3 name: sdcard_fsbl1 layout: RAW_ADDR
> +dev: eMMC alt: 4 name: sdcard_fsbl2 layout: RAW_ADDR
> +dev: eMMC alt: 5 name: sdcard_ssbl layout: RAW_ADDR
> +dev: eMMC alt: 6 name: sdcard_bootfs layout: RAW_ADDR
> +dev: eMMC alt: 7 name: sdcard_vendorfs layout: RAW_ADDR
> +dev: eMMC alt: 8 name: sdcard_rootfs layout: RAW_ADDR
> +dev: eMMC alt: 9 name: sdcard_userfs layout: RAW_ADDR
> +dev: eMMC alt: 10 name: emmc_fsbl1 layout: RAW_ADDR
> +dev: eMMC alt: 11 name: emmc_fsbl2 layout: RAW_ADDR
> +dev: eMMC alt: 12 name: emmc_ssbl layout: RAW_ADDR
> +dev: eMMC alt: 13 name: emmc_bootfs layout: RAW_ADDR
> +dev: eMMC alt: 14 name: emmc_vendorfs layout: RAW_ADDR
> +dev: eMMC alt: 15 name: emmc_rootfs layout: RAW_ADDR
> +dev: eMMC alt: 16 name: emmc_userfs layout: RAW_ADDR
> +dev: MTD alt: 17 name: nor_fsbl1 layout: RAW_ADDR
> +dev: MTD alt: 18 name: nor_fsbl2 layout: RAW_ADDR
> +dev: MTD alt: 19 name: nor_ssbl layout: RAW_ADDR
> +dev: MTD alt: 20 name: nor_env layout: RAW_ADDR
> +dev: MTD alt: 21 name: nand_fsbl layout: RAW_ADDR
> +dev: MTD alt: 22 name: nand_ssbl1 layout: RAW_ADDR
> +dev: MTD alt: 23 name: nand_ssbl2 layout: RAW_ADDR
> +dev: MTD alt: 24 name: nand_UBI layout: RAW_ADDR
> +dev: VIRT alt: 25 name: OTP layout: RAW_ADDR
> +dev: VIRT alt: 26 name: PMIC layout: RAW_ADDR
> +
> +All the supported device are exported for dfu-util tool:
> +
> +$> dfu-util -l
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=26, name="PMIC", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=25, name="OTP", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=24, name="nand_UBI", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=23, name="nand_ssbl2", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=22, name="nand_ssbl1", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=21, name="nand_fsbl", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=20, name="nor_env", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=19, name="nor_ssbl", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=18, name="nor_fsbl2", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=17, name="nor_fsbl1", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=16, name="emmc_userfs", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=15, name="emmc_rootfs", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=14, name="emmc_vendorfs", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=13, name="emmc_bootfs", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=12, name="emmc_ssbl", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=11, name="emmc_fsbl2", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=10, name="emmc_fsbl1", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=9, name="sdcard_userfs", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=8, name="sdcard_rootfs", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=7, name="sdcard_vendorfs", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=6, name="sdcard_bootfs", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=5, name="sdcard_ssbl", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=4, name="sdcard_fsbl2", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=3, name="sdcard_fsbl1", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=2, name="uramdisk.image.gz", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=1, name="devicetree.dtb", serial="002700333338511934383330"
> +Found DFU: [0483:5720] ver=9999, devnum=99, cfg=1, intf=0, alt=0, name="uImage", serial="002700333338511934383330"
> +
> +You can update the boot device:
> +
> +#SDCARD
> +$> dfu-util -d 0483:5720 -a 3 -D tf-a-stm32mp157c-ev1-trusted.stm32
> +$> dfu-util -d 0483:5720 -a 4 -D tf-a-stm32mp157c-ev1-trusted.stm32
> +$> dfu-util -d 0483:5720 -a 5 -D u-boot-stm32mp157c-ev1-trusted.img
> +$> dfu-util -d 0483:5720 -a 6 -D st-image-bootfs-openstlinux-weston-stm32mp1.ext4
> +$> dfu-util -d 0483:5720 -a 7 -D st-image-vendorfs-openstlinux-weston-stm32mp1.ext4
> +$> dfu-util -d 0483:5720 -a 8 -D st-image-weston-openstlinux-weston-stm32mp1.ext4
> +$> dfu-util -d 0483:5720 -a 9 -D st-image-userfs-openstlinux-weston-stm32mp1.ext4
> +
> +#EMMC
> +$> dfu-util -d 0483:5720 -a 10 -D tf-a-stm32mp157c-ev1-trusted.stm32
> +$> dfu-util -d 0483:5720 -a 11 -D tf-a-stm32mp157c-ev1-trusted.stm32
> +$> dfu-util -d 0483:5720 -a 12 -D u-boot-stm32mp157c-ev1-trusted.img
> +$> dfu-util -d 0483:5720 -a 13 -D st-image-bootfs-openstlinux-weston-stm32mp1.ext4
> +$> dfu-util -d 0483:5720 -a 14 -D st-image-vendorfs-openstlinux-weston-stm32mp1.ext4
> +$> dfu-util -d 0483:5720 -a 15 -D st-image-weston-openstlinux-weston-stm32mp1.ext4
> +$> dfu-util -d 0483:5720 -a 16 -D st-image-userfs-openstlinux-weston-stm32mp1.ext4
> +
> +#NOR
> +$> dfu-util -d 0483:5720 -a 17 -D tf-a-stm32mp157c-ev1-trusted.stm32
> +$> dfu-util -d 0483:5720 -a 18 -D tf-a-stm32mp157c-ev1-trusted.stm32
> +$> dfu-util -d 0483:5720 -a 19 -D u-boot-stm32mp157c-ev1-trusted.img
> +
> +#NAND (UBI partition used for NAND only boot or NOR + NAND boot)
> +$> dfu-util -d 0483:5720 -a 21 -D tf-a-stm32mp157c-ev1-trusted.stm32
> +$> dfu-util -d 0483:5720 -a 22 -D u-boot-stm32mp157c-ev1-trusted.img
> +$> dfu-util -d 0483:5720 -a 23 -D u-boot-stm32mp157c-ev1-trusted.img
> +$> dfu-util -d 0483:5720 -a 24 -D st-image-weston-openstlinux-weston-stm32mp1_nand_4_256_multivolume.ubi
> +
> +And you can also dump the OTP and the PMIC NVM with:
> +
> +$> dfu-util -d 0483:5720 -a 25 -U otp.bin
> +$> dfu-util -d 0483:5720 -a 26 -U pmic.bin
> diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c
> index 18f9b84876..62855988e9 100644
> --- a/board/st/stm32mp1/stm32mp1.c
> +++ b/board/st/stm32mp1/stm32mp1.c
> @@ -14,6 +14,7 @@
>  #include <generic-phy.h>
>  #include <i2c.h>
>  #include <led.h>
> +#include <memalign.h>
>  #include <misc.h>
>  #include <mtd.h>
>  #include <mtd_node.h>
> @@ -903,6 +904,56 @@ int ft_board_setup(void *blob, bd_t *bd)
>  }
>  #endif
>  
> +#ifdef CONFIG_SET_DFU_ALT_INFO
> +#define DFU_ALT_BUF_LEN SZ_1K
> +
> +static void board_get_alt_info(const char *dev, char *buff)
> +{
> +	char var_name[32] = "dfu_alt_info_";
> +	int ret;
> +
> +	ALLOC_CACHE_ALIGN_BUFFER(char, tmp_alt, DFU_ALT_BUF_LEN);
> +
> +	/* name of env variable to read = dfu_alt_info_<dev> */
> +	strcat(var_name, dev);
> +	ret = env_get_f(var_name, tmp_alt, DFU_ALT_BUF_LEN);
> +	if (ret) {
> +		if (buff[0] != '\0')
> +			strcat(buff, "&");
> +		strncat(buff, tmp_alt, DFU_ALT_BUF_LEN);
> +	}
> +}
> +
> +void set_dfu_alt_info(char *interface, char *devstr)
> +{
> +	struct udevice *dev;
> +
> +	ALLOC_CACHE_ALIGN_BUFFER(char, buf, DFU_ALT_BUF_LEN);
> +
> +	if (env_get("dfu_alt_info"))
> +		return;
> +
> +	memset(buf, 0, sizeof(buf));
> +
> +	board_get_alt_info("ram", buf);
> +
> +	if (!uclass_get_device(UCLASS_MMC, 0, &dev))
> +		board_get_alt_info("mmc0", buf);
> +
> +	if (!uclass_get_device(UCLASS_MMC, 1, &dev))
> +		board_get_alt_info("mmc1", buf);
> +
> +	if (!uclass_get_device(UCLASS_SPI_FLASH, 0, &dev))
> +		board_get_alt_info("nor0", buf);
> +
> +	if (!uclass_get_device(UCLASS_MTD, 0, &dev))
> +		board_get_alt_info("nand0", buf);
> +
> +	env_set("dfu_alt_info", buf);
> +	puts("DFU alt info setting: done\n");
> +}
> +#endif
> +
>  static void board_copro_image_process(ulong fw_image, size_t fw_size)
>  {
>  	int ret, id = 0; /* Copro id fixed to 0 as only one coproc on mp1 */
> diff --git a/include/configs/stm32mp1.h b/include/configs/stm32mp1.h
> index 92660fe2a0..4f9024229e 100644
> --- a/include/configs/stm32mp1.h
> +++ b/include/configs/stm32mp1.h
> @@ -83,6 +83,8 @@
>  #define CONFIG_SYS_MTDPARTS_RUNTIME
>  #endif
>  
> +#define CONFIG_SET_DFU_ALT_INFO
> +
>  /*****************************************************************************/
>  #ifdef CONFIG_DISTRO_DEFAULTS
>  /*****************************************************************************/
> @@ -136,6 +138,34 @@
>  #define STM32MP_MTDPARTS
>  #endif
>  
> +#define STM32MP_DFU_ALT_RAM \
> +	"dfu_alt_info_ram=ram 0=" \
> +		"uImage ram ${kernel_addr_r} 0x2000000;" \
> +		"devicetree.dtb ram ${fdt_addr_r} 0x100000;" \
> +		"uramdisk.image.gz ram ${ramdisk_addr_r} 0x10000000\0"
> +
> +#ifdef CONFIG_SET_DFU_ALT_INFO
> +#define STM32MP_DFU_ALT_INFO \
> +	"dfu_alt_info_nor0=mtd nor0=" \
> +		"nor_fsbl1 part 1;nor_fsbl2 part 2;" \
> +		"nor_ssbl part 3;nor_env part 4\0" \
> +	"dfu_alt_info_nand0=mtd nand0="\
> +		"nand_fsbl part 1;nand_ssbl1 part 2;" \
> +		"nand_ssbl2 part 3;nand_UBI partubi 4\0" \
> +	"dfu_alt_info_mmc0=mmc 0=" \
> +		"sdcard_fsbl1 part 0 1;sdcard_fsbl2 part 0 2;" \
> +		"sdcard_ssbl part 0 3;sdcard_bootfs part 0 4;" \
> +		"sdcard_vendorfs part 0 5;sdcard_rootfs part 0 6;" \
> +		"sdcard_userfs part 0 7\0" \
> +	"dfu_alt_info_mmc1=mmc 1=" \
> +		"emmc_fsbl1 raw 0x0 0x200 mmcpart 1;" \
> +		"emmc_fsbl2 raw 0x0 0x200 mmcpart 2;emmc_ssbl part 1 1;" \
> +		"emmc_bootfs part 1 2;emmc_vendorfs part 1 3;" \
> +		"emmc_rootfs part 1 4;emmc_userfs part 1 5\0"
> +#else
> +#define STM32MP_DFU_ALT_INFO
> +#endif
> +
>  /*
>   * memory layout for 32M uncompressed/compressed kernel,
>   * 1M fdt, 1M script, 1M pxe and 1M for splashimage
> @@ -157,6 +187,8 @@
>  		" then env set env_default 0;env save;fi\0" \
>  	STM32MP_BOOTCMD \
>  	STM32MP_MTDPARTS \
> +	STM32MP_DFU_ALT_RAM \
> +	STM32MP_DFU_ALT_INFO \
>  	BOOTENV \
>  	"boot_net_usb_start=true\0"
>  

Reviewed-by: Patrice Chotard <patrice.chotard at st.com>

Thanks


More information about the U-Boot mailing list