projects
/
oweals
/
u-boot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fdt: x86: Tidy up a few COMPAT string definitions
[oweals/u-boot.git]
/
drivers
/
dfu
/
dfu_sf.c
diff --git
a/drivers/dfu/dfu_sf.c
b/drivers/dfu/dfu_sf.c
index c3d3c3bcd85355b77dc8cb1d4c945a589f550781..9702eeea202a97f87b9c24b152e335d792b4f49b 100644
(file)
--- a/
drivers/dfu/dfu_sf.c
+++ b/
drivers/dfu/dfu_sf.c
@@
-23,16
+23,25
@@
static int dfu_read_medium_sf(struct dfu_entity *dfu, u64 offset, void *buf,
return spi_flash_read(dfu->data.sf.dev, offset, *len, buf);
}
return spi_flash_read(dfu->data.sf.dev, offset, *len, buf);
}
+static u64 find_sector(struct dfu_entity *dfu, u64 start, u64 offset)
+{
+ return (lldiv((start + offset), dfu->data.sf.dev->sector_size)) *
+ dfu->data.sf.dev->sector_size;
+}
+
static int dfu_write_medium_sf(struct dfu_entity *dfu,
u64 offset, void *buf, long *len)
{
int ret;
static int dfu_write_medium_sf(struct dfu_entity *dfu,
u64 offset, void *buf, long *len)
{
int ret;
- ret = spi_flash_erase(dfu->data.sf.dev, offset, *len);
+ ret = spi_flash_erase(dfu->data.sf.dev,
+ find_sector(dfu, dfu->data.sf.start, offset),
+ dfu->data.sf.dev->sector_size);
if (ret)
return ret;
if (ret)
return ret;
- ret = spi_flash_write(dfu->data.sf.dev, offset, *len, buf);
+ ret = spi_flash_write(dfu->data.sf.dev, dfu->data.sf.start + offset,
+ *len, buf);
if (ret)
return ret;
if (ret)
return ret;
@@
-106,8
+115,10
@@
static struct spi_flash *parse_dev(char *devstr)
int dfu_fill_entity_sf(struct dfu_entity *dfu, char *devstr, char *s)
{
char *st;
int dfu_fill_entity_sf(struct dfu_entity *dfu, char *devstr, char *s)
{
char *st;
+ char *devstr_bkup = strdup(devstr);
- dfu->data.sf.dev = parse_dev(devstr);
+ dfu->data.sf.dev = parse_dev(devstr_bkup);
+ free(devstr_bkup);
if (!dfu->data.sf.dev)
return -ENODEV;
if (!dfu->data.sf.dev)
return -ENODEV;