projects
/
platform
/
kernel
/
u-boot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch '2022-08-04-Kconfig-migrations'
[platform/kernel/u-boot.git]
/
drivers
/
dfu
/
dfu_sf.c
diff --git
a/drivers/dfu/dfu_sf.c
b/drivers/dfu/dfu_sf.c
index
8f8c425
..
2dae159
100644
(file)
--- a/
drivers/dfu/dfu_sf.c
+++ b/
drivers/dfu/dfu_sf.c
@@
-4,7
+4,6
@@
*/
#include <common.h>
*/
#include <common.h>
-#include <flash.h>
#include <malloc.h>
#include <errno.h>
#include <div64.h>
#include <malloc.h>
#include <errno.h>
#include <div64.h>
@@
-13,6
+12,7
@@
#include <spi_flash.h>
#include <jffs2/load_kernel.h>
#include <linux/mtd/mtd.h>
#include <spi_flash.h>
#include <jffs2/load_kernel.h>
#include <linux/mtd/mtd.h>
+#include <linux/ctype.h>
static int dfu_get_medium_size_sf(struct dfu_entity *dfu, u64 *size)
{
static int dfu_get_medium_size_sf(struct dfu_entity *dfu, u64 *size)
{
@@
-24,8
+24,18
@@
static int dfu_get_medium_size_sf(struct dfu_entity *dfu, u64 *size)
static int dfu_read_medium_sf(struct dfu_entity *dfu, u64 offset, void *buf,
long *len)
{
static int dfu_read_medium_sf(struct dfu_entity *dfu, u64 offset, void *buf,
long *len)
{
- return spi_flash_read(dfu->data.sf.dev, dfu->data.sf.start + offset,
- *len, buf);
+ long seglen = *len;
+ int ret;
+
+ if (seglen > (16 << 20))
+ seglen = (16 << 20);
+
+ ret = spi_flash_read(dfu->data.sf.dev, dfu->data.sf.start + offset,
+ seglen, buf);
+ if (!ret)
+ *len = seglen;
+
+ return ret;
}
static u64 find_sector(struct dfu_entity *dfu, u64 start, u64 offset)
}
static u64 find_sector(struct dfu_entity *dfu, u64 start, u64 offset)
@@
-155,9
+165,9
@@
static struct spi_flash *parse_dev(char *devstr)
return dev;
}
return dev;
}
-int dfu_fill_entity_sf(struct dfu_entity *dfu, char *devstr, char *
s
)
+int dfu_fill_entity_sf(struct dfu_entity *dfu, char *devstr, char *
*argv, int argc
)
{
{
- char *s
t
;
+ char *s;
char *devstr_bkup = strdup(devstr);
dfu->data.sf.dev = parse_dev(devstr_bkup);
char *devstr_bkup = strdup(devstr);
dfu->data.sf.dev = parse_dev(devstr_bkup);
@@
-168,14
+178,18
@@
int dfu_fill_entity_sf(struct dfu_entity *dfu, char *devstr, char *s)
dfu->dev_type = DFU_DEV_SF;
dfu->max_buf_size = dfu->data.sf.dev->sector_size;
dfu->dev_type = DFU_DEV_SF;
dfu->max_buf_size = dfu->data.sf.dev->sector_size;
- st = strsep(&s, " ");
- if (!strcmp(st, "raw")) {
+ if (argc != 3)
+ return -EINVAL;
+ if (!strcmp(argv[0], "raw")) {
dfu->layout = DFU_RAW_ADDR;
dfu->layout = DFU_RAW_ADDR;
- dfu->data.sf.start = simple_strtoul(s, &s, 16);
- s++;
- dfu->data.sf.size = simple_strtoul(s, &s, 16);
+ dfu->data.sf.start = hextoul(argv[1], &s);
+ if (*s)
+ return -EINVAL;
+ dfu->data.sf.size = hextoul(argv[2], &s);
+ if (*s)
+ return -EINVAL;
} else if (CONFIG_IS_ENABLED(DFU_SF_PART) &&
} else if (CONFIG_IS_ENABLED(DFU_SF_PART) &&
- (!strcmp(
st, "part") || !strcmp(st
, "partubi"))) {
+ (!strcmp(
argv[0], "part") || !strcmp(argv[0]
, "partubi"))) {
char mtd_id[32];
struct mtd_device *mtd_dev;
u8 part_num;
char mtd_id[32];
struct mtd_device *mtd_dev;
u8 part_num;
@@
-184,9
+198,12
@@
int dfu_fill_entity_sf(struct dfu_entity *dfu, char *devstr, char *s)
dfu->layout = DFU_RAW_ADDR;
dfu->layout = DFU_RAW_ADDR;
- dev = simple_strtoul(s, &s, 10);
- s++;
- part = simple_strtoul(s, &s, 10);
+ dev = dectoul(argv[1], &s);
+ if (*s)
+ return -EINVAL;
+ part = dectoul(argv[2], &s);
+ if (*s)
+ return -EINVAL;
sprintf(mtd_id, "%s%d,%d", "nor", dev, part - 1);
printf("using id '%s'\n", mtd_id);
sprintf(mtd_id, "%s%d,%d", "nor", dev, part - 1);
printf("using id '%s'\n", mtd_id);
@@
-200,10
+217,10
@@
int dfu_fill_entity_sf(struct dfu_entity *dfu, char *devstr, char *s)
}
dfu->data.sf.start = pi->offset;
dfu->data.sf.size = pi->size;
}
dfu->data.sf.start = pi->offset;
dfu->data.sf.size = pi->size;
- if (!strcmp(
st
, "partubi"))
+ if (!strcmp(
argv[0]
, "partubi"))
dfu->data.sf.ubi = 1;
} else {
dfu->data.sf.ubi = 1;
} else {
- printf("%s: Memory layout (%s) not supported!\n", __func__,
st
);
+ printf("%s: Memory layout (%s) not supported!\n", __func__,
argv[0]
);
spi_flash_free(dfu->data.sf.dev);
return -1;
}
spi_flash_free(dfu->data.sf.dev);
return -1;
}