aboutsummaryrefslogtreecommitdiff
path: root/misc-utils/flashcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'misc-utils/flashcp.c')
-rw-r--r--misc-utils/flashcp.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/misc-utils/flashcp.c b/misc-utils/flashcp.c
index c46a5b4..b6ad2f9 100644
--- a/misc-utils/flashcp.c
+++ b/misc-utils/flashcp.c
@@ -66,6 +66,7 @@
#define FLAG_HELP 0x02
#define FLAG_FILENAME 0x04
#define FLAG_DEVICE 0x08
+#define FLAG_ERASE_ALL 0x10
/* error levels */
#define LOG_NORMAL 1
@@ -89,12 +90,13 @@ static NORETURN void showusage(bool error)
"\n"
"Flash Copy - Written by Abraham van der Merwe <abraham@2d3d.co.za>\n"
"\n"
- "usage: %1$s [ -v | --verbose ] <filename> <device>\n"
+ "usage: %1$s [ -v | --verbose | -A | --erase-all ] <filename> <device>\n"
" %1$s -h | --help\n"
" %1$s -V | --version\n"
"\n"
" -h | --help Show this help message\n"
" -v | --verbose Show progress reports\n"
+ " -A | --erase-all Erases the whole device regardless of the image size\n"
" -V | --version Show version information and exit\n"
" <filename> File which you want to copy to flash\n"
" <device> Flash device to write to (e.g. /dev/mtd0, /dev/mtd1, etc.)\n"
@@ -179,10 +181,11 @@ int main (int argc,char *argv[])
for (;;) {
int option_index = 0;
- static const char *short_options = "hvV";
+ static const char *short_options = "hvAV";
static const struct option long_options[] = {
{"help", no_argument, 0, 'h'},
{"verbose", no_argument, 0, 'v'},
+ {"erase-all", no_argument, 0, 'A'},
{"version", no_argument, 0, 'V'},
{0, 0, 0, 0},
};
@@ -202,6 +205,10 @@ int main (int argc,char *argv[])
flags |= FLAG_VERBOSE;
DEBUG("Got FLAG_VERBOSE\n");
break;
+ case 'A':
+ flags |= FLAG_ERASE_ALL;
+ DEBUG("Got FLAG_ERASE_ALL\n");
+ break;
case 'V':
common_print_version();
exit(EXIT_SUCCESS);
@@ -257,8 +264,16 @@ int main (int argc,char *argv[])
#warning "Check for smaller erase regions"
erase.start = 0;
- erase.length = (filestat.st_size + mtd.erasesize - 1) / mtd.erasesize;
- erase.length *= mtd.erasesize;
+
+ if (flags & FLAG_ERASE_ALL)
+ {
+ erase.length = mtd.size;
+ }
+ else
+ {
+ erase.length = (filestat.st_size + mtd.erasesize - 1) / mtd.erasesize;
+ erase.length *= mtd.erasesize;
+ }
if (flags & FLAG_VERBOSE)
{