mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-29 07:53:44 +02:00
dummyflasher.c: Only write back emulated image if modified
When the image is not modified, there is no point in writing it back. In fact we may not have file permissions to do so. Signed-off-by: Namyoon Woo <namyoon@google.com> Change-Id: I3bf2d7edb28a9a1e5406b67a88a0ee6e07db83e3 Reviewed-on: https://review.coreboot.org/c/flashrom/+/44907 Reviewed-by: Edward O'Callaghan <quasisec@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
3149822cd4
commit
84fc9e889d
@ -50,6 +50,7 @@ enum emu_chip {
|
|||||||
static enum emu_chip emu_chip = EMULATE_NONE;
|
static enum emu_chip emu_chip = EMULATE_NONE;
|
||||||
static char *emu_persistent_image = NULL;
|
static char *emu_persistent_image = NULL;
|
||||||
static unsigned int emu_chip_size = 0;
|
static unsigned int emu_chip_size = 0;
|
||||||
|
static int emu_modified = 0; /* is the image modified since reading it? */
|
||||||
#if EMULATE_SPI_CHIP
|
#if EMULATE_SPI_CHIP
|
||||||
static unsigned int emu_max_byteprogram_size = 0;
|
static unsigned int emu_max_byteprogram_size = 0;
|
||||||
static unsigned int emu_max_aai_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__);
|
msg_pspew("%s\n", __func__);
|
||||||
#if EMULATE_CHIP
|
#if EMULATE_CHIP
|
||||||
if (emu_chip != EMULATE_NONE) {
|
if (emu_chip != EMULATE_NONE) {
|
||||||
if (emu_persistent_image) {
|
if (emu_persistent_image && emu_modified) {
|
||||||
msg_pdbg("Writing %s\n", emu_persistent_image);
|
msg_pdbg("Writing %s\n", emu_persistent_image);
|
||||||
write_buf_to_file(flashchip_contents, emu_chip_size, emu_persistent_image);
|
write_buf_to_file(flashchip_contents, emu_chip_size, emu_persistent_image);
|
||||||
free(emu_persistent_image);
|
free(emu_persistent_image);
|
||||||
@ -698,6 +699,7 @@ static int emulate_spi_chip_response(unsigned int writecnt,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
memcpy(flashchip_contents + offs, writearr + 4, writecnt - 4);
|
memcpy(flashchip_contents + offs, writearr + 4, writecnt - 4);
|
||||||
|
emu_modified = 1;
|
||||||
break;
|
break;
|
||||||
case JEDEC_AAI_WORD_PROGRAM:
|
case JEDEC_AAI_WORD_PROGRAM:
|
||||||
if (!emu_max_aai_size)
|
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);
|
memcpy(flashchip_contents + aai_offs, writearr + 1, 2);
|
||||||
aai_offs += 2;
|
aai_offs += 2;
|
||||||
}
|
}
|
||||||
|
emu_modified = 1;
|
||||||
break;
|
break;
|
||||||
case JEDEC_WRDI:
|
case JEDEC_WRDI:
|
||||||
if (emu_max_aai_size)
|
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);
|
msg_pdbg("Unaligned SECTOR ERASE 0x20: 0x%x\n", offs);
|
||||||
offs &= ~(emu_jedec_se_size - 1);
|
offs &= ~(emu_jedec_se_size - 1);
|
||||||
memset(flashchip_contents + offs, 0xff, emu_jedec_se_size);
|
memset(flashchip_contents + offs, 0xff, emu_jedec_se_size);
|
||||||
|
emu_modified = 1;
|
||||||
break;
|
break;
|
||||||
case JEDEC_BE_52:
|
case JEDEC_BE_52:
|
||||||
if (!emu_jedec_be_52_size)
|
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);
|
msg_pdbg("Unaligned BLOCK ERASE 0x52: 0x%x\n", offs);
|
||||||
offs &= ~(emu_jedec_be_52_size - 1);
|
offs &= ~(emu_jedec_be_52_size - 1);
|
||||||
memset(flashchip_contents + offs, 0xff, emu_jedec_be_52_size);
|
memset(flashchip_contents + offs, 0xff, emu_jedec_be_52_size);
|
||||||
|
emu_modified = 1;
|
||||||
break;
|
break;
|
||||||
case JEDEC_BE_D8:
|
case JEDEC_BE_D8:
|
||||||
if (!emu_jedec_be_d8_size)
|
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);
|
msg_pdbg("Unaligned BLOCK ERASE 0xd8: 0x%x\n", offs);
|
||||||
offs &= ~(emu_jedec_be_d8_size - 1);
|
offs &= ~(emu_jedec_be_d8_size - 1);
|
||||||
memset(flashchip_contents + offs, 0xff, emu_jedec_be_d8_size);
|
memset(flashchip_contents + offs, 0xff, emu_jedec_be_d8_size);
|
||||||
|
emu_modified = 1;
|
||||||
break;
|
break;
|
||||||
case JEDEC_CE_60:
|
case JEDEC_CE_60:
|
||||||
if (!emu_jedec_ce_60_size)
|
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. */
|
/* JEDEC_CE_60_OUTSIZE is 1 (no address) -> no offset. */
|
||||||
/* emu_jedec_ce_60_size is emu_chip_size. */
|
/* emu_jedec_ce_60_size is emu_chip_size. */
|
||||||
memset(flashchip_contents, 0xff, emu_jedec_ce_60_size);
|
memset(flashchip_contents, 0xff, emu_jedec_ce_60_size);
|
||||||
|
emu_modified = 1;
|
||||||
break;
|
break;
|
||||||
case JEDEC_CE_C7:
|
case JEDEC_CE_C7:
|
||||||
if (!emu_jedec_ce_c7_size)
|
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. */
|
/* JEDEC_CE_C7_OUTSIZE is 1 (no address) -> no offset. */
|
||||||
/* emu_jedec_ce_c7_size is emu_chip_size. */
|
/* emu_jedec_ce_c7_size is emu_chip_size. */
|
||||||
memset(flashchip_contents, 0xff, emu_jedec_ce_c7_size);
|
memset(flashchip_contents, 0xff, emu_jedec_ce_c7_size);
|
||||||
|
emu_modified = 1;
|
||||||
break;
|
break;
|
||||||
case JEDEC_SFDP:
|
case JEDEC_SFDP:
|
||||||
if (emu_chip != EMULATE_MACRONIX_MX25L6436)
|
if (emu_chip != EMULATE_MACRONIX_MX25L6436)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user