Update the stm32prog command to allow the reception of U-Boot script in
the FlashLayout alternate during the first USB enumeration.

This patch is aligned with the last TF-A behavior: the Flashlayout
is now loaded by U-Boot; it is no more present at STM32_DDR_BASE when
the stm32prog is launched after a serial boot, on UART or on USB.

The received script must be a U-Boot legacy image, no more need to add
a stm32image header.

Signed-off-by: Patrick Delaunay <patrick.delau...@foss.st.com>
---

 arch/arm/mach-stm32mp/cmd_stm32prog/cmd_stm32prog.c | 9 ++-------
 arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c     | 9 +++++++++
 arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h     | 2 ++
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/cmd_stm32prog.c 
b/arch/arm/mach-stm32mp/cmd_stm32prog/cmd_stm32prog.c
index 3957e06e5d..f59414e716 100644
--- a/arch/arm/mach-stm32mp/cmd_stm32prog/cmd_stm32prog.c
+++ b/arch/arm/mach-stm32mp/cmd_stm32prog/cmd_stm32prog.c
@@ -76,13 +76,6 @@ static int do_stm32prog(struct cmd_tbl *cmdtp, int flag, int 
argc,
                stm32prog_header_check(addr, &header);
                if (header.type == HEADER_STM32IMAGE) {
                        size = header.image_length + header.length;
-
-#if defined(CONFIG_LEGACY_IMAGE_FORMAT)
-                       /* uImage detected in STM32IMAGE, execute the script */
-                       if (IMAGE_FORMAT_LEGACY ==
-                           genimg_get_format((void *)(addr + header.length)))
-                               return image_source_script(addr + 
header.length, "script@1");
-#endif
                }
        }
 
@@ -160,6 +153,8 @@ static int do_stm32prog(struct cmd_tbl *cmdtp, int flag, 
int argc,
                else if (CONFIG_IS_ENABLED(CMD_BOOTZ))
                        do_bootz(cmdtp, 0, 4, bootm_argv);
        }
+       if (data->script)
+               image_source_script(data->script, "script@stm32prog");
 
        if (reset) {
                puts("Reset...\n");
diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c 
b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c
index d3b3e1ed72..65655e25ca 100644
--- a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c
+++ b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.c
@@ -6,6 +6,7 @@
 #include <command.h>
 #include <console.h>
 #include <dfu.h>
+#include <image.h>
 #include <malloc.h>
 #include <misc.h>
 #include <mmc.h>
@@ -1697,6 +1698,14 @@ error:
 static void stm32prog_end_phase(struct stm32prog_data *data, u64 offset)
 {
        if (data->phase == PHASE_FLASHLAYOUT) {
+#if defined(CONFIG_LEGACY_IMAGE_FORMAT)
+               if (genimg_get_format((void *)STM32_DDR_BASE) == 
IMAGE_FORMAT_LEGACY) {
+                       data->script = STM32_DDR_BASE;
+                       data->phase = PHASE_END;
+                       log_notice("U-Boot script received\n");
+                       return;
+               }
+#endif
                if (parse_flash_layout(data, STM32_DDR_BASE, 0))
                        stm32prog_err("Layout: invalid FlashLayout");
                return;
diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h 
b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h
index b3e5c74810..ac300768ca 100644
--- a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h
+++ b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog.h
@@ -170,6 +170,8 @@ struct stm32prog_data {
        u32     initrd;
        u32     initrd_size;
 
+       u32     script;
+
        /* OPTEE PTA NVMEM */
        struct udevice *tee;
        u32 tee_session;
-- 
2.25.1

Reply via email to