[U-Boot] [PATCH] RFC: dfu: mmc: call fs functions instead of run_command

Simon Goldschmidt simon.k.r.goldschmidt at gmail.com
Thu Jan 24 18:54:59 UTC 2019


Steven,


Am Do., 24. Jan. 2019, 19:39 hat Simon Goldschmidt <
simon.k.r.goldschmidt at gmail.com> geschrieben:

> This unbreaks dfu mmc_file_op which is currently broken since using the
> load cmd on a buffer from heap is not allowed.
>
> Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt at gmail.com>
>

I'd be very thankful if you could test this! It's RFC as I don't know to
test DFU.

Thanks,
Simon

---
>
>  drivers/dfu/dfu_mmc.c | 67 ++++++++++++++++++++-----------------------
>  1 file changed, 31 insertions(+), 36 deletions(-)
>
> diff --git a/drivers/dfu/dfu_mmc.c b/drivers/dfu/dfu_mmc.c
> index b45e6dc54c..2585b14328 100644
> --- a/drivers/dfu/dfu_mmc.c
> +++ b/drivers/dfu/dfu_mmc.c
> @@ -108,17 +108,17 @@ static int mmc_file_buffer(struct dfu_entity *dfu,
> void *buf, long *len)
>  static int mmc_file_op(enum dfu_op op, struct dfu_entity *dfu,
>                         void *buf, u64 *len)
>  {
> -       const char *fsname, *opname;
> -       char cmd_buf[DFU_CMD_BUF_SIZE];
> -       char *str_env;
> +       char dev_part_str[DFU_CMD_BUF_SIZE];
>         int ret;
> +       int fstype;
> +       loff_t size = 0;
>
>         switch (dfu->layout) {
>         case DFU_FS_FAT:
> -               fsname = "fat";
> +               fstype = FS_TYPE_FAT;
>                 break;
>         case DFU_FS_EXT4:
> -               fsname = "ext4";
> +               fstype = FS_TYPE_EXT;
>                 break;
>         default:
>                 printf("%s: Layout (%s) not (yet) supported!\n", __func__,
> @@ -126,48 +126,43 @@ static int mmc_file_op(enum dfu_op op, struct
> dfu_entity *dfu,
>                 return -1;
>         }
>
> +       snprintf(dev_part_str, DFU_CMD_BUF_SIZE, "%d:%d",
> dfu->data.mmc.dev,
> +                dfu->data.mmc.part);
> +
> +       ret = fs_set_blk_dev("mmc", dev_part_str, fstype);
> +       if (ret) {
> +               puts("dfu: fs_set_blk_dev error!\n");
> +               return ret;
> +       }
> +
>         switch (op) {
>         case DFU_OP_READ:
> -               opname = "load";
> +               ret = fs_read(dfu->name, (size_t)buf, 0, 0, &size);
> +               if (ret) {
> +                       puts("dfu: fs_read error!\n");
> +                       return ret;
> +               }
> +               *len = size;
>                 break;
>         case DFU_OP_WRITE:
> -               opname = "write";
> +               ret = fs_write(dfu->name, (size_t)buf, 0, *len, &size);
> +               if (ret) {
> +                       puts("dfu: fs_write error!\n");
> +                       return ret;
> +               }
>                 break;
>         case DFU_OP_SIZE:
> -               opname = "size";
> +               ret = fs_size(dfu->name, &size);
> +               if (ret) {
> +                       puts("dfu: fs_size error!\n");
> +                       return ret;
> +               }
> +               *len = size;
>                 break;
>         default:
>                 return -1;
>         }
>
> -       sprintf(cmd_buf, "%s%s mmc %d:%d", fsname, opname,
> -               dfu->data.mmc.dev, dfu->data.mmc.part);
> -
> -       if (op != DFU_OP_SIZE)
> -               sprintf(cmd_buf + strlen(cmd_buf), " %p", buf);
> -
> -       sprintf(cmd_buf + strlen(cmd_buf), " %s", dfu->name);
> -
> -       if (op == DFU_OP_WRITE)
> -               sprintf(cmd_buf + strlen(cmd_buf), " %llx", *len);
> -
> -       debug("%s: %s 0x%p\n", __func__, cmd_buf, cmd_buf);
> -
> -       ret = run_command(cmd_buf, 0);
> -       if (ret) {
> -               puts("dfu: Read error!\n");
> -               return ret;
> -       }
> -
> -       if (op != DFU_OP_WRITE) {
> -               str_env = env_get("filesize");
> -               if (str_env == NULL) {
> -                       puts("dfu: Wrong file size!\n");
> -                       return -1;
> -               }
> -               *len = simple_strtoul(str_env, NULL, 16);
> -       }
> -
>         return ret;
>  }
>
> --
> 2.17.1
>
>


More information about the U-Boot mailing list