]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
arm: stm32mp: stm32prog: always flush DFU on start command for uart
authorPatrick Delaunay <patrick.delaunay@st.com>
Fri, 11 Dec 2020 12:36:18 +0000 (13:36 +0100)
committerPatrick Delaunay <patrick.delaunay@foss.st.com>
Wed, 13 Jan 2021 08:52:58 +0000 (09:52 +0100)
Remove the test on data->dfu_seq, because dfu_seq=0 not only when
the DFU is not started (mask with 0xffff). This flush is mandatory
as the final treatment, common with USB, is done in DFU callback.

This patch avoids issue if the received length is a multiple of
the DFU packet.

For example if size of bootfs partition is egual to 0x4000000,
data->dfu_seq=0 at the end of the partition, the flush it not
requested and the phase is not increased in the callback.
U-Boot continue to request the bootfs in the next GetPhase command.

Fixes: 468f0508b58b ("stm32mp: stm32prog: add serial link support")
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c

index e534b3fa821f5cf866b473554f30975fe9a0d14e..68d841bd9d183d18a35be6f92b85b2e807e7f87e 100644 (file)
@@ -397,14 +397,13 @@ static u8 stm32prog_start(struct stm32prog_data *data, u32 address)
                if (!dfu_entity)
                        return -ENODEV;
 
-               if (data->dfu_seq) {
-                       ret = dfu_flush(dfu_entity, NULL, 0, data->dfu_seq);
-                       data->dfu_seq = 0;
-                       if (ret) {
-                               stm32prog_err("DFU flush failed [%d]", ret);
-                               return ret;
-                       }
+               ret = dfu_flush(dfu_entity, NULL, 0, data->dfu_seq);
+               if (ret) {
+                       stm32prog_err("DFU flush failed [%d]", ret);
+                       return ret;
                }
+               data->dfu_seq = 0;
+
                printf("\n  received length = 0x%x\n", data->cursor);
                if (data->header.present) {
                        if (data->cursor !=