[PATCH] arm: stm32mp: stm32prog: always flush DFU on start command for uart

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] arm: stm32mp: stm32prog: always flush DFU on start command for uart

Patrick DELAUNAY
From: Patrick Delaunay <[hidden email]>

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 <[hidden email]>
Signed-off-by: Patrick Delaunay <[hidden email]>
---

 .../mach-stm32mp/cmd_stm32prog/stm32prog_serial.c   | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
index 8aad4be467..8fba92b2b5 100644
--- a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
+++ b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
@@ -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 !=
--
2.17.1

Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] arm: stm32mp: stm32prog: always flush DFU on start command for uart

Patrice Chotard
Hi Patrick  

On 12/11/20 1:36 PM, Patrick Delaunay wrote:

> From: Patrick Delaunay <[hidden email]>
>
> 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 <[hidden email]>
> Signed-off-by: Patrick Delaunay <[hidden email]>
> ---
>
>  .../mach-stm32mp/cmd_stm32prog/stm32prog_serial.c   | 13 ++++++-------
>  1 file changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
> index 8aad4be467..8fba92b2b5 100644
> --- a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
> +++ b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
> @@ -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 !=

Reviewed-by: Patrice Chotard <[hidden email]>

Thanks

Patrice

Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] arm: stm32mp: stm32prog: always flush DFU on start command for uart

Patrice Chotard-2
In reply to this post by Patrick DELAUNAY
Hi Patrick

On 12/11/20 1:36 PM, Patrick Delaunay wrote:

> From: Patrick Delaunay <[hidden email]>
>
> 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 <[hidden email]>
> Signed-off-by: Patrick Delaunay <[hidden email]>
> ---
>
>  .../mach-stm32mp/cmd_stm32prog/stm32prog_serial.c   | 13 ++++++-------
>  1 file changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
> index 8aad4be467..8fba92b2b5 100644
> --- a/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
> +++ b/arch/arm/mach-stm32mp/cmd_stm32prog/stm32prog_serial.c
> @@ -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 !=

Reviewed-by: Patrice Chotard <[hidden email]>

Thanks

Patrice

Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] arm: stm32mp: stm32prog: always flush DFU on start command for uart

Patrick DELAUNAY
In reply to this post by Patrick DELAUNAY
Hi,

On 12/11/20 1:36 PM, Patrick Delaunay wrote:

> From: Patrick Delaunay <[hidden email]>
>
> 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 <[hidden email]>
> Signed-off-by: Patrick Delaunay <[hidden email]>
> ---
>
>   .../mach-stm32mp/cmd_stm32prog/stm32prog_serial.c   | 13 ++++++-------
>   1 file changed, 6 insertions(+), 7 deletions(-)
>

Applied to u-boot-stm/master, thanks!

Regards

Patrick