spi: Add function to probe erase command opcode for all spi_master

Add a field, probe_opcode, to struct spi_master which points to a
function returning a bool by checking if a given command is supported by
the programmer in use. This is used for getting a whitelist of commands
supported by the programmer, as some programmers like ichspi don't
support all opcodes.

Most programmers use the default function, which just returns true.
ICHSPI and dummyflasher use their specialized function.

flashrom-stable: Added `.probe_opcode` for `dirtyjtag_spi`, `ich7`.

Change-Id: I6852ef92788221f471a859c879f8aff42558d36d
Signed-off-by: Aarya Chaumal <aarya.chaumal@gmail.com>
Original-Reviewed-on: https://review.coreboot.org/c/flashrom/+/65183
Original-Reviewed-by: Thomas Heijligen <src@posteo.de>
Original-Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
Original-Reviewed-by: Nico Huber <nico.h@gmx.de>
Original-Reviewed-by: Felix Singer <felixsinger@posteo.net>
Reviewed-on: https://review.coreboot.org/c/flashrom-stable/+/72539
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Nico Huber <nico.h@gmx.de>
diff --git a/spi.c b/spi.c
index ac79f73..78698ce 100644
--- a/spi.c
+++ b/spi.c
@@ -131,6 +131,11 @@
 	return default_spi_write_aai(flash, buf, start, len);
 }
 
+bool default_spi_probe_opcode(struct flashctx *flash, uint8_t opcode)
+{
+	return true;
+}
+
 int register_spi_master(const struct spi_master *mst, void *data)
 {
 	struct registered_master rmst;
@@ -143,7 +148,7 @@
 	}
 
 	if (!mst->write_256 || !mst->read || !mst->command ||
-	    !mst->multicommand ||
+	    !mst->multicommand || !mst->probe_opcode ||
 	    ((mst->command == default_spi_send_command) &&
 	     (mst->multicommand == default_spi_send_multicommand))) {
 		msg_perr("%s called with incomplete master definition.\n"