Patchwork [U-Boot] dfu:ext4:fix Fix ext4{read|write} command formatting

login
register
mail settings
Submitter Łukasz Majewski
Date June 24, 2013, 2:18 p.m.
Message ID <1372083498-19938-1-git-send-email-l.majewski@samsung.com>
Download mbox | patch
Permalink /patch/253854/
State Changes Requested
Headers show

Comments

Łukasz Majewski - June 24, 2013, 2:18 p.m.
In the following commit:
"dfu: Support larger than memory transfers."
SHA1: ea2453d56b8860dbd18a3c517531ffc8dcb5c839

The ext4{read|write} command formatting has been changed. It removed
a mandatory [sizebytes] parameter.

It prevented from ext4 update via dfu. This commit restored the previous
behaviour.

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Tom Rini <trini@ti.com>
Cc: Pantelis Antoniou <panto@antoniou-consulting.com>
---
 drivers/dfu/dfu_mmc.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
Łukasz Majewski - June 26, 2013, 2:41 p.m.
Hi Tom,

> In the following commit:
> "dfu: Support larger than memory transfers."
> SHA1: ea2453d56b8860dbd18a3c517531ffc8dcb5c839
> 
> The ext4{read|write} command formatting has been changed. It removed
> a mandatory [sizebytes] parameter.
> 
> It prevented from ext4 update via dfu. This commit restored the
> previous behaviour.

Tom, please drop this patch, since it only fixes DFU eMMC write.

Unfortunately after dfu.c code changes to support NAND and arbitrary
files transmission, the eMMC ext4 read needs to be fixed.

I will prepare one patch set, which fixes read and write.
Tom Rini - June 26, 2013, 3:05 p.m.
On Wed, Jun 26, 2013 at 04:41:28PM +0200, Lukasz Majewski wrote:
> Hi Tom,
> 
> > In the following commit:
> > "dfu: Support larger than memory transfers."
> > SHA1: ea2453d56b8860dbd18a3c517531ffc8dcb5c839
> > 
> > The ext4{read|write} command formatting has been changed. It removed
> > a mandatory [sizebytes] parameter.
> > 
> > It prevented from ext4 update via dfu. This commit restored the
> > previous behaviour.
> 
> Tom, please drop this patch, since it only fixes DFU eMMC write.
> 
> Unfortunately after dfu.c code changes to support NAND and arbitrary
> files transmission, the eMMC ext4 read needs to be fixed.
> 
> I will prepare one patch set, which fixes read and write.

Ouch, sorry.  I thought I had tested those cases still.
Łukasz Majewski - June 26, 2013, 3:27 p.m.
On Wed, 26 Jun 2013 11:05:31 -0400, Tom Rini wrote:

> On Wed, Jun 26, 2013 at 04:41:28PM +0200, Lukasz Majewski wrote:
> > Hi Tom,
> > 
> > > In the following commit:
> > > "dfu: Support larger than memory transfers."
> > > SHA1: ea2453d56b8860dbd18a3c517531ffc8dcb5c839
> > > 
> > > The ext4{read|write} command formatting has been changed. It
> > > removed a mandatory [sizebytes] parameter.
> > > 
> > > It prevented from ext4 update via dfu. This commit restored the
> > > previous behaviour.
> > 
> > Tom, please drop this patch, since it only fixes DFU eMMC write.
> > 
> > Unfortunately after dfu.c code changes to support NAND and arbitrary
> > files transmission, the eMMC ext4 read needs to be fixed.
> > 
> > I will prepare one patch set, which fixes read and write.
> 
> Ouch, sorry.  I thought I had tested those cases still.
> 

With RAW_ADDR from very beginning, we can read chunk by chunk when
proper request from DFU arrives. 

With e.g. DFU_FS_EXT4 we first need to read all data from file system
to a buffer (dfu_buf) and then give it to DFU gadget piece by piece.

I will fix this and share patches.

Patch

diff --git a/drivers/dfu/dfu_mmc.c b/drivers/dfu/dfu_mmc.c
index e2f3978..032c6a7 100644
--- a/drivers/dfu/dfu_mmc.c
+++ b/drivers/dfu/dfu_mmc.c
@@ -94,10 +94,10 @@  static int mmc_file_op(enum dfu_mmc_op op, struct dfu_entity *dfu,
 			sprintf(cmd_buf + strlen(cmd_buf), " %lx", *len);
 		break;
 	case DFU_FS_EXT4:
-		sprintf(cmd_buf, "ext4%s mmc %d:%d 0x%x /%s",
+		sprintf(cmd_buf, "ext4%s mmc %d:%d 0x%x /%s %ld",
 			op == DFU_OP_READ ? "load" : "write",
 			dfu->data.mmc.dev, dfu->data.mmc.part,
-			(unsigned int) buf, dfu->name);
+			(unsigned int) buf, dfu->name, *len);
 		break;
 	default:
 		printf("%s: Layout (%s) not (yet) supported!\n", __func__,