* [PATCH 1/4] stm32mp: stm32prog: Add Kconfig file for stm32prog command
@ 2021-02-25 12:37 Patrick Delaunay
2021-02-25 12:37 ` [PATCH 2/4] stm32mp: stm32prog: Add CONFIG_CMD_STM32PROG_SERIAL and _USB Patrick Delaunay
` (3 more replies)
0 siblings, 4 replies; 12+ messages in thread
From: Patrick Delaunay @ 2021-02-25 12:37 UTC (permalink / raw)
To: u-boot
Move CONFIG_CMD_STM32PROG in a specific Kconfig file for stm32prog command.
Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
---
arch/arm/mach-stm32mp/Kconfig | 18 +-----------------
arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig | 18 ++++++++++++++++++
2 files changed, 19 insertions(+), 17 deletions(-)
create mode 100644 arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig
diff --git a/arch/arm/mach-stm32mp/Kconfig b/arch/arm/mach-stm32mp/Kconfig
index f538d7cb83..079d66a80c 100644
--- a/arch/arm/mach-stm32mp/Kconfig
+++ b/arch/arm/mach-stm32mp/Kconfig
@@ -121,23 +121,6 @@ config STM32_ETZPC
help
Say y to enable STM32 Extended TrustZone Protection
-config CMD_STM32PROG
- bool "command stm32prog for STM32CudeProgrammer"
- select DFU
- select DFU_RAM
- select DFU_VIRT
- select PARTITION_TYPE_GUID
- imply CMD_GPT if MMC
- imply CMD_MTD if MTD
- imply DFU_MMC if MMC
- 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
- NB: access to not volatile memory (NOR/NAND/SD/eMMC) is based
- on U-Boot DFU framework
-
config CMD_STM32KEY
bool "command stm32key to fuse public key hash"
default y
@@ -177,6 +160,7 @@ config DEBUG_UART_CLOCK
default 64000000
endif
+source "arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig"
source "board/st/stm32mp1/Kconfig"
source "board/dhelectronics/dh_stm32mp1/Kconfig"
diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig b/arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig
new file mode 100644
index 0000000000..609a678793
--- /dev/null
+++ b/arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig
@@ -0,0 +1,18 @@
+
+config CMD_STM32PROG
+ bool "command stm32prog for STM32CudeProgrammer"
+ select DFU
+ select DFU_RAM
+ select DFU_VIRT
+ select PARTITION_TYPE_GUID
+ imply CMD_GPT if MMC
+ imply CMD_MTD if MTD
+ imply DFU_MMC if MMC
+ 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
+ NB: access to not volatile memory (NOR/NAND/SD/eMMC) is based
+ on U-Boot DFU framework
+
--
2.17.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/4] stm32mp: stm32prog: Add CONFIG_CMD_STM32PROG_SERIAL and _USB
2021-02-25 12:37 [PATCH 1/4] stm32mp: stm32prog: Add Kconfig file for stm32prog command Patrick Delaunay
@ 2021-02-25 12:37 ` Patrick Delaunay
2021-03-09 13:08 ` Patrice CHOTARD
2021-02-25 12:37 ` [PATCH 3/4] stm32mp: stm32prog: reactivate console and display serial error Patrick Delaunay
` (2 subsequent siblings)
3 siblings, 1 reply; 12+ messages in thread
From: Patrick Delaunay @ 2021-02-25 12:37 UTC (permalink / raw)
To: u-boot
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);
--
2.17.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/4] stm32mp: stm32prog: reactivate console and display serial error
2021-02-25 12:37 [PATCH 1/4] stm32mp: stm32prog: Add Kconfig file for stm32prog command Patrick Delaunay
2021-02-25 12:37 ` [PATCH 2/4] stm32mp: stm32prog: Add CONFIG_CMD_STM32PROG_SERIAL and _USB Patrick Delaunay
@ 2021-02-25 12:37 ` Patrick Delaunay
2021-03-09 13:11 ` Patrice CHOTARD
2021-03-12 12:28 ` Patrice CHOTARD
2021-02-25 12:37 ` [PATCH 4/4] stm32mp: stm32prog: replace alias by serial device sequence number Patrick Delaunay
2021-03-09 13:07 ` [PATCH 1/4] stm32mp: stm32prog: Add Kconfig file for stm32prog command Patrice CHOTARD
3 siblings, 2 replies; 12+ messages in thread
From: Patrick Delaunay @ 2021-02-25 12:37 UTC (permalink / raw)
To: u-boot
When serial instance is not found in device tree, the console
should be enabled and the error should be indicated.
Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
---
arch/arm/mach-stm32mp/cpu.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/arch/arm/mach-stm32mp/cpu.c b/arch/arm/mach-stm32mp/cpu.c
index a453f89d02..527b6290de 100644
--- a/arch/arm/mach-stm32mp/cpu.c
+++ b/arch/arm/mach-stm32mp/cpu.c
@@ -476,11 +476,17 @@ static void setup_boot_mode(void)
break;
/* serial : search associated alias in devicetree */
sprintf(cmd, "serial@%x", serial_addr[instance]);
- if (uclass_get_device_by_name(UCLASS_SERIAL, cmd, &dev))
- break;
- if (fdtdec_get_alias_seq(gd->fdt_blob, "serial",
- dev_of_offset(dev), &alias))
+ if (uclass_get_device_by_name(UCLASS_SERIAL, cmd, &dev) ||
+ fdtdec_get_alias_seq(gd->fdt_blob, "serial",
+ dev_of_offset(dev), &alias)) {
+ /* restore console on error */
+ if (IS_ENABLED(CONFIG_CMD_STM32PROG_SERIAL))
+ gd->flags &= ~(GD_FLG_SILENT |
+ GD_FLG_DISABLE_CONSOLE);
+ printf("serial%d = %s not found in device tree!\n",
+ instance, cmd);
break;
+ }
sprintf(cmd, "%d", alias);
env_set("boot_device", "serial");
env_set("boot_instance", cmd);
--
2.17.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 4/4] stm32mp: stm32prog: replace alias by serial device sequence number
2021-02-25 12:37 [PATCH 1/4] stm32mp: stm32prog: Add Kconfig file for stm32prog command Patrick Delaunay
2021-02-25 12:37 ` [PATCH 2/4] stm32mp: stm32prog: Add CONFIG_CMD_STM32PROG_SERIAL and _USB Patrick Delaunay
2021-02-25 12:37 ` [PATCH 3/4] stm32mp: stm32prog: reactivate console and display serial error Patrick Delaunay
@ 2021-02-25 12:37 ` Patrick Delaunay
2021-03-09 13:14 ` Patrice CHOTARD
2021-03-09 13:07 ` [PATCH 1/4] stm32mp: stm32prog: Add Kconfig file for stm32prog command Patrice CHOTARD
3 siblings, 1 reply; 12+ messages in thread
From: Patrick Delaunay @ 2021-02-25 12:37 UTC (permalink / raw)
To: u-boot
The command "stm32prog serial <dev>" can directly use the device sequence
number of serial uclass as this sequence number is egual to alias when it
exist; this assumption simplify the code and avoid access to gd->fdt_blob
and the device tree parsing.
Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
---
.../cmd_stm32prog/stm32prog_serial.c | 29 ++++---------------
arch/arm/mach-stm32mp/cpu.c | 11 +++----
2 files changed, 10 insertions(+), 30 deletions(-)
diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
index 373ca20886..a51e5e3ec8 100644
--- a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
+++ b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
@@ -187,36 +187,19 @@ static int stm32prog_read(struct stm32prog_data *data, u8 phase, u32 offset,
int stm32prog_serial_init(struct stm32prog_data *data, int link_dev)
{
struct udevice *dev = NULL;
- int node;
- char alias[10];
- const char *path;
struct dm_serial_ops *ops;
/* no parity, 8 bits, 1 stop */
u32 serial_config = SERIAL_DEFAULT_CONFIG;
down_serial_dev = NULL;
- sprintf(alias, "serial%d", link_dev);
- path = fdt_get_alias(gd->fdt_blob, alias);
- if (!path) {
- log_err("%s alias not found", alias);
- return -ENODEV;
- }
- node = fdt_path_offset(gd->fdt_blob, path);
- if (!uclass_get_device_by_of_offset(UCLASS_SERIAL, node,
- &dev)) {
- down_serial_dev = dev;
- } else if (node > 0 &&
- !lists_bind_fdt(gd->dm_root, offset_to_ofnode(node),
- &dev, false)) {
- if (!device_probe(dev))
- down_serial_dev = dev;
- }
- if (!down_serial_dev) {
- log_err("%s = %s device not found", alias, path);
+ if (uclass_get_device_by_seq(UCLASS_SERIAL, link_dev, &dev)) {
+ log_err("serial %d device not found\n", link_dev);
return -ENODEV;
}
+ down_serial_dev = dev;
+
/* force silent console on uart only when used */
if (gd->cur_serial_dev == down_serial_dev)
gd->flags |= GD_FLG_DISABLE_CONSOLE | GD_FLG_SILENT;
@@ -226,11 +209,11 @@ int stm32prog_serial_init(struct stm32prog_data *data, int link_dev)
ops = serial_get_ops(down_serial_dev);
if (!ops) {
- log_err("%s = %s missing ops", alias, path);
+ log_err("serial %d = %s missing ops\n", link_dev, dev->name);
return -ENODEV;
}
if (!ops->setconfig) {
- log_err("%s = %s missing setconfig", alias, path);
+ log_err("serial %d = %s missing setconfig\n", link_dev, dev->name);
return -ENODEV;
}
diff --git a/arch/arm/mach-stm32mp/cpu.c b/arch/arm/mach-stm32mp/cpu.c
index 527b6290de..9a76b5633b 100644
--- a/arch/arm/mach-stm32mp/cpu.c
+++ b/arch/arm/mach-stm32mp/cpu.c
@@ -466,7 +466,6 @@ static void setup_boot_mode(void)
unsigned int instance = (boot_mode & TAMP_BOOT_INSTANCE_MASK) - 1;
u32 forced_mode = (boot_ctx & TAMP_BOOT_FORCED_MASK);
struct udevice *dev;
- int alias;
log_debug("%s: boot_ctx=0x%x => boot_mode=%x, instance=%d forced=%x\n",
__func__, boot_ctx, boot_mode, instance, forced_mode);
@@ -474,20 +473,18 @@ static void setup_boot_mode(void)
case BOOT_SERIAL_UART:
if (instance > ARRAY_SIZE(serial_addr))
break;
- /* serial : search associated alias in devicetree */
+ /* serial : search associated node in devicetree */
sprintf(cmd, "serial@%x", serial_addr[instance]);
- if (uclass_get_device_by_name(UCLASS_SERIAL, cmd, &dev) ||
- fdtdec_get_alias_seq(gd->fdt_blob, "serial",
- dev_of_offset(dev), &alias)) {
+ if (uclass_get_device_by_name(UCLASS_SERIAL, cmd, &dev)) {
/* restore console on error */
if (IS_ENABLED(CONFIG_CMD_STM32PROG_SERIAL))
gd->flags &= ~(GD_FLG_SILENT |
GD_FLG_DISABLE_CONSOLE);
- printf("serial%d = %s not found in device tree!\n",
+ printf("uart%d = %s not found in device tree!\n",
instance, cmd);
break;
}
- sprintf(cmd, "%d", alias);
+ sprintf(cmd, "%d", dev_seq(dev));
env_set("boot_device", "serial");
env_set("boot_instance", cmd);
--
2.17.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 1/4] stm32mp: stm32prog: Add Kconfig file for stm32prog command
2021-02-25 12:37 [PATCH 1/4] stm32mp: stm32prog: Add Kconfig file for stm32prog command Patrick Delaunay
` (2 preceding siblings ...)
2021-02-25 12:37 ` [PATCH 4/4] stm32mp: stm32prog: replace alias by serial device sequence number Patrick Delaunay
@ 2021-03-09 13:07 ` Patrice CHOTARD
2021-03-12 12:27 ` [Uboot-stm32] " Patrice CHOTARD
3 siblings, 1 reply; 12+ messages in thread
From: Patrice CHOTARD @ 2021-03-09 13:07 UTC (permalink / raw)
To: u-boot
Hi Patrick
On 2/25/21 1:37 PM, Patrick Delaunay wrote:
> Move CONFIG_CMD_STM32PROG in a specific Kconfig file for stm32prog command.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
> ---
>
> arch/arm/mach-stm32mp/Kconfig | 18 +-----------------
> arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig | 18 ++++++++++++++++++
> 2 files changed, 19 insertions(+), 17 deletions(-)
> create mode 100644 arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig
>
> diff --git a/arch/arm/mach-stm32mp/Kconfig b/arch/arm/mach-stm32mp/Kconfig
> index f538d7cb83..079d66a80c 100644
> --- a/arch/arm/mach-stm32mp/Kconfig
> +++ b/arch/arm/mach-stm32mp/Kconfig
> @@ -121,23 +121,6 @@ config STM32_ETZPC
> help
> Say y to enable STM32 Extended TrustZone Protection
>
> -config CMD_STM32PROG
> - bool "command stm32prog for STM32CudeProgrammer"
> - select DFU
> - select DFU_RAM
> - select DFU_VIRT
> - select PARTITION_TYPE_GUID
> - imply CMD_GPT if MMC
> - imply CMD_MTD if MTD
> - imply DFU_MMC if MMC
> - 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
> - NB: access to not volatile memory (NOR/NAND/SD/eMMC) is based
> - on U-Boot DFU framework
> -
> config CMD_STM32KEY
> bool "command stm32key to fuse public key hash"
> default y
> @@ -177,6 +160,7 @@ config DEBUG_UART_CLOCK
> default 64000000
> endif
>
> +source "arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig"
> source "board/st/stm32mp1/Kconfig"
> source "board/dhelectronics/dh_stm32mp1/Kconfig"
>
> diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig b/arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig
> new file mode 100644
> index 0000000000..609a678793
> --- /dev/null
> +++ b/arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig
> @@ -0,0 +1,18 @@
> +
> +config CMD_STM32PROG
> + bool "command stm32prog for STM32CudeProgrammer"
> + select DFU
> + select DFU_RAM
> + select DFU_VIRT
> + select PARTITION_TYPE_GUID
> + imply CMD_GPT if MMC
> + imply CMD_MTD if MTD
> + imply DFU_MMC if MMC
> + 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
> + NB: access to not volatile memory (NOR/NAND/SD/eMMC) is based
> + on U-Boot DFU framework
> +
>
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
Thanks
Patrice
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 2/4] stm32mp: stm32prog: Add CONFIG_CMD_STM32PROG_SERIAL and _USB
2021-02-25 12:37 ` [PATCH 2/4] stm32mp: stm32prog: Add CONFIG_CMD_STM32PROG_SERIAL and _USB Patrick Delaunay
@ 2021-03-09 13:08 ` Patrice CHOTARD
2021-03-12 12:27 ` Patrice CHOTARD
0 siblings, 1 reply; 12+ messages in thread
From: Patrice CHOTARD @ 2021-03-09 13:08 UTC (permalink / raw)
To: u-boot
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
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 3/4] stm32mp: stm32prog: reactivate console and display serial error
2021-02-25 12:37 ` [PATCH 3/4] stm32mp: stm32prog: reactivate console and display serial error Patrick Delaunay
@ 2021-03-09 13:11 ` Patrice CHOTARD
2021-03-12 12:28 ` Patrice CHOTARD
1 sibling, 0 replies; 12+ messages in thread
From: Patrice CHOTARD @ 2021-03-09 13:11 UTC (permalink / raw)
To: u-boot
Hi Patrick
On 2/25/21 1:37 PM, Patrick Delaunay wrote:
> When serial instance is not found in device tree, the console
> should be enabled and the error should be indicated.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
> ---
>
> arch/arm/mach-stm32mp/cpu.c | 14 ++++++++++----
> 1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm/mach-stm32mp/cpu.c b/arch/arm/mach-stm32mp/cpu.c
> index a453f89d02..527b6290de 100644
> --- a/arch/arm/mach-stm32mp/cpu.c
> +++ b/arch/arm/mach-stm32mp/cpu.c
> @@ -476,11 +476,17 @@ static void setup_boot_mode(void)
> break;
> /* serial : search associated alias in devicetree */
> sprintf(cmd, "serial@%x", serial_addr[instance]);
> - if (uclass_get_device_by_name(UCLASS_SERIAL, cmd, &dev))
> - break;
> - if (fdtdec_get_alias_seq(gd->fdt_blob, "serial",
> - dev_of_offset(dev), &alias))
> + if (uclass_get_device_by_name(UCLASS_SERIAL, cmd, &dev) ||
> + fdtdec_get_alias_seq(gd->fdt_blob, "serial",
> + dev_of_offset(dev), &alias)) {
> + /* restore console on error */
> + if (IS_ENABLED(CONFIG_CMD_STM32PROG_SERIAL))
> + gd->flags &= ~(GD_FLG_SILENT |
> + GD_FLG_DISABLE_CONSOLE);
> + printf("serial%d = %s not found in device tree!\n",
> + instance, cmd);
> break;
> + }
> sprintf(cmd, "%d", alias);
> env_set("boot_device", "serial");
> env_set("boot_instance", cmd);
>
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
Thanks
Patrice
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 4/4] stm32mp: stm32prog: replace alias by serial device sequence number
2021-02-25 12:37 ` [PATCH 4/4] stm32mp: stm32prog: replace alias by serial device sequence number Patrick Delaunay
@ 2021-03-09 13:14 ` Patrice CHOTARD
2021-03-12 12:28 ` Patrice CHOTARD
0 siblings, 1 reply; 12+ messages in thread
From: Patrice CHOTARD @ 2021-03-09 13:14 UTC (permalink / raw)
To: u-boot
Hi Patrick
On 2/25/21 1:37 PM, Patrick Delaunay wrote:
> The command "stm32prog serial <dev>" can directly use the device sequence
> number of serial uclass as this sequence number is egual to alias when it
> exist; this assumption simplify the code and avoid access to gd->fdt_blob
> and the device tree parsing.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
> ---
>
> .../cmd_stm32prog/stm32prog_serial.c | 29 ++++---------------
> arch/arm/mach-stm32mp/cpu.c | 11 +++----
> 2 files changed, 10 insertions(+), 30 deletions(-)
>
> diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
> index 373ca20886..a51e5e3ec8 100644
> --- a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
> +++ b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
> @@ -187,36 +187,19 @@ static int stm32prog_read(struct stm32prog_data *data, u8 phase, u32 offset,
> int stm32prog_serial_init(struct stm32prog_data *data, int link_dev)
> {
> struct udevice *dev = NULL;
> - int node;
> - char alias[10];
> - const char *path;
> struct dm_serial_ops *ops;
> /* no parity, 8 bits, 1 stop */
> u32 serial_config = SERIAL_DEFAULT_CONFIG;
>
> down_serial_dev = NULL;
>
> - sprintf(alias, "serial%d", link_dev);
> - path = fdt_get_alias(gd->fdt_blob, alias);
> - if (!path) {
> - log_err("%s alias not found", alias);
> - return -ENODEV;
> - }
> - node = fdt_path_offset(gd->fdt_blob, path);
> - if (!uclass_get_device_by_of_offset(UCLASS_SERIAL, node,
> - &dev)) {
> - down_serial_dev = dev;
> - } else if (node > 0 &&
> - !lists_bind_fdt(gd->dm_root, offset_to_ofnode(node),
> - &dev, false)) {
> - if (!device_probe(dev))
> - down_serial_dev = dev;
> - }
> - if (!down_serial_dev) {
> - log_err("%s = %s device not found", alias, path);
> + if (uclass_get_device_by_seq(UCLASS_SERIAL, link_dev, &dev)) {
> + log_err("serial %d device not found\n", link_dev);
> return -ENODEV;
> }
>
> + down_serial_dev = dev;
> +
> /* force silent console on uart only when used */
> if (gd->cur_serial_dev == down_serial_dev)
> gd->flags |= GD_FLG_DISABLE_CONSOLE | GD_FLG_SILENT;
> @@ -226,11 +209,11 @@ int stm32prog_serial_init(struct stm32prog_data *data, int link_dev)
> ops = serial_get_ops(down_serial_dev);
>
> if (!ops) {
> - log_err("%s = %s missing ops", alias, path);
> + log_err("serial %d = %s missing ops\n", link_dev, dev->name);
> return -ENODEV;
> }
> if (!ops->setconfig) {
> - log_err("%s = %s missing setconfig", alias, path);
> + log_err("serial %d = %s missing setconfig\n", link_dev, dev->name);
> return -ENODEV;
> }
>
> diff --git a/arch/arm/mach-stm32mp/cpu.c b/arch/arm/mach-stm32mp/cpu.c
> index 527b6290de..9a76b5633b 100644
> --- a/arch/arm/mach-stm32mp/cpu.c
> +++ b/arch/arm/mach-stm32mp/cpu.c
> @@ -466,7 +466,6 @@ static void setup_boot_mode(void)
> unsigned int instance = (boot_mode & TAMP_BOOT_INSTANCE_MASK) - 1;
> u32 forced_mode = (boot_ctx & TAMP_BOOT_FORCED_MASK);
> struct udevice *dev;
> - int alias;
>
> log_debug("%s: boot_ctx=0x%x => boot_mode=%x, instance=%d forced=%x\n",
> __func__, boot_ctx, boot_mode, instance, forced_mode);
> @@ -474,20 +473,18 @@ static void setup_boot_mode(void)
> case BOOT_SERIAL_UART:
> if (instance > ARRAY_SIZE(serial_addr))
> break;
> - /* serial : search associated alias in devicetree */
> + /* serial : search associated node in devicetree */
> sprintf(cmd, "serial@%x", serial_addr[instance]);
> - if (uclass_get_device_by_name(UCLASS_SERIAL, cmd, &dev) ||
> - fdtdec_get_alias_seq(gd->fdt_blob, "serial",
> - dev_of_offset(dev), &alias)) {
> + if (uclass_get_device_by_name(UCLASS_SERIAL, cmd, &dev)) {
> /* restore console on error */
> if (IS_ENABLED(CONFIG_CMD_STM32PROG_SERIAL))
> gd->flags &= ~(GD_FLG_SILENT |
> GD_FLG_DISABLE_CONSOLE);
> - printf("serial%d = %s not found in device tree!\n",
> + printf("uart%d = %s not found in device tree!\n",
> instance, cmd);
> break;
> }
> - sprintf(cmd, "%d", alias);
> + sprintf(cmd, "%d", dev_seq(dev));
> env_set("boot_device", "serial");
> env_set("boot_instance", cmd);
>
>
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
Thanks
Patrice
^ permalink raw reply [flat|nested] 12+ messages in thread
* [Uboot-stm32] [PATCH 1/4] stm32mp: stm32prog: Add Kconfig file for stm32prog command
2021-03-09 13:07 ` [PATCH 1/4] stm32mp: stm32prog: Add Kconfig file for stm32prog command Patrice CHOTARD
@ 2021-03-12 12:27 ` Patrice CHOTARD
0 siblings, 0 replies; 12+ messages in thread
From: Patrice CHOTARD @ 2021-03-12 12:27 UTC (permalink / raw)
To: u-boot
Hi
On 3/9/21 2:07 PM, Patrice CHOTARD wrote:
> Hi Patrick
>
> On 2/25/21 1:37 PM, Patrick Delaunay wrote:
>> Move CONFIG_CMD_STM32PROG in a specific Kconfig file for stm32prog command.
>>
>> Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
>> ---
>>
>> arch/arm/mach-stm32mp/Kconfig | 18 +-----------------
>> arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig | 18 ++++++++++++++++++
>> 2 files changed, 19 insertions(+), 17 deletions(-)
>> create mode 100644 arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig
>>
>> diff --git a/arch/arm/mach-stm32mp/Kconfig b/arch/arm/mach-stm32mp/Kconfig
>> index f538d7cb83..079d66a80c 100644
>> --- a/arch/arm/mach-stm32mp/Kconfig
>> +++ b/arch/arm/mach-stm32mp/Kconfig
>> @@ -121,23 +121,6 @@ config STM32_ETZPC
>> help
>> Say y to enable STM32 Extended TrustZone Protection
>>
>> -config CMD_STM32PROG
>> - bool "command stm32prog for STM32CudeProgrammer"
>> - select DFU
>> - select DFU_RAM
>> - select DFU_VIRT
>> - select PARTITION_TYPE_GUID
>> - imply CMD_GPT if MMC
>> - imply CMD_MTD if MTD
>> - imply DFU_MMC if MMC
>> - 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
>> - NB: access to not volatile memory (NOR/NAND/SD/eMMC) is based
>> - on U-Boot DFU framework
>> -
>> config CMD_STM32KEY
>> bool "command stm32key to fuse public key hash"
>> default y
>> @@ -177,6 +160,7 @@ config DEBUG_UART_CLOCK
>> default 64000000
>> endif
>>
>> +source "arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig"
>> source "board/st/stm32mp1/Kconfig"
>> source "board/dhelectronics/dh_stm32mp1/Kconfig"
>>
>> diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig b/arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig
>> new file mode 100644
>> index 0000000000..609a678793
>> --- /dev/null
>> +++ b/arch/arm/mach-stm32mp/cmd_stm32prog/Kconfig
>> @@ -0,0 +1,18 @@
>> +
>> +config CMD_STM32PROG
>> + bool "command stm32prog for STM32CudeProgrammer"
>> + select DFU
>> + select DFU_RAM
>> + select DFU_VIRT
>> + select PARTITION_TYPE_GUID
>> + imply CMD_GPT if MMC
>> + imply CMD_MTD if MTD
>> + imply DFU_MMC if MMC
>> + 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
>> + NB: access to not volatile memory (NOR/NAND/SD/eMMC) is based
>> + on U-Boot DFU framework
>> +
>>
>
>
> Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
>
> Thanks
> Patrice
> _______________________________________________
> Uboot-stm32 mailing list
> Uboot-stm32 at st-md-mailman.stormreply.com
> https://st-md-mailman.stormreply.com/mailman/listinfo/uboot-stm32
>
Applied to u-boot-stm/next
Thanks
Patrice
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 2/4] stm32mp: stm32prog: Add CONFIG_CMD_STM32PROG_SERIAL and _USB
2021-03-09 13:08 ` Patrice CHOTARD
@ 2021-03-12 12:27 ` Patrice CHOTARD
0 siblings, 0 replies; 12+ messages in thread
From: Patrice CHOTARD @ 2021-03-12 12:27 UTC (permalink / raw)
To: u-boot
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
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 3/4] stm32mp: stm32prog: reactivate console and display serial error
2021-02-25 12:37 ` [PATCH 3/4] stm32mp: stm32prog: reactivate console and display serial error Patrick Delaunay
2021-03-09 13:11 ` Patrice CHOTARD
@ 2021-03-12 12:28 ` Patrice CHOTARD
1 sibling, 0 replies; 12+ messages in thread
From: Patrice CHOTARD @ 2021-03-12 12:28 UTC (permalink / raw)
To: u-boot
Hi
On 2/25/21 1:37 PM, Patrick Delaunay wrote:
> When serial instance is not found in device tree, the console
> should be enabled and the error should be indicated.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
> ---
>
> arch/arm/mach-stm32mp/cpu.c | 14 ++++++++++----
> 1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm/mach-stm32mp/cpu.c b/arch/arm/mach-stm32mp/cpu.c
> index a453f89d02..527b6290de 100644
> --- a/arch/arm/mach-stm32mp/cpu.c
> +++ b/arch/arm/mach-stm32mp/cpu.c
> @@ -476,11 +476,17 @@ static void setup_boot_mode(void)
> break;
> /* serial : search associated alias in devicetree */
> sprintf(cmd, "serial@%x", serial_addr[instance]);
> - if (uclass_get_device_by_name(UCLASS_SERIAL, cmd, &dev))
> - break;
> - if (fdtdec_get_alias_seq(gd->fdt_blob, "serial",
> - dev_of_offset(dev), &alias))
> + if (uclass_get_device_by_name(UCLASS_SERIAL, cmd, &dev) ||
> + fdtdec_get_alias_seq(gd->fdt_blob, "serial",
> + dev_of_offset(dev), &alias)) {
> + /* restore console on error */
> + if (IS_ENABLED(CONFIG_CMD_STM32PROG_SERIAL))
> + gd->flags &= ~(GD_FLG_SILENT |
> + GD_FLG_DISABLE_CONSOLE);
> + printf("serial%d = %s not found in device tree!\n",
> + instance, cmd);
> break;
> + }
> sprintf(cmd, "%d", alias);
> env_set("boot_device", "serial");
> env_set("boot_instance", cmd);
>
Applied to u-boot-stm/next
Thanks
Patrice
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 4/4] stm32mp: stm32prog: replace alias by serial device sequence number
2021-03-09 13:14 ` Patrice CHOTARD
@ 2021-03-12 12:28 ` Patrice CHOTARD
0 siblings, 0 replies; 12+ messages in thread
From: Patrice CHOTARD @ 2021-03-12 12:28 UTC (permalink / raw)
To: u-boot
Hi
On 3/9/21 2:14 PM, Patrice CHOTARD wrote:
> Hi Patrick
>
> On 2/25/21 1:37 PM, Patrick Delaunay wrote:
>> The command "stm32prog serial <dev>" can directly use the device sequence
>> number of serial uclass as this sequence number is egual to alias when it
>> exist; this assumption simplify the code and avoid access to gd->fdt_blob
>> and the device tree parsing.
>>
>> Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
>> ---
>>
>> .../cmd_stm32prog/stm32prog_serial.c | 29 ++++---------------
>> arch/arm/mach-stm32mp/cpu.c | 11 +++----
>> 2 files changed, 10 insertions(+), 30 deletions(-)
>>
>> diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
>> index 373ca20886..a51e5e3ec8 100644
>> --- a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
>> +++ b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
>> @@ -187,36 +187,19 @@ static int stm32prog_read(struct stm32prog_data *data, u8 phase, u32 offset,
>> int stm32prog_serial_init(struct stm32prog_data *data, int link_dev)
>> {
>> struct udevice *dev = NULL;
>> - int node;
>> - char alias[10];
>> - const char *path;
>> struct dm_serial_ops *ops;
>> /* no parity, 8 bits, 1 stop */
>> u32 serial_config = SERIAL_DEFAULT_CONFIG;
>>
>> down_serial_dev = NULL;
>>
>> - sprintf(alias, "serial%d", link_dev);
>> - path = fdt_get_alias(gd->fdt_blob, alias);
>> - if (!path) {
>> - log_err("%s alias not found", alias);
>> - return -ENODEV;
>> - }
>> - node = fdt_path_offset(gd->fdt_blob, path);
>> - if (!uclass_get_device_by_of_offset(UCLASS_SERIAL, node,
>> - &dev)) {
>> - down_serial_dev = dev;
>> - } else if (node > 0 &&
>> - !lists_bind_fdt(gd->dm_root, offset_to_ofnode(node),
>> - &dev, false)) {
>> - if (!device_probe(dev))
>> - down_serial_dev = dev;
>> - }
>> - if (!down_serial_dev) {
>> - log_err("%s = %s device not found", alias, path);
>> + if (uclass_get_device_by_seq(UCLASS_SERIAL, link_dev, &dev)) {
>> + log_err("serial %d device not found\n", link_dev);
>> return -ENODEV;
>> }
>>
>> + down_serial_dev = dev;
>> +
>> /* force silent console on uart only when used */
>> if (gd->cur_serial_dev == down_serial_dev)
>> gd->flags |= GD_FLG_DISABLE_CONSOLE | GD_FLG_SILENT;
>> @@ -226,11 +209,11 @@ int stm32prog_serial_init(struct stm32prog_data *data, int link_dev)
>> ops = serial_get_ops(down_serial_dev);
>>
>> if (!ops) {
>> - log_err("%s = %s missing ops", alias, path);
>> + log_err("serial %d = %s missing ops\n", link_dev, dev->name);
>> return -ENODEV;
>> }
>> if (!ops->setconfig) {
>> - log_err("%s = %s missing setconfig", alias, path);
>> + log_err("serial %d = %s missing setconfig\n", link_dev, dev->name);
>> return -ENODEV;
>> }
>>
>> diff --git a/arch/arm/mach-stm32mp/cpu.c b/arch/arm/mach-stm32mp/cpu.c
>> index 527b6290de..9a76b5633b 100644
>> --- a/arch/arm/mach-stm32mp/cpu.c
>> +++ b/arch/arm/mach-stm32mp/cpu.c
>> @@ -466,7 +466,6 @@ static void setup_boot_mode(void)
>> unsigned int instance = (boot_mode & TAMP_BOOT_INSTANCE_MASK) - 1;
>> u32 forced_mode = (boot_ctx & TAMP_BOOT_FORCED_MASK);
>> struct udevice *dev;
>> - int alias;
>>
>> log_debug("%s: boot_ctx=0x%x => boot_mode=%x, instance=%d forced=%x\n",
>> __func__, boot_ctx, boot_mode, instance, forced_mode);
>> @@ -474,20 +473,18 @@ static void setup_boot_mode(void)
>> case BOOT_SERIAL_UART:
>> if (instance > ARRAY_SIZE(serial_addr))
>> break;
>> - /* serial : search associated alias in devicetree */
>> + /* serial : search associated node in devicetree */
>> sprintf(cmd, "serial@%x", serial_addr[instance]);
>> - if (uclass_get_device_by_name(UCLASS_SERIAL, cmd, &dev) ||
>> - fdtdec_get_alias_seq(gd->fdt_blob, "serial",
>> - dev_of_offset(dev), &alias)) {
>> + if (uclass_get_device_by_name(UCLASS_SERIAL, cmd, &dev)) {
>> /* restore console on error */
>> if (IS_ENABLED(CONFIG_CMD_STM32PROG_SERIAL))
>> gd->flags &= ~(GD_FLG_SILENT |
>> GD_FLG_DISABLE_CONSOLE);
>> - printf("serial%d = %s not found in device tree!\n",
>> + printf("uart%d = %s not found in device tree!\n",
>> instance, cmd);
>> break;
>> }
>> - sprintf(cmd, "%d", alias);
>> + sprintf(cmd, "%d", dev_seq(dev));
>> env_set("boot_device", "serial");
>> env_set("boot_instance", cmd);
>>
>>
>
> Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
>
> Thanks
> Patrice
>
Applied to u-boot-stm/next
Thanks
Patrice
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2021-03-12 12:28 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-25 12:37 [PATCH 1/4] stm32mp: stm32prog: Add Kconfig file for stm32prog command Patrick Delaunay
2021-02-25 12:37 ` [PATCH 2/4] stm32mp: stm32prog: Add CONFIG_CMD_STM32PROG_SERIAL and _USB Patrick Delaunay
2021-03-09 13:08 ` Patrice CHOTARD
2021-03-12 12:27 ` Patrice CHOTARD
2021-02-25 12:37 ` [PATCH 3/4] stm32mp: stm32prog: reactivate console and display serial error Patrick Delaunay
2021-03-09 13:11 ` Patrice CHOTARD
2021-03-12 12:28 ` Patrice CHOTARD
2021-02-25 12:37 ` [PATCH 4/4] stm32mp: stm32prog: replace alias by serial device sequence number Patrick Delaunay
2021-03-09 13:14 ` Patrice CHOTARD
2021-03-12 12:28 ` Patrice CHOTARD
2021-03-09 13:07 ` [PATCH 1/4] stm32mp: stm32prog: Add Kconfig file for stm32prog command Patrice CHOTARD
2021-03-12 12:27 ` [Uboot-stm32] " Patrice CHOTARD
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.