Anastasia Klimchuk has submitted this change. ( https://review.coreboot.org/c/flashrom/+/84253?usp=email )
Change subject: ichspi: Probe opcode in POSSIBLE_OPCODES[] as well ......................................................................
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 --- M ichspi.c 1 file changed, 5 insertions(+), 1 deletion(-)
Approvals: Anastasia Klimchuk: Looks good to me, approved build bot (Jenkins): Verified Nikolai Artemiev: Looks good to me, approved
diff --git a/ichspi.c b/ichspi.c index 3388657..fc994db 100644 --- a/ichspi.c +++ b/ichspi.c @@ -1822,7 +1822,11 @@
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)