mirror of
https://github.com/corundum/corundum.git
synced 2025-01-16 08:12:53 +08:00
utils/mqnic-fw: Add segment erase action
Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
parent
09257457cb
commit
88679ef7eb
@ -126,8 +126,10 @@ static void usage(char *name)
|
|||||||
" -s slot slot to program (default 1)\n"
|
" -s slot slot to program (default 1)\n"
|
||||||
" -r file read flash to file\n"
|
" -r file read flash to file\n"
|
||||||
" -w file write and verify flash from file\n"
|
" -w file write and verify flash from file\n"
|
||||||
|
" -e erase flash\n"
|
||||||
" -b boot FPGA from flash\n"
|
" -b boot FPGA from flash\n"
|
||||||
" -t hot reset FPGA\n",
|
" -t hot reset FPGA\n"
|
||||||
|
" -y no interactive confirm\n",
|
||||||
name);
|
name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -558,8 +560,10 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
char action_read = 0;
|
char action_read = 0;
|
||||||
char action_write = 0;
|
char action_write = 0;
|
||||||
|
char action_erase = 0;
|
||||||
char action_boot = 0;
|
char action_boot = 0;
|
||||||
char action_reset = 0;
|
char action_reset = 0;
|
||||||
|
char no_confirm = 0;
|
||||||
|
|
||||||
struct mqnic *dev = NULL;
|
struct mqnic *dev = NULL;
|
||||||
|
|
||||||
@ -575,7 +579,7 @@ int main(int argc, char *argv[])
|
|||||||
name = strrchr(argv[0], '/');
|
name = strrchr(argv[0], '/');
|
||||||
name = name ? 1+name : argv[0];
|
name = name ? 1+name : argv[0];
|
||||||
|
|
||||||
while ((opt = getopt(argc, argv, "d:s:r:w:bth?")) != EOF)
|
while ((opt = getopt(argc, argv, "d:s:r:w:ebtyh?")) != EOF)
|
||||||
{
|
{
|
||||||
switch (opt)
|
switch (opt)
|
||||||
{
|
{
|
||||||
@ -593,6 +597,9 @@ int main(int argc, char *argv[])
|
|||||||
action_write = 1;
|
action_write = 1;
|
||||||
write_file_name = optarg;
|
write_file_name = optarg;
|
||||||
break;
|
break;
|
||||||
|
case 'e':
|
||||||
|
action_erase = 1;
|
||||||
|
break;
|
||||||
case 'b':
|
case 'b':
|
||||||
action_boot = 1;
|
action_boot = 1;
|
||||||
action_reset = 1;
|
action_reset = 1;
|
||||||
@ -600,6 +607,9 @@ int main(int argc, char *argv[])
|
|||||||
case 't':
|
case 't':
|
||||||
action_reset = 1;
|
action_reset = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'y':
|
||||||
|
no_confirm = 1;
|
||||||
|
break;
|
||||||
case 'h':
|
case 'h':
|
||||||
case '?':
|
case '?':
|
||||||
usage(name);
|
usage(name);
|
||||||
@ -886,6 +896,57 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
printf("Selected: segment %d start 0x%08lx length 0x%08lx\n", slot, segment_offset, segment_size);
|
printf("Selected: segment %d start 0x%08lx length 0x%08lx\n", slot, segment_offset, segment_size);
|
||||||
|
|
||||||
|
if (action_erase)
|
||||||
|
{
|
||||||
|
if (!no_confirm)
|
||||||
|
{
|
||||||
|
char str[32];
|
||||||
|
|
||||||
|
printf("Are you sure you want to erase the selected segment?\n");
|
||||||
|
printf("[y/N]: ");
|
||||||
|
|
||||||
|
fgets(str, sizeof(str), stdin);
|
||||||
|
|
||||||
|
if (str[0] != 'y' && str[0] != 'Y')
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dual_qspi)
|
||||||
|
{
|
||||||
|
// Dual QSPI flash
|
||||||
|
printf("Erasing primary flash...\n");
|
||||||
|
if (flash_erase_progress(pri_flash, segment_offset/2, segment_size/2))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Erase failed!\n");
|
||||||
|
ret = -1;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Erasing secondary flash...\n");
|
||||||
|
if (flash_erase_progress(sec_flash, segment_offset/2, segment_size/2))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Erase failed!\n");
|
||||||
|
ret = -1;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Erase complete!\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// SPI or BPI flash
|
||||||
|
printf("Erasing flash...\n");
|
||||||
|
if (flash_erase_progress(pri_flash, segment_offset, segment_size))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Erase failed!\n");
|
||||||
|
ret = -1;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("Erase complete!\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (action_write)
|
if (action_write)
|
||||||
{
|
{
|
||||||
char *segment = calloc(segment_size, 1);
|
char *segment = calloc(segment_size, 1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user