Commit 1f92c074cbb53debc7ad31073dc7895d8a2aa44e
Committed by
Tom Rini
1 parent
552452f80c
Exists in
smarc_8mq_lf_v2020.04
and in
11 other branches
dfu: mmc: call fs functions instead of run_command
This unbreaks dfu mmc_file_op which is currently broken since using the load cmd on a buffer from heap is not allowed - added with commit aa3c609e2be5 ("fs: prevent overwriting reserved memory") Fixes: commit aa3c609e2be5 ("fs: prevent overwriting reserved memory") Reported-by: Stephen Warren <swarren@wwwdotorg.org> Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com> Tested-by: Stephen Warren <swarren@nvidia.com> Acked-by: Lukasz Majewski <lukma@denx.de>
Showing 2 changed files with 31 additions and 37 deletions Side-by-side Diff
drivers/dfu/dfu_mmc.c
... | ... | @@ -108,17 +108,17 @@ |
108 | 108 | static int mmc_file_op(enum dfu_op op, struct dfu_entity *dfu, |
109 | 109 | void *buf, u64 *len) |
110 | 110 | { |
111 | - const char *fsname, *opname; | |
112 | - char cmd_buf[DFU_CMD_BUF_SIZE]; | |
113 | - char *str_env; | |
111 | + char dev_part_str[8]; | |
114 | 112 | int ret; |
113 | + int fstype; | |
114 | + loff_t size = 0; | |
115 | 115 | |
116 | 116 | switch (dfu->layout) { |
117 | 117 | case DFU_FS_FAT: |
118 | - fsname = "fat"; | |
118 | + fstype = FS_TYPE_FAT; | |
119 | 119 | break; |
120 | 120 | case DFU_FS_EXT4: |
121 | - fsname = "ext4"; | |
121 | + fstype = FS_TYPE_EXT; | |
122 | 122 | break; |
123 | 123 | default: |
124 | 124 | printf("%s: Layout (%s) not (yet) supported!\n", __func__, |
125 | 125 | |
126 | 126 | |
127 | 127 | |
128 | 128 | |
... | ... | @@ -126,46 +126,41 @@ |
126 | 126 | return -1; |
127 | 127 | } |
128 | 128 | |
129 | + snprintf(dev_part_str, sizeof(dev_part_str), "%d:%d", | |
130 | + dfu->data.mmc.dev, dfu->data.mmc.part); | |
131 | + | |
132 | + ret = fs_set_blk_dev("mmc", dev_part_str, fstype); | |
133 | + if (ret) { | |
134 | + puts("dfu: fs_set_blk_dev error!\n"); | |
135 | + return ret; | |
136 | + } | |
137 | + | |
129 | 138 | switch (op) { |
130 | 139 | case DFU_OP_READ: |
131 | - opname = "load"; | |
140 | + ret = fs_read(dfu->name, (size_t)buf, 0, 0, &size); | |
141 | + if (ret) { | |
142 | + puts("dfu: fs_read error!\n"); | |
143 | + return ret; | |
144 | + } | |
145 | + *len = size; | |
132 | 146 | break; |
133 | 147 | case DFU_OP_WRITE: |
134 | - opname = "write"; | |
148 | + ret = fs_write(dfu->name, (size_t)buf, 0, *len, &size); | |
149 | + if (ret) { | |
150 | + puts("dfu: fs_write error!\n"); | |
151 | + return ret; | |
152 | + } | |
135 | 153 | break; |
136 | 154 | case DFU_OP_SIZE: |
137 | - opname = "size"; | |
155 | + ret = fs_size(dfu->name, &size); | |
156 | + if (ret) { | |
157 | + puts("dfu: fs_size error!\n"); | |
158 | + return ret; | |
159 | + } | |
160 | + *len = size; | |
138 | 161 | break; |
139 | 162 | default: |
140 | 163 | return -1; |
141 | - } | |
142 | - | |
143 | - sprintf(cmd_buf, "%s%s mmc %d:%d", fsname, opname, | |
144 | - dfu->data.mmc.dev, dfu->data.mmc.part); | |
145 | - | |
146 | - if (op != DFU_OP_SIZE) | |
147 | - sprintf(cmd_buf + strlen(cmd_buf), " %p", buf); | |
148 | - | |
149 | - sprintf(cmd_buf + strlen(cmd_buf), " %s", dfu->name); | |
150 | - | |
151 | - if (op == DFU_OP_WRITE) | |
152 | - sprintf(cmd_buf + strlen(cmd_buf), " %llx", *len); | |
153 | - | |
154 | - debug("%s: %s 0x%p\n", __func__, cmd_buf, cmd_buf); | |
155 | - | |
156 | - ret = run_command(cmd_buf, 0); | |
157 | - if (ret) { | |
158 | - puts("dfu: Read error!\n"); | |
159 | - return ret; | |
160 | - } | |
161 | - | |
162 | - if (op != DFU_OP_WRITE) { | |
163 | - str_env = env_get("filesize"); | |
164 | - if (str_env == NULL) { | |
165 | - puts("dfu: Wrong file size!\n"); | |
166 | - return -1; | |
167 | - } | |
168 | - *len = simple_strtoul(str_env, NULL, 16); | |
169 | 164 | } |
170 | 165 | |
171 | 166 | return ret; |