aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dummyflasher.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/dummyflasher.c b/dummyflasher.c
index b2b3b54d..145fe11d 100644
--- a/dummyflasher.c
+++ b/dummyflasher.c
@@ -50,6 +50,7 @@ enum emu_chip {
static enum emu_chip emu_chip = EMULATE_NONE;
static char *emu_persistent_image = NULL;
static unsigned int emu_chip_size = 0;
+static int emu_modified = 0; /* is the image modified since reading it? */
#if EMULATE_SPI_CHIP
static unsigned int emu_max_byteprogram_size = 0;
static unsigned int emu_max_aai_size = 0;
@@ -137,7 +138,7 @@ static int dummy_shutdown(void *data)
msg_pspew("%s\n", __func__);
#if EMULATE_CHIP
if (emu_chip != EMULATE_NONE) {
- if (emu_persistent_image) {
+ if (emu_persistent_image && emu_modified) {
msg_pdbg("Writing %s\n", emu_persistent_image);
write_buf_to_file(flashchip_contents, emu_chip_size, emu_persistent_image);
free(emu_persistent_image);
@@ -698,6 +699,7 @@ static int emulate_spi_chip_response(unsigned int writecnt,
return 1;
}
memcpy(flashchip_contents + offs, writearr + 4, writecnt - 4);
+ emu_modified = 1;
break;
case JEDEC_AAI_WORD_PROGRAM:
if (!emu_max_aai_size)
@@ -734,6 +736,7 @@ static int emulate_spi_chip_response(unsigned int writecnt,
memcpy(flashchip_contents + aai_offs, writearr + 1, 2);
aai_offs += 2;
}
+ emu_modified = 1;
break;
case JEDEC_WRDI:
if (emu_max_aai_size)
@@ -755,6 +758,7 @@ static int emulate_spi_chip_response(unsigned int writecnt,
msg_pdbg("Unaligned SECTOR ERASE 0x20: 0x%x\n", offs);
offs &= ~(emu_jedec_se_size - 1);
memset(flashchip_contents + offs, 0xff, emu_jedec_se_size);
+ emu_modified = 1;
break;
case JEDEC_BE_52:
if (!emu_jedec_be_52_size)
@@ -772,6 +776,7 @@ static int emulate_spi_chip_response(unsigned int writecnt,
msg_pdbg("Unaligned BLOCK ERASE 0x52: 0x%x\n", offs);
offs &= ~(emu_jedec_be_52_size - 1);
memset(flashchip_contents + offs, 0xff, emu_jedec_be_52_size);
+ emu_modified = 1;
break;
case JEDEC_BE_D8:
if (!emu_jedec_be_d8_size)
@@ -789,6 +794,7 @@ static int emulate_spi_chip_response(unsigned int writecnt,
msg_pdbg("Unaligned BLOCK ERASE 0xd8: 0x%x\n", offs);
offs &= ~(emu_jedec_be_d8_size - 1);
memset(flashchip_contents + offs, 0xff, emu_jedec_be_d8_size);
+ emu_modified = 1;
break;
case JEDEC_CE_60:
if (!emu_jedec_ce_60_size)
@@ -804,6 +810,7 @@ static int emulate_spi_chip_response(unsigned int writecnt,
/* JEDEC_CE_60_OUTSIZE is 1 (no address) -> no offset. */
/* emu_jedec_ce_60_size is emu_chip_size. */
memset(flashchip_contents, 0xff, emu_jedec_ce_60_size);
+ emu_modified = 1;
break;
case JEDEC_CE_C7:
if (!emu_jedec_ce_c7_size)
@@ -819,6 +826,7 @@ static int emulate_spi_chip_response(unsigned int writecnt,
/* JEDEC_CE_C7_OUTSIZE is 1 (no address) -> no offset. */
/* emu_jedec_ce_c7_size is emu_chip_size. */
memset(flashchip_contents, 0xff, emu_jedec_ce_c7_size);
+ emu_modified = 1;
break;
case JEDEC_SFDP:
if (emu_chip != EMULATE_MACRONIX_MX25L6436)