[PATCH 2/4] stm32mp: stm32prog: Add CONFIG_CMD_STM32PROG_SERIAL and _USB
Patrice CHOTARD
patrice.chotard at foss.st.com
Tue Mar 9 14:08:39 CET 2021
Hi Patrick
On 2/25/21 1:37 PM, Patrick Delaunay wrote:
> Add CONFIG_CMD_STM32PROG_SERIAL and CONFIG_CMD_STM32PROG_USB to
> independently select the support of UART or USB communication for
> STM32CubeProgrammer.
>
> For serial boot over UART, user can deactivate CONFIG_CMD_STM32PROG_SERIAL
> to use U-Boot console of binary loaded by UART (for board bring-up for
> example).
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay at foss.st.com>
> ---
>
> arch/arm/mach-stm32mp/Makefile | 2 +-
> arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig | 20 ++++++++++++++--
> arch/arm/mach-stm32mp/cmd_stm32prog/Makefile | 8 +++----
> .../cmd_stm32prog/cmd_stm32prog.c | 4 ++--
> .../mach-stm32mp/cmd_stm32prog/stm32prog.h | 23 ++++++++++++++++++-
> arch/arm/mach-stm32mp/cpu.c | 5 ++--
> board/st/common/stm32mp_dfu.c | 9 ++++----
> 7 files changed, 55 insertions(+), 16 deletions(-)
>
> diff --git a/arch/arm/mach-stm32mp/Makefile b/arch/arm/mach-stm32mp/Makefile
> index c8aa24d489..aa39867080 100644
> --- a/arch/arm/mach-stm32mp/Makefile
> +++ b/arch/arm/mach-stm32mp/Makefile
> @@ -11,7 +11,7 @@ obj-y += bsec.o
> ifdef CONFIG_SPL_BUILD
> obj-y += spl.o
> else
> -obj-$(CONFIG_CMD_STM32PROG) += cmd_stm32prog/
> +obj-y += cmd_stm32prog/
> obj-$(CONFIG_CMD_STM32KEY) += cmd_stm32key.o
> obj-$(CONFIG_ARMV7_PSCI) += psci.o
> obj-$(CONFIG_TFABOOT) += boot_params.o
> diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig b/arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig
> index 609a678793..f4c0d18d4d 100644
> --- a/arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig
> +++ b/arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig
> @@ -11,8 +11,24 @@ config CMD_STM32PROG
> imply DFU_MTD if MTD
> help
> activate a specific command stm32prog for STM32MP soc family
> - witch update the device with the tools STM32CubeProgrammer,
> - using UART with STM32 protocol or USB with DFU protocol
> + witch update the device with the tools STM32CubeProgrammer
> NB: access to not volatile memory (NOR/NAND/SD/eMMC) is based
> on U-Boot DFU framework
>
> +config CMD_STM32PROG_USB
> + bool "support stm32prog over USB"
> + depends on CMD_STM32PROG
> + default y
> + help
> + activate the command "stm32prog usb" for STM32MP soc family
> + witch update the device with the tools STM32CubeProgrammer,
> + using USB with DFU protocol
> +
> +config CMD_STM32PROG_SERIAL
> + bool "support stm32prog over UART"
> + depends on CMD_STM32PROG
> + default y
> + help
> + activate the command "stm32prog serial" for STM32MP soc family
> + with the tools STM32CubeProgrammer using U-Boot serial device
> + and UART protocol.
> \ No newline at end of file
> diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/Makefile b/arch/arm/mach-stm32mp/cmd_stm32prog/Makefile
> index 548a378921..b57e1bf870 100644
> --- a/arch/arm/mach-stm32mp/cmd_stm32prog/Makefile
> +++ b/arch/arm/mach-stm32mp/cmd_stm32prog/Makefile
> @@ -3,7 +3,7 @@
> # Copyright (C) 2020, STMicroelectronics - All Rights Reserved
> #
>
> -obj-y += cmd_stm32prog.o
> -obj-y += stm32prog.o
> -obj-y += stm32prog_serial.o
> -obj-y += stm32prog_usb.o
> +obj-$(CONFIG_CMD_STM32PROG) += cmd_stm32prog.o
> +obj-$(CONFIG_CMD_STM32PROG) += stm32prog.o
> +obj-$(CONFIG_CMD_STM32PROG_SERIAL) += stm32prog_serial.o
> +obj-$(CONFIG_CMD_STM32PROG_USB) += stm32prog_usb.o
> diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/cmd_stm32prog.c b/arch/arm/mach-stm32mp/cmd_stm32prog/cmd_stm32prog.c
> index 34a6be66c3..a7e2861764 100644
> --- a/arch/arm/mach-stm32mp/cmd_stm32prog/cmd_stm32prog.c
> +++ b/arch/arm/mach-stm32mp/cmd_stm32prog/cmd_stm32prog.c
> @@ -50,9 +50,9 @@ static int do_stm32prog(struct cmd_tbl *cmdtp, int flag, int argc,
> if (argc < 3 || argc > 5)
> return CMD_RET_USAGE;
>
> - if (!strcmp(argv[1], "usb"))
> + if (IS_ENABLED(CONFIG_CMD_STM32PROG_USB) && !strcmp(argv[1], "usb"))
> link = LINK_USB;
> - else if (!strcmp(argv[1], "serial"))
> + else if (IS_ENABLED(CONFIG_CMD_STM32PROG_SERIAL) && !strcmp(argv[1], "serial"))
> link = LINK_SERIAL;
>
> if (link == LINK_UNDEFINED) {
> diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h
> index be482c3402..18af99c78b 100644
> --- a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h
> +++ b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h
> @@ -177,9 +177,30 @@ char *stm32prog_get_error(struct stm32prog_data *data);
>
> /* Main function */
> int stm32prog_init(struct stm32prog_data *data, ulong addr, ulong size);
> +void stm32prog_clean(struct stm32prog_data *data);
> +
> +#ifdef CONFIG_CMD_STM32PROG_SERIAL
> int stm32prog_serial_init(struct stm32prog_data *data, int link_dev);
> bool stm32prog_serial_loop(struct stm32prog_data *data);
> +#else
> +static inline int stm32prog_serial_init(struct stm32prog_data *data, int link_dev)
> +{
> + return -ENOSYS;
> +}
> +
> +static inline bool stm32prog_serial_loop(struct stm32prog_data *data)
> +{
> + return false;
> +}
> +#endif
> +
> +#ifdef CONFIG_CMD_STM32PROG_USB
> bool stm32prog_usb_loop(struct stm32prog_data *data, int dev);
> -void stm32prog_clean(struct stm32prog_data *data);
> +#else
> +static inline bool stm32prog_usb_loop(struct stm32prog_data *data, int dev)
> +{
> + return false;
> +}
> +#endif
>
> #endif
> diff --git a/arch/arm/mach-stm32mp/cpu.c b/arch/arm/mach-stm32mp/cpu.c
> index 3faa4ec18a..a453f89d02 100644
> --- a/arch/arm/mach-stm32mp/cpu.c
> +++ b/arch/arm/mach-stm32mp/cpu.c
> @@ -265,7 +265,8 @@ int arch_cpu_init(void)
>
> boot_mode = get_bootmode();
>
> - if ((boot_mode & TAMP_BOOT_DEVICE_MASK) == BOOT_SERIAL_UART)
> + if (IS_ENABLED(CONFIG_CMD_STM32PROG_SERIAL) &&
> + (boot_mode & TAMP_BOOT_DEVICE_MASK) == BOOT_SERIAL_UART)
> gd->flags |= GD_FLG_SILENT | GD_FLG_DISABLE_CONSOLE;
> #if defined(CONFIG_DEBUG_UART) && \
> !defined(CONFIG_TFABOOT) && \
> @@ -485,7 +486,7 @@ static void setup_boot_mode(void)
> env_set("boot_instance", cmd);
>
> /* restore console on uart when not used */
> - if (gd->cur_serial_dev != dev) {
> + if (IS_ENABLED(CONFIG_CMD_STM32PROG_SERIAL) && gd->cur_serial_dev != dev) {
> gd->flags &= ~(GD_FLG_SILENT |
> GD_FLG_DISABLE_CONSOLE);
> printf("serial boot with console enabled!\n");
> diff --git a/board/st/common/stm32mp_dfu.c b/board/st/common/stm32mp_dfu.c
> index 5633a6cb95..00d1fb8f59 100644
> --- a/board/st/common/stm32mp_dfu.c
> +++ b/board/st/common/stm32mp_dfu.c
> @@ -143,7 +143,8 @@ void set_dfu_alt_info(char *interface, char *devstr)
> board_get_alt_info_mtd(mtd, buf);
> }
>
> - if (IS_ENABLED(CONFIG_DFU_VIRT)) {
> + if (IS_ENABLED(CONFIG_DFU_VIRT) &&
> + IS_ENABLED(CMD_STM32PROG_USB)) {
> strncat(buf, "&virt 0=OTP", DFU_ALT_BUF_LEN);
>
> if (IS_ENABLED(CONFIG_PMIC_STPMIC1))
> @@ -217,7 +218,7 @@ int dfu_read_medium_virt(struct dfu_entity *dfu, u64 offset,
> return dfu_pmic_read(offset, buf, len);
> }
>
> - if (CONFIG_IS_ENABLED(CMD_STM32PROG) &&
> + if (IS_ENABLED(CONFIG_CMD_STM32PROG_USB) &&
> dfu->data.virt.dev_num >= STM32PROG_VIRT_FIRST_DEV_NUM)
> return stm32prog_read_medium_virt(dfu, offset, buf, len);
>
> @@ -228,7 +229,7 @@ int dfu_read_medium_virt(struct dfu_entity *dfu, u64 offset,
> int dfu_write_medium_virt(struct dfu_entity *dfu, u64 offset,
> void *buf, long *len)
> {
> - if (CONFIG_IS_ENABLED(CMD_STM32PROG) &&
> + if (IS_ENABLED(CONFIG_CMD_STM32PROG_USB) &&
> dfu->data.virt.dev_num >= STM32PROG_VIRT_FIRST_DEV_NUM)
> return stm32prog_write_medium_virt(dfu, offset, buf, len);
>
> @@ -237,7 +238,7 @@ int dfu_write_medium_virt(struct dfu_entity *dfu, u64 offset,
>
> int __weak dfu_get_medium_size_virt(struct dfu_entity *dfu, u64 *size)
> {
> - if (CONFIG_IS_ENABLED(CMD_STM32PROG) &&
> + if (IS_ENABLED(CONFIG_CMD_STM32PROG_USB) &&
> dfu->data.virt.dev_num >= STM32PROG_VIRT_FIRST_DEV_NUM)
> return stm32prog_get_medium_size_virt(dfu, size);
>
>
Reviewed-by: Patrice Chotard <patrice.chotard at foss.st.com>
Thanks
Patrice
More information about the U-Boot
mailing list