diff mbox series

dfu: dfu_mtd: remove the mtd_block_op error when mtd_lock is not supported

Message ID 20210310102719.1.Ieb141155065c9aaf05a0199ef688e1eb3ba0e621@changeid
State Accepted
Commit a5bb384caa050660220270beb19452bbe927a72b
Delegated to: Patrick Delaunay
Headers show
Series dfu: dfu_mtd: remove the mtd_block_op error when mtd_lock is not supported | expand

Commit Message

Patrick DELAUNAY March 10, 2021, 9:27 a.m. UTC
Fix the result of DFU_OP_WRITE operation in mtd_block_op function
when mtd_lock is not supported (-EOPNOTSUPP) to avoid DFU stack
error on the DFU manifestation of the MTD device, when
dfu_flush_medium_mtd is called.

Without this patch, dfu-util failed on dfuERROR state at the end
of the write operation on the alternate even if MTD write
opeartion is correctly performed.

$> dfu-util -a 3 -D test.bin
....
DFU mode device DFU version 0110
Device returned transfer size 4096
Copying data from PC to DFU device
....
Download	[=========================] 100%       225469 bytes
Download done.
state(10) = dfuERROR, status(14) = Something went wrong,
  but the device does not know what it was Done!

Fixes: 65f3fc18fc1e ("dfu_mtd: Add provision to unlock mtd device")
Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
---

 drivers/dfu/dfu_mtd.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Sughosh Ganu March 10, 2021, 11:15 a.m. UTC | #1
On Wed, 10 Mar 2021 at 14:57, Patrick Delaunay <patrick.delaunay@foss.st.com>
wrote:

> Fix the result of DFU_OP_WRITE operation in mtd_block_op function
> when mtd_lock is not supported (-EOPNOTSUPP) to avoid DFU stack
> error on the DFU manifestation of the MTD device, when
> dfu_flush_medium_mtd is called.
>
> Without this patch, dfu-util failed on dfuERROR state at the end
> of the write operation on the alternate even if MTD write
> opeartion is correctly performed.
>
> $> dfu-util -a 3 -D test.bin
> ....
> DFU mode device DFU version 0110
> Device returned transfer size 4096
> Copying data from PC to DFU device
> ....
> Download        [=========================] 100%       225469 bytes
> Download done.
> state(10) = dfuERROR, status(14) = Something went wrong,
>   but the device does not know what it was Done!
>
> Fixes: 65f3fc18fc1e ("dfu_mtd: Add provision to unlock mtd device")
> Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
> ---
>

Acked-by: Sughosh Ganu <sughosh.ganu@linaro.org>


>
>  drivers/dfu/dfu_mtd.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/dfu/dfu_mtd.c b/drivers/dfu/dfu_mtd.c
> index ca67585a7e..ec40b8f6bb 100644
> --- a/drivers/dfu/dfu_mtd.c
> +++ b/drivers/dfu/dfu_mtd.c
> @@ -150,7 +150,9 @@ static int mtd_block_op(enum dfu_op op, struct
> dfu_entity *dfu,
>                 /* Write done, lock again */
>                 debug("Locking the mtd device\n");
>                 ret = mtd_lock(mtd, lock_ofs, lock_len);
> -               if (ret && ret != -EOPNOTSUPP)
> +               if (ret == -EOPNOTSUPP)
> +                       ret = 0;
> +               else if (ret)
>                         printf("MTD device lock failed\n");
>         }
>         return ret;
> --
> 2.17.1
>
>
Patrick DELAUNAY May 28, 2021, 9:32 a.m. UTC | #2
Hi,

On 3/10/21 12:15 PM, Sughosh Ganu wrote:
>
>
> On Wed, 10 Mar 2021 at 14:57, Patrick Delaunay 
> <patrick.delaunay@foss.st.com <mailto:patrick.delaunay@foss.st.com>> 
> wrote:
>
>     Fix the result of DFU_OP_WRITE operation in mtd_block_op function
>     when mtd_lock is not supported (-EOPNOTSUPP) to avoid DFU stack
>     error on the DFU manifestation of the MTD device, when
>     dfu_flush_medium_mtd is called.
>
>     Without this patch, dfu-util failed on dfuERROR state at the end
>     of the write operation on the alternate even if MTD write
>     opeartion is correctly performed.
>
>     $> dfu-util -a 3 -D test.bin
>     ....
>     DFU mode device DFU version 0110
>     Device returned transfer size 4096
>     Copying data from PC to DFU device
>     ....
>     Download        [=========================] 100%  225469 bytes
>     Download done.
>     state(10) = dfuERROR, status(14) = Something went wrong,
>       but the device does not know what it was Done!
>
>     Fixes: 65f3fc18fc1e ("dfu_mtd: Add provision to unlock mtd device")
>     Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com
>     <mailto:patrick.delaunay@foss.st.com>>
>     ---
>
>
> Acked-by: Sughosh Ganu <sughosh.ganu@linaro.org 
> <mailto:sughosh.ganu@linaro.org>>
>
>
>      drivers/dfu/dfu_mtd.c | 4 +++-
>      1 file changed, 3 insertions(+), 1 deletion(-)
>
>     diff --git a/drivers/dfu/dfu_mtd.c b/drivers/dfu/dfu_mtd.c
>     index ca67585a7e..ec40b8f6bb 100644
>     --- a/drivers/dfu/dfu_mtd.c
>     +++ b/drivers/dfu/dfu_mtd.c
>     @@ -150,7 +150,9 @@ static int mtd_block_op(enum dfu_op op, struct
>     dfu_entity *dfu,
>                     /* Write done, lock again */
>                     debug("Locking the mtd device\n");
>                     ret = mtd_lock(mtd, lock_ofs, lock_len);
>     -               if (ret && ret != -EOPNOTSUPP)
>     +               if (ret == -EOPNOTSUPP)
>     +                       ret = 0;
>     +               else if (ret)
>                             printf("MTD device lock failed\n");
>             }
>             return ret;
>     -- 
>     2.17.1
>

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

See request in

Re: [PATCH v4 12/14] dfu_mtd: Ignore non-implemented lock device failure

http://patchwork.ozlabs.org/project/uboot/patch/162140319389.47256.629728945246178860.stgit@localhost/#2685391

http://u-boot.10912.n7.nabble.com/PATCH-v4-00-14-arm64-synquacer-Add-SynQuacer-DeveloperBox-support-tp450231p450243.html


Patrick
diff mbox series

Patch

diff --git a/drivers/dfu/dfu_mtd.c b/drivers/dfu/dfu_mtd.c
index ca67585a7e..ec40b8f6bb 100644
--- a/drivers/dfu/dfu_mtd.c
+++ b/drivers/dfu/dfu_mtd.c
@@ -150,7 +150,9 @@  static int mtd_block_op(enum dfu_op op, struct dfu_entity *dfu,
 		/* Write done, lock again */
 		debug("Locking the mtd device\n");
 		ret = mtd_lock(mtd, lock_ofs, lock_len);
-		if (ret && ret != -EOPNOTSUPP)
+		if (ret == -EOPNOTSUPP)
+			ret = 0;
+		else if (ret)
 			printf("MTD device lock failed\n");
 	}
 	return ret;