Message ID | 20210225133652.2.I60352ed0b0f59ee019230f63aaa3c45fd4438531@changeid |
---|---|
State | Accepted |
Commit | 5a05af87efcb8f46fd2fcbdde145a7107315446a |
Delegated to: | Patrice Chotard |
Headers | show |
Series | [1/4] stm32mp: stm32prog: Add Kconfig file for stm32prog command | expand |
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@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@foss.st.com> Thanks Patrice
Hi On 3/9/21 2:08 PM, Patrice CHOTARD wrote: > 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@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@foss.st.com> > > Thanks > Patrice > Applied to u-boot-stm/next Thanks Patrice
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);
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@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(-)