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

ichspi: Check whether chipset is locked when probing opcode

This is follow up (or fix) for
commit 26a1eb514ccefc61b110068cf0eea73c397ba045

When probing opcode, all opcodes in POSSIBLE_OPCODES are reported as
supported, even if the opcode is not in curopcodes. This is relying
on reprogramming on-the-fly to handle the gap between POSSIBLE_OPCODES
and curopcodes. However, for locked chipsets on-the-fly is not
happening (is not possible, since list of opcodes is locked), so we
can't rely on it.
So, we need to check whether chipset is locked.

Ticket: https://ticket.coreboot.org/issues/573

Change-Id: I701a86f030cfef43a1158bf075287ade569254e6
Signed-off-by: Anastasia Klimchuk <aklm@flashrom.org>
Tested-by: Matt DeVillier <matt.devillier@gmail.com>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/85592
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Nikolai Artemiev <nartemiev@google.com>
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Reviewed-by: Matt DeVillier <matt.devillier@gmail.com>
This commit is contained in:
Anastasia Klimchuk 2024-12-14 20:07:29 +11:00
parent 225241817e
commit b184e013e2

View File

@ -1823,8 +1823,12 @@ static int ich_spi_send_multicommand(const struct flashctx *flash,
static bool ich_spi_probe_opcode(const struct flashctx *flash, uint8_t opcode) static bool ich_spi_probe_opcode(const struct flashctx *flash, uint8_t opcode)
{ {
int ret = find_opcode(curopcodes, opcode); int ret = find_opcode(curopcodes, opcode);
if ((ret == -1) && (lookup_spi_type(opcode) <= 3)) if ((ret == -1) && (lookup_spi_type(opcode) <= 3) && (!ichspi_lock))
/* opcode is in POSSIBLE_OPCODES, report supported. */ /* opcode is in POSSIBLE_OPCODES, report supported.
* Relying on reprogramming on-the-fly
* when opcode is not in curopcodes, but is in POSSIBLE_OPCODES.
*
* on-the-fly does not work for locked chipsets, therefore checking ichspi_lock. */
return true; return true;
return ret >= 0; return ret >= 0;
} }