Commit dc704eda authored by Stefan Tauner's avatar Stefan Tauner
Browse files

Refine reprogram_opcode_on_the_fly to indicate wrong readcnt/writecnt combinations


Corresponding to flashrom svn r1531.
Signed-off-by: default avatarStefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Acked-by: default avatarCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
parent e5449392
...@@ -405,18 +405,16 @@ static int reprogram_opcode_on_the_fly(uint8_t opcode, unsigned int writecnt, un ...@@ -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, ...@@ -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;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment