mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-28 07:23:43 +02:00
dummyflasher.c: Move 'flashchip_contents' into emu_data
Move 'flashchip_contents' out of global scope and into the emu_data reentrent struct. BUG=none BRANCH=none TEST=builds Change-Id: I11dfe713dd2fecfd3981ab50e31c9215d00bc787 Signed-off-by: Edward O'Callaghan <quasisec@google.com> Reviewed-on: https://review.coreboot.org/c/flashrom/+/54722 Reviewed-by: Angel Pons <th3fanbus@gmail.com> Reviewed-by: Anastasia Klimchuk <aklm@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
653eb6977a
commit
245b7cd1d3
@ -37,7 +37,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if EMULATE_CHIP
|
#if EMULATE_CHIP
|
||||||
static uint8_t *flashchip_contents = NULL;
|
|
||||||
enum emu_chip {
|
enum emu_chip {
|
||||||
EMULATE_NONE,
|
EMULATE_NONE,
|
||||||
EMULATE_ST_M25P10_RES,
|
EMULATE_ST_M25P10_RES,
|
||||||
@ -71,6 +70,7 @@ struct emu_data {
|
|||||||
unsigned int spi_ignorelist_size;
|
unsigned int spi_ignorelist_size;
|
||||||
|
|
||||||
unsigned int spi_write_256_chunksize;
|
unsigned int spi_write_256_chunksize;
|
||||||
|
uint8_t *flashchip_contents;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if EMULATE_SPI_CHIP
|
#if EMULATE_SPI_CHIP
|
||||||
@ -353,14 +353,14 @@ static int emulate_spi_chip_response(unsigned int writecnt,
|
|||||||
/* Truncate to emu_chip_size. */
|
/* Truncate to emu_chip_size. */
|
||||||
offs %= data->emu_chip_size;
|
offs %= data->emu_chip_size;
|
||||||
if (readcnt > 0)
|
if (readcnt > 0)
|
||||||
memcpy(readarr, flashchip_contents + offs, readcnt);
|
memcpy(readarr, data->flashchip_contents + offs, readcnt);
|
||||||
break;
|
break;
|
||||||
case JEDEC_READ_4BA:
|
case JEDEC_READ_4BA:
|
||||||
offs = writearr[1] << 24 | writearr[2] << 16 | writearr[3] << 8 | writearr[4];
|
offs = writearr[1] << 24 | writearr[2] << 16 | writearr[3] << 8 | writearr[4];
|
||||||
/* Truncate to emu_chip_size. */
|
/* Truncate to emu_chip_size. */
|
||||||
offs %= data->emu_chip_size;
|
offs %= data->emu_chip_size;
|
||||||
if (readcnt > 0)
|
if (readcnt > 0)
|
||||||
memcpy(readarr, flashchip_contents + offs, readcnt);
|
memcpy(readarr, data->flashchip_contents + offs, readcnt);
|
||||||
break;
|
break;
|
||||||
case JEDEC_BYTE_PROGRAM:
|
case JEDEC_BYTE_PROGRAM:
|
||||||
offs = writearr[1] << 16 | writearr[2] << 8 | writearr[3];
|
offs = writearr[1] << 16 | writearr[2] << 8 | writearr[3];
|
||||||
@ -374,7 +374,7 @@ static int emulate_spi_chip_response(unsigned int writecnt,
|
|||||||
msg_perr("Max BYTE PROGRAM size exceeded!\n");
|
msg_perr("Max BYTE PROGRAM size exceeded!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
memcpy(flashchip_contents + offs, writearr + 4, writecnt - 4);
|
memcpy(data->flashchip_contents + offs, writearr + 4, writecnt - 4);
|
||||||
data->emu_modified = 1;
|
data->emu_modified = 1;
|
||||||
break;
|
break;
|
||||||
case JEDEC_BYTE_PROGRAM_4BA:
|
case JEDEC_BYTE_PROGRAM_4BA:
|
||||||
@ -389,7 +389,7 @@ static int emulate_spi_chip_response(unsigned int writecnt,
|
|||||||
msg_perr("Max BYTE PROGRAM size exceeded!\n");
|
msg_perr("Max BYTE PROGRAM size exceeded!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
memcpy(flashchip_contents + offs, writearr + 5, writecnt - 5);
|
memcpy(data->flashchip_contents + offs, writearr + 5, writecnt - 5);
|
||||||
data->emu_modified = 1;
|
data->emu_modified = 1;
|
||||||
break;
|
break;
|
||||||
case JEDEC_AAI_WORD_PROGRAM:
|
case JEDEC_AAI_WORD_PROGRAM:
|
||||||
@ -411,7 +411,7 @@ static int emulate_spi_chip_response(unsigned int writecnt,
|
|||||||
writearr[3];
|
writearr[3];
|
||||||
/* Truncate to emu_chip_size. */
|
/* Truncate to emu_chip_size. */
|
||||||
aai_offs %= data->emu_chip_size;
|
aai_offs %= data->emu_chip_size;
|
||||||
memcpy(flashchip_contents + aai_offs, writearr + 4, 2);
|
memcpy(data->flashchip_contents + aai_offs, writearr + 4, 2);
|
||||||
aai_offs += 2;
|
aai_offs += 2;
|
||||||
} else {
|
} else {
|
||||||
if (writecnt < JEDEC_AAI_WORD_PROGRAM_CONT_OUTSIZE) {
|
if (writecnt < JEDEC_AAI_WORD_PROGRAM_CONT_OUTSIZE) {
|
||||||
@ -424,7 +424,7 @@ static int emulate_spi_chip_response(unsigned int writecnt,
|
|||||||
"too long!\n");
|
"too long!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
memcpy(flashchip_contents + aai_offs, writearr + 1, 2);
|
memcpy(data->flashchip_contents + aai_offs, writearr + 1, 2);
|
||||||
aai_offs += 2;
|
aai_offs += 2;
|
||||||
}
|
}
|
||||||
data->emu_modified = 1;
|
data->emu_modified = 1;
|
||||||
@ -448,7 +448,7 @@ static int emulate_spi_chip_response(unsigned int writecnt,
|
|||||||
if (offs & (data->emu_jedec_se_size - 1))
|
if (offs & (data->emu_jedec_se_size - 1))
|
||||||
msg_pdbg("Unaligned SECTOR ERASE 0x20: 0x%x\n", offs);
|
msg_pdbg("Unaligned SECTOR ERASE 0x20: 0x%x\n", offs);
|
||||||
offs &= ~(data->emu_jedec_se_size - 1);
|
offs &= ~(data->emu_jedec_se_size - 1);
|
||||||
memset(flashchip_contents + offs, 0xff, data->emu_jedec_se_size);
|
memset(data->flashchip_contents + offs, 0xff, data->emu_jedec_se_size);
|
||||||
data->emu_modified = 1;
|
data->emu_modified = 1;
|
||||||
break;
|
break;
|
||||||
case JEDEC_BE_52:
|
case JEDEC_BE_52:
|
||||||
@ -466,7 +466,7 @@ static int emulate_spi_chip_response(unsigned int writecnt,
|
|||||||
if (offs & (data->emu_jedec_be_52_size - 1))
|
if (offs & (data->emu_jedec_be_52_size - 1))
|
||||||
msg_pdbg("Unaligned BLOCK ERASE 0x52: 0x%x\n", offs);
|
msg_pdbg("Unaligned BLOCK ERASE 0x52: 0x%x\n", offs);
|
||||||
offs &= ~(data->emu_jedec_be_52_size - 1);
|
offs &= ~(data->emu_jedec_be_52_size - 1);
|
||||||
memset(flashchip_contents + offs, 0xff, data->emu_jedec_be_52_size);
|
memset(data->flashchip_contents + offs, 0xff, data->emu_jedec_be_52_size);
|
||||||
data->emu_modified = 1;
|
data->emu_modified = 1;
|
||||||
break;
|
break;
|
||||||
case JEDEC_BE_D8:
|
case JEDEC_BE_D8:
|
||||||
@ -484,7 +484,7 @@ static int emulate_spi_chip_response(unsigned int writecnt,
|
|||||||
if (offs & (data->emu_jedec_be_d8_size - 1))
|
if (offs & (data->emu_jedec_be_d8_size - 1))
|
||||||
msg_pdbg("Unaligned BLOCK ERASE 0xd8: 0x%x\n", offs);
|
msg_pdbg("Unaligned BLOCK ERASE 0xd8: 0x%x\n", offs);
|
||||||
offs &= ~(data->emu_jedec_be_d8_size - 1);
|
offs &= ~(data->emu_jedec_be_d8_size - 1);
|
||||||
memset(flashchip_contents + offs, 0xff, data->emu_jedec_be_d8_size);
|
memset(data->flashchip_contents + offs, 0xff, data->emu_jedec_be_d8_size);
|
||||||
data->emu_modified = 1;
|
data->emu_modified = 1;
|
||||||
break;
|
break;
|
||||||
case JEDEC_CE_60:
|
case JEDEC_CE_60:
|
||||||
@ -500,7 +500,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, data->emu_jedec_ce_60_size);
|
memset(data->flashchip_contents, 0xff, data->emu_jedec_ce_60_size);
|
||||||
data->emu_modified = 1;
|
data->emu_modified = 1;
|
||||||
break;
|
break;
|
||||||
case JEDEC_CE_C7:
|
case JEDEC_CE_C7:
|
||||||
@ -516,7 +516,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, data->emu_jedec_ce_c7_size);
|
memset(data->flashchip_contents, 0xff, data->emu_jedec_ce_c7_size);
|
||||||
data->emu_modified = 1;
|
data->emu_modified = 1;
|
||||||
break;
|
break;
|
||||||
case JEDEC_SFDP:
|
case JEDEC_SFDP:
|
||||||
@ -643,13 +643,13 @@ static int dummy_shutdown(void *data)
|
|||||||
if (emu_data->emu_chip != EMULATE_NONE) {
|
if (emu_data->emu_chip != EMULATE_NONE) {
|
||||||
if (emu_data->emu_persistent_image && emu_data->emu_modified) {
|
if (emu_data->emu_persistent_image && emu_data->emu_modified) {
|
||||||
msg_pdbg("Writing %s\n", emu_data->emu_persistent_image);
|
msg_pdbg("Writing %s\n", emu_data->emu_persistent_image);
|
||||||
write_buf_to_file(flashchip_contents,
|
write_buf_to_file(emu_data->flashchip_contents,
|
||||||
emu_data->emu_chip_size,
|
emu_data->emu_chip_size,
|
||||||
emu_data->emu_persistent_image);
|
emu_data->emu_persistent_image);
|
||||||
free(emu_data->emu_persistent_image);
|
free(emu_data->emu_persistent_image);
|
||||||
emu_data->emu_persistent_image = NULL;
|
emu_data->emu_persistent_image = NULL;
|
||||||
}
|
}
|
||||||
free(flashchip_contents);
|
free(emu_data->flashchip_contents);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
free(data);
|
free(data);
|
||||||
@ -968,8 +968,8 @@ int dummy_init(void)
|
|||||||
}
|
}
|
||||||
free(tmp);
|
free(tmp);
|
||||||
|
|
||||||
flashchip_contents = malloc(data->emu_chip_size);
|
data->flashchip_contents = malloc(data->emu_chip_size);
|
||||||
if (!flashchip_contents) {
|
if (!data->flashchip_contents) {
|
||||||
msg_perr("Out of memory!\n");
|
msg_perr("Out of memory!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -993,7 +993,7 @@ int dummy_init(void)
|
|||||||
|
|
||||||
msg_pdbg("Filling fake flash chip with 0x%02x, size %i\n",
|
msg_pdbg("Filling fake flash chip with 0x%02x, size %i\n",
|
||||||
data->erase_to_zero ? 0x00 : 0xff, data->emu_chip_size);
|
data->erase_to_zero ? 0x00 : 0xff, data->emu_chip_size);
|
||||||
memset(flashchip_contents, data->erase_to_zero ? 0x00 : 0xff, data->emu_chip_size);
|
memset(data->flashchip_contents, data->erase_to_zero ? 0x00 : 0xff, data->emu_chip_size);
|
||||||
|
|
||||||
/* Will be freed by shutdown function if necessary. */
|
/* Will be freed by shutdown function if necessary. */
|
||||||
data->emu_persistent_image = extract_programmer_param("image");
|
data->emu_persistent_image = extract_programmer_param("image");
|
||||||
@ -1009,10 +1009,10 @@ int dummy_init(void)
|
|||||||
if ((uintmax_t)image_stat.st_size == data->emu_chip_size) {
|
if ((uintmax_t)image_stat.st_size == data->emu_chip_size) {
|
||||||
msg_pdbg("matches.\n");
|
msg_pdbg("matches.\n");
|
||||||
msg_pdbg("Reading %s\n", data->emu_persistent_image);
|
msg_pdbg("Reading %s\n", data->emu_persistent_image);
|
||||||
if (read_buf_from_file(flashchip_contents, data->emu_chip_size,
|
if (read_buf_from_file(data->flashchip_contents, data->emu_chip_size,
|
||||||
data->emu_persistent_image)) {
|
data->emu_persistent_image)) {
|
||||||
msg_perr("Unable to read %s\n", data->emu_persistent_image);
|
msg_perr("Unable to read %s\n", data->emu_persistent_image);
|
||||||
free(flashchip_contents);
|
free(data->flashchip_contents);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -1023,7 +1023,7 @@ int dummy_init(void)
|
|||||||
|
|
||||||
dummy_init_out:
|
dummy_init_out:
|
||||||
if (register_shutdown(dummy_shutdown, data)) {
|
if (register_shutdown(dummy_shutdown, data)) {
|
||||||
free(flashchip_contents);
|
free(data->flashchip_contents);
|
||||||
free(data);
|
free(data);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user