mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 23:22:37 +02:00
Refine reprogram_opcode_on_the_fly to indicate wrong readcnt/writecnt combinations
Corresponding to flashrom svn r1531. Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
This commit is contained in:
parent
e5449392a1
commit
dc704edad4
13
ichspi.c
13
ichspi.c
@ -405,18 +405,16 @@ static int reprogram_opcode_on_the_fly(uint8_t opcode, unsigned int writecnt, un
|
|||||||
spi_type = SPI_OPCODE_TYPE_READ_NO_ADDRESS;
|
spi_type = SPI_OPCODE_TYPE_READ_NO_ADDRESS;
|
||||||
else if (writecnt == 4) // and readcnt is > 0
|
else if (writecnt == 4) // and readcnt is > 0
|
||||||
spi_type = SPI_OPCODE_TYPE_READ_WITH_ADDRESS;
|
spi_type = SPI_OPCODE_TYPE_READ_WITH_ADDRESS;
|
||||||
// else we have an invalid case, will be handled below
|
else // we have an invalid case
|
||||||
|
return SPI_INVALID_LENGTH;
|
||||||
}
|
}
|
||||||
if (spi_type <= 3) {
|
int oppos = 2; // use original JEDEC_BE_D8 offset
|
||||||
int oppos=2; // use original JEDEC_BE_D8 offset
|
|
||||||
curopcodes->opcode[oppos].opcode = opcode;
|
curopcodes->opcode[oppos].opcode = opcode;
|
||||||
curopcodes->opcode[oppos].spi_type = spi_type;
|
curopcodes->opcode[oppos].spi_type = spi_type;
|
||||||
program_opcodes(curopcodes, 0);
|
program_opcodes(curopcodes, 0);
|
||||||
oppos = find_opcode(curopcodes, opcode);
|
oppos = find_opcode(curopcodes, opcode);
|
||||||
msg_pdbg ("on-the-fly OPCODE (0x%02X) re-programmed, op-pos=%d\n", opcode, oppos);
|
msg_pdbg ("on-the-fly OPCODE (0x%02X) re-programmed, op-pos=%d\n", opcode, oppos);
|
||||||
return oppos;
|
return oppos;
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int find_opcode(OPCODES *op, uint8_t opcode)
|
static int find_opcode(OPCODES *op, uint8_t opcode)
|
||||||
@ -1001,7 +999,10 @@ static int ich_spi_send_command(struct flashctx *flash, unsigned int writecnt,
|
|||||||
if (opcode_index == -1) {
|
if (opcode_index == -1) {
|
||||||
if (!ichspi_lock)
|
if (!ichspi_lock)
|
||||||
opcode_index = reprogram_opcode_on_the_fly(cmd, writecnt, readcnt);
|
opcode_index = reprogram_opcode_on_the_fly(cmd, writecnt, readcnt);
|
||||||
if (opcode_index == -1) {
|
if (opcode_index == SPI_INVALID_LENGTH) {
|
||||||
|
msg_pdbg("OPCODE 0x%02x has unsupported length, will not execute.\n", cmd);
|
||||||
|
return SPI_INVALID_LENGTH;
|
||||||
|
} else if (opcode_index == -1) {
|
||||||
msg_pdbg("Invalid OPCODE 0x%02x, will not execute.\n",
|
msg_pdbg("Invalid OPCODE 0x%02x, will not execute.\n",
|
||||||
cmd);
|
cmd);
|
||||||
return SPI_INVALID_OPCODE;
|
return SPI_INVALID_OPCODE;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user