tools/env: pass bad block offset by value

the offset is not modified by linux ioctl call
see mtd_ioctl{drivers/mtd/mtdchar.c}
Makes the interface less ambiguous, since the caller can
now exclude a modification of blockstart

Signed-off-by: Andreas Fenkart <andreas.fenkart@digitalstrom.com>
This commit is contained in:
Andreas Fenkart 2016-08-29 23:16:58 +02:00 committed by Tom Rini
parent e2c9351d5a
commit c6012bbce6

10
tools/env/fw_env.c vendored
View file

@ -661,10 +661,10 @@ off_t environment_end(int dev)
* > 0 - block is bad * > 0 - block is bad
* < 0 - failed to test * < 0 - failed to test
*/ */
static int flash_bad_block (int fd, uint8_t mtd_type, loff_t *blockstart) static int flash_bad_block(int fd, uint8_t mtd_type, loff_t blockstart)
{ {
if (mtd_type == MTD_NANDFLASH) { if (mtd_type == MTD_NANDFLASH) {
int badblock = ioctl (fd, MEMGETBADBLOCK, blockstart); int badblock = ioctl(fd, MEMGETBADBLOCK, &blockstart);
if (badblock < 0) { if (badblock < 0) {
perror ("Cannot read bad block mark"); perror ("Cannot read bad block mark");
@ -674,7 +674,7 @@ static int flash_bad_block (int fd, uint8_t mtd_type, loff_t *blockstart)
if (badblock) { if (badblock) {
#ifdef DEBUG #ifdef DEBUG
fprintf (stderr, "Bad block at 0x%llx, skipping\n", fprintf (stderr, "Bad block at 0x%llx, skipping\n",
(unsigned long long) *blockstart); (unsigned long long)blockstart);
#endif #endif
return badblock; return badblock;
} }
@ -722,7 +722,7 @@ static int flash_read_buf (int dev, int fd, void *buf, size_t count,
/* This only runs once on NOR flash */ /* This only runs once on NOR flash */
while (processed < count) { while (processed < count) {
rc = flash_bad_block (fd, mtd_type, &blockstart); rc = flash_bad_block(fd, mtd_type, blockstart);
if (rc < 0) /* block test failed */ if (rc < 0) /* block test failed */
return -1; return -1;
@ -876,7 +876,7 @@ static int flash_write_buf (int dev, int fd, void *buf, size_t count,
/* This only runs once on NOR flash and SPI-dataflash */ /* This only runs once on NOR flash and SPI-dataflash */
while (processed < write_total) { while (processed < write_total) {
rc = flash_bad_block (fd, mtd_type, &blockstart); rc = flash_bad_block(fd, mtd_type, blockstart);
if (rc < 0) /* block test failed */ if (rc < 0) /* block test failed */
return rc; return rc;