1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-04-26 22:52:34 +02:00

ichspi: Probe opcode in POSSIBLE_OPCODES[] as well

ich_spi_send_command() and ich_spi_send_multicommand() will overwrite
the "Sector erase" opcode with the opcode for command via
reprogram_opcode_on_the_fly(), but not restore it, causing the "Sector
erase" opcode may get lost after sending commands, leaving only "Bulk
erase" opcode which erase the whole chip available.

In the mean time, ich_spi_probe_opcode() used not to report opcodes in
POSSIBLE_OPCODES[] but not in curopcodes->opcode[] as supported.

Now, if the opcode being probed is not in curopcodes->opcode[] but in
POSSIBLE_OPCODES[], it will be reported as supported, and programmed
later by ich_spi_send_(multi)command().

Fix:https://ticket.coreboot.org/issues/556

Change-Id: I3fc831fc072e2af9265835cb2f71bf8c222c6a64
Signed-off-by: persmule <persmule@hardenedlinux.org>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/84253
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
Reviewed-by: Nikolai Artemiev <nartemiev@google.com>
This commit is contained in:
persmule 2024-09-09 02:50:06 +08:00 committed by Anastasia Klimchuk
parent f80caddca0
commit 26a1eb514c

View File

@ -1822,7 +1822,11 @@ static int ich_spi_send_multicommand(const struct flashctx *flash,
static bool ich_spi_probe_opcode(const struct flashctx *flash, uint8_t opcode)
{
return find_opcode(curopcodes, opcode) >= 0;
int ret = find_opcode(curopcodes, opcode);
if ((ret == -1) && (lookup_spi_type(opcode) <= 3))
/* opcode is in POSSIBLE_OPCODES, report supported. */
return true;
return ret >= 0;
}
#define ICH_BMWAG(x) ((x >> 24) & 0xff)