mirror of https://github.com/YosysHQ/icestorm.git
Add "iceprog -e"
This commit is contained in:
parent
8e51d4f918
commit
bca8c3c88f
|
|
@ -315,6 +315,7 @@ static void help(const char *progname)
|
||||||
fprintf(stderr, " This means that some data after the written data (or\n");
|
fprintf(stderr, " This means that some data after the written data (or\n");
|
||||||
fprintf(stderr, " even before when -o is used) may be erased as well.\n");
|
fprintf(stderr, " even before when -o is used) may be erased as well.\n");
|
||||||
fprintf(stderr, " -b bulk erase entire flash before writing\n");
|
fprintf(stderr, " -b bulk erase entire flash before writing\n");
|
||||||
|
fprintf(stderr, " -e <size in bytes> erase flash as if we were writing that number of bytes\n");
|
||||||
fprintf(stderr, " -n do not erase flash before writing\n");
|
fprintf(stderr, " -n do not erase flash before writing\n");
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
fprintf(stderr, "Miscellaneous options:\n");
|
fprintf(stderr, "Miscellaneous options:\n");
|
||||||
|
|
@ -354,10 +355,12 @@ int main(int argc, char **argv)
|
||||||
my_name = argv[0] + i + 1;
|
my_name = argv[0] + i + 1;
|
||||||
|
|
||||||
int read_size = 256 * 1024;
|
int read_size = 256 * 1024;
|
||||||
|
int erase_size = 0;
|
||||||
int rw_offset = 0;
|
int rw_offset = 0;
|
||||||
|
|
||||||
bool read_mode = false;
|
bool read_mode = false;
|
||||||
bool check_mode = false;
|
bool check_mode = false;
|
||||||
|
bool erase_mode = false;
|
||||||
bool bulk_erase = false;
|
bool bulk_erase = false;
|
||||||
bool dont_erase = false;
|
bool dont_erase = false;
|
||||||
bool prog_sram = false;
|
bool prog_sram = false;
|
||||||
|
|
@ -373,7 +376,7 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
int opt;
|
int opt;
|
||||||
char *endptr;
|
char *endptr;
|
||||||
while ((opt = getopt_long(argc, argv, "d:I:rR:o:cbnStv", long_options, NULL)) != -1) {
|
while ((opt = getopt_long(argc, argv, "d:I:rR:e:o:cbnStv", long_options, NULL)) != -1) {
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
case 'd':
|
case 'd':
|
||||||
devstr = optarg;
|
devstr = optarg;
|
||||||
|
|
@ -409,6 +412,20 @@ int main(int argc, char **argv)
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'e':
|
||||||
|
erase_mode = true;
|
||||||
|
erase_size = strtol(optarg, &endptr, 0);
|
||||||
|
if (*endptr == '\0')
|
||||||
|
/* ok */;
|
||||||
|
else if (!strcmp(endptr, "k"))
|
||||||
|
erase_size *= 1024;
|
||||||
|
else if (!strcmp(endptr, "M"))
|
||||||
|
erase_size *= 1024 * 1024;
|
||||||
|
else {
|
||||||
|
fprintf(stderr, "%s: `%s' is not a valid size\n", my_name, optarg);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
rw_offset = strtol(optarg, &endptr, 0);
|
rw_offset = strtol(optarg, &endptr, 0);
|
||||||
if (*endptr == '\0')
|
if (*endptr == '\0')
|
||||||
|
|
@ -450,8 +467,8 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (read_mode + check_mode + prog_sram + test_mode > 1) {
|
if (read_mode + erase_mode + check_mode + prog_sram + test_mode > 1) {
|
||||||
fprintf(stderr, "%s: options `-r'/`-R', `-c', `-S', and `-t' are mutually exclusive\n", my_name);
|
fprintf(stderr, "%s: options `-r'/`-R', `-e`, `-c', `-S', and `-t' are mutually exclusive\n", my_name);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -493,7 +510,7 @@ int main(int argc, char **argv)
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
} else if (bulk_erase) {
|
} else if (bulk_erase) {
|
||||||
filename = "/dev/null";
|
filename = "/dev/null";
|
||||||
} else if (!test_mode) {
|
} else if (!test_mode && !erase_mode) {
|
||||||
fprintf(stderr, "%s: missing argument\n", my_name);
|
fprintf(stderr, "%s: missing argument\n", my_name);
|
||||||
fprintf(stderr, "Try `%s --help' for more information.\n", argv[0]);
|
fprintf(stderr, "Try `%s --help' for more information.\n", argv[0]);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
|
@ -505,9 +522,11 @@ int main(int argc, char **argv)
|
||||||
FILE *f = NULL;
|
FILE *f = NULL;
|
||||||
long file_size = -1;
|
long file_size = -1;
|
||||||
|
|
||||||
if (test_mode)
|
if (test_mode) {
|
||||||
/* nop */;
|
/* nop */;
|
||||||
else if (read_mode) {
|
} else if (erase_mode) {
|
||||||
|
file_size = erase_size;
|
||||||
|
} else if (read_mode) {
|
||||||
f = (strcmp(filename, "-") == 0) ? stdout : fopen(filename, "wb");
|
f = (strcmp(filename, "-") == 0) ? stdout : fopen(filename, "wb");
|
||||||
if (f == NULL) {
|
if (f == NULL) {
|
||||||
fprintf(stderr, "%s: can't open '%s' for writing: ", my_name, filename);
|
fprintf(stderr, "%s: can't open '%s' for writing: ", my_name, filename);
|
||||||
|
|
@ -751,6 +770,8 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!erase_mode)
|
||||||
|
{
|
||||||
fprintf(stderr, "programming..\n");
|
fprintf(stderr, "programming..\n");
|
||||||
|
|
||||||
for (int rc, addr = 0; true; addr += rc) {
|
for (int rc, addr = 0; true; addr += rc) {
|
||||||
|
|
@ -767,6 +788,7 @@ int main(int argc, char **argv)
|
||||||
/* seek to the beginning for second pass */
|
/* seek to the beginning for second pass */
|
||||||
fseek(f, 0, SEEK_SET);
|
fseek(f, 0, SEEK_SET);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------------------
|
// ---------------------------------------------------------
|
||||||
// Read/Verify
|
// Read/Verify
|
||||||
|
|
@ -779,7 +801,7 @@ int main(int argc, char **argv)
|
||||||
flash_read(rw_offset + addr, buffer, 256);
|
flash_read(rw_offset + addr, buffer, 256);
|
||||||
fwrite(buffer, read_size - addr > 256 ? 256 : read_size - addr, 1, f);
|
fwrite(buffer, read_size - addr > 256 ? 256 : read_size - addr, 1, f);
|
||||||
}
|
}
|
||||||
} else {
|
} else if (!erase_mode) {
|
||||||
fprintf(stderr, "reading..\n");
|
fprintf(stderr, "reading..\n");
|
||||||
for (int addr = 0; true; addr += 256) {
|
for (int addr = 0; true; addr += 256) {
|
||||||
uint8_t buffer_flash[256], buffer_file[256];
|
uint8_t buffer_flash[256], buffer_file[256];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue