]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
dfu:ext4:fix Fix DFU upload functionality
authorŁukasz Majewski <l.majewski@samsung.com>
Fri, 28 Jun 2013 16:41:50 +0000 (18:41 +0200)
committerTom Rini <trini@ti.com>
Wed, 3 Jul 2013 12:41:23 +0000 (08:41 -0400)
For the first eMMC read of data for upload, use the "large" dfu_buf (now
configurable) instead of usb request buffer allocated at composite layer
(which is 4KiB) [*].

For eMMC the whole file is read, which usually is larger than the buffer [*]
provided with usb request.

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Cc: Tom Rini <trini@ti.com>
Cc: Pantelis Antoniou <panto@antoniou-consulting.com>
Cc: Marek Vasut <marex@denx.de>
Cc: Heiko Schocher <hs@denx.de>
drivers/dfu/dfu.c

index e429d7479fbffe6423c9a77207a02774fa054c10..05217526becf1258f12932e1cf483b9d88ee4e74 100644 (file)
@@ -248,7 +248,11 @@ int dfu_read(struct dfu_entity *dfu, void *buf, int size, int blk_seq_num)
               __func__, dfu->name, buf, size, blk_seq_num, dfu->i_buf);
 
        if (!dfu->inited) {
-               ret = dfu->read_medium(dfu, 0, buf, &dfu->r_left);
+               dfu->i_buf_start = dfu_get_buf();
+               if (dfu->i_buf_start == NULL)
+                       return -ENOMEM;
+
+               ret = dfu->read_medium(dfu, 0, dfu->i_buf_start, &dfu->r_left);
                if (ret != 0) {
                        debug("%s: failed to get r_left\n", __func__);
                        return ret;
@@ -259,9 +263,6 @@ int dfu_read(struct dfu_entity *dfu, void *buf, int size, int blk_seq_num)
                dfu->i_blk_seq_num = 0;
                dfu->crc = 0;
                dfu->offset = 0;
-               dfu->i_buf_start = dfu_get_buf();
-               if (dfu->i_buf_start == NULL)
-                       return -ENOMEM;
                dfu->i_buf_end = dfu_get_buf() + dfu_buf_size;
                dfu->i_buf = dfu->i_buf_start;
                dfu->b_left = 0;