Signed-off-by: Luka Perkov <luka@openwrt.org> SVN-Revision: 38444master
parent
03ccf4eeb0
commit
494bc1d026
@ -1,28 +0,0 @@ |
|||||||
From: Oliver Metz <oliver@freetz.org>
|
|
||||||
Subject: [PATCH v2 1/2] fw_env: add redundant env support for MTD_ABSENT
|
|
||||||
|
|
||||||
Signed-off-by: Oliver Metz <oliver@freetz.org>
|
|
||||||
Tested-by: Luka Perkov <luka@openwrt.org>
|
|
||||||
---
|
|
||||||
|
|
||||||
v1 -> v2:
|
|
||||||
* correct spelling of redundant
|
|
||||||
|
|
||||||
http://lists.denx.de/pipermail/u-boot/2013-August/161694.html
|
|
||||||
http://patchwork.ozlabs.org/patch/270993/
|
|
||||||
|
|
||||||
tools/env/fw_env.c | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
--- a/tools/env/fw_env.c
|
|
||||||
+++ b/tools/env/fw_env.c
|
|
||||||
@@ -1152,6 +1152,9 @@ int fw_env_open(void)
|
|
||||||
} else if (DEVTYPE(dev_current) == MTD_UBIVOLUME &&
|
|
||||||
DEVTYPE(!dev_current) == MTD_UBIVOLUME) {
|
|
||||||
environment.flag_scheme = FLAG_INCREMENTAL;
|
|
||||||
+ } else if (DEVTYPE(dev_current) == MTD_ABSENT &&
|
|
||||||
+ DEVTYPE(!dev_current) == MTD_ABSENT) {
|
|
||||||
+ environment.flag_scheme = FLAG_INCREMENTAL;
|
|
||||||
} else {
|
|
||||||
fprintf (stderr, "Incompatible flash types!\n");
|
|
||||||
return -1;
|
|
@ -1,114 +0,0 @@ |
|||||||
From: Oliver Metz <oliver@freetz.org>
|
|
||||||
Subject: [PATCH v2 2/2] fw_env: fix writing environment for mtd devices
|
|
||||||
|
|
||||||
Signed-off-by: Oliver Metz <oliver@freetz.org>
|
|
||||||
Tested-by: Luka Perkov <luka@openwrt.org>
|
|
||||||
---
|
|
||||||
|
|
||||||
v1 -> v2:
|
|
||||||
* fix checkpatch.pl warnings
|
|
||||||
|
|
||||||
http://lists.denx.de/pipermail/u-boot/2013-August/161695.html
|
|
||||||
http://patchwork.ozlabs.org/patch/270994/
|
|
||||||
|
|
||||||
tools/env/fw_env.c | 70 ++++++++++++++++++++++++++++++++----------------------
|
|
||||||
1 file changed, 42 insertions(+), 28 deletions(-)
|
|
||||||
|
|
||||||
--- a/tools/env/fw_env.c
|
|
||||||
+++ b/tools/env/fw_env.c
|
|
||||||
@@ -743,27 +743,39 @@ static int flash_write_buf (int dev, int
|
|
||||||
MEMGETBADBLOCK needs 64 bits */
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
- blocklen = DEVESIZE (dev);
|
|
||||||
+ /*
|
|
||||||
+ * For mtd devices only offset and size of the environment do matter
|
|
||||||
+ */
|
|
||||||
+ if (mtd_type == MTD_ABSENT) {
|
|
||||||
+ blocklen = count;
|
|
||||||
+ top_of_range = offset + count;
|
|
||||||
+ erase_len = blocklen;
|
|
||||||
+ blockstart = offset;
|
|
||||||
+ block_seek = 0;
|
|
||||||
+ write_total = blocklen;
|
|
||||||
+ } else {
|
|
||||||
+ blocklen = DEVESIZE(dev);
|
|
||||||
|
|
||||||
- top_of_range = ((DEVOFFSET(dev) / blocklen) +
|
|
||||||
- ENVSECTORS (dev)) * blocklen;
|
|
||||||
+ top_of_range = ((DEVOFFSET(dev) / blocklen) +
|
|
||||||
+ ENVSECTORS(dev)) * blocklen;
|
|
||||||
|
|
||||||
- erase_offset = (offset / blocklen) * blocklen;
|
|
||||||
+ erase_offset = (offset / blocklen) * blocklen;
|
|
||||||
|
|
||||||
- /* Maximum area we may use */
|
|
||||||
- erase_len = top_of_range - erase_offset;
|
|
||||||
+ /* Maximum area we may use */
|
|
||||||
+ erase_len = top_of_range - erase_offset;
|
|
||||||
|
|
||||||
- blockstart = erase_offset;
|
|
||||||
- /* Offset inside a block */
|
|
||||||
- block_seek = offset - erase_offset;
|
|
||||||
+ blockstart = erase_offset;
|
|
||||||
+ /* Offset inside a block */
|
|
||||||
+ block_seek = offset - erase_offset;
|
|
||||||
|
|
||||||
- /*
|
|
||||||
- * Data size we actually have to write: from the start of the block
|
|
||||||
- * to the start of the data, then count bytes of data, and to the
|
|
||||||
- * end of the block
|
|
||||||
- */
|
|
||||||
- write_total = ((block_seek + count + blocklen - 1) /
|
|
||||||
- blocklen) * blocklen;
|
|
||||||
+ /*
|
|
||||||
+ * Data size we actually write: from the start of the block
|
|
||||||
+ * to the start of the data, then count bytes of data, and
|
|
||||||
+ * to the end of the block
|
|
||||||
+ */
|
|
||||||
+ write_total = ((block_seek + count + blocklen - 1) /
|
|
||||||
+ blocklen) * blocklen;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Support data anywhere within erase sectors: read out the complete
|
|
||||||
@@ -834,17 +846,18 @@ static int flash_write_buf (int dev, int
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
- erase.start = blockstart;
|
|
||||||
- ioctl (fd, MEMUNLOCK, &erase);
|
|
||||||
- /* These do not need an explicit erase cycle */
|
|
||||||
- if (mtd_type != MTD_ABSENT &&
|
|
||||||
- mtd_type != MTD_DATAFLASH)
|
|
||||||
- if (ioctl (fd, MEMERASE, &erase) != 0) {
|
|
||||||
- fprintf (stderr, "MTD erase error on %s: %s\n",
|
|
||||||
- DEVNAME (dev),
|
|
||||||
- strerror (errno));
|
|
||||||
- return -1;
|
|
||||||
- }
|
|
||||||
+ if (mtd_type != MTD_ABSENT) {
|
|
||||||
+ erase.start = blockstart;
|
|
||||||
+ ioctl(fd, MEMUNLOCK, &erase);
|
|
||||||
+ /* These do not need an explicit erase cycle */
|
|
||||||
+ if (mtd_type != MTD_DATAFLASH)
|
|
||||||
+ if (ioctl(fd, MEMERASE, &erase) != 0) {
|
|
||||||
+ fprintf(stderr,
|
|
||||||
+ "MTD erase error on %s: %s\n",
|
|
||||||
+ DEVNAME(dev), strerror(errno));
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (lseek (fd, blockstart, SEEK_SET) == -1) {
|
|
||||||
fprintf (stderr,
|
|
||||||
@@ -863,7 +876,8 @@ static int flash_write_buf (int dev, int
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
- ioctl (fd, MEMLOCK, &erase);
|
|
||||||
+ if (mtd_type != MTD_ABSENT)
|
|
||||||
+ ioctl(fd, MEMLOCK, &erase);
|
|
||||||
|
|
||||||
processed += blocklen;
|
|
||||||
block_seek = 0;
|
|
Loading…
Reference in new issue