spi: Import upstream's per-flash spi master register scheme

Align closer with upstream by introducing a new register dispatch
mechanism and using it to confine global usage behind an API.

V.2: Fix the embedding of mst into the flashctx.
V.3: Just introduce the structures and dispatch mechanism however
     avoid using it here in this patch.
V.4: Sqush in, 'add missing feild in programmer.h' &&
		'cli_classic,dediprog: Fix probe_flash() call sites' &&
		'hack control flow so new dispatch is a nop here'.

BUG=chromium:478356
BRANCH=none
TEST=still builds

Change-Id: I9f3092de8b0a0ea377a53c2b093884ead1eaf13d
Signed-off-by: Edward O'Callaghan <quasisec@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/flashrom/+/1657471
Reviewed-by: Stefan Reinauer <reinauer@google.com>
Reviewed-by: Sam McNally <sammc@chromium.org>
Tested-by: Stefan Reinauer <reinauer@google.com>
diff --git a/programmer.h b/programmer.h
index dd945e1..7410f30 100644
--- a/programmer.h
+++ b/programmer.h
@@ -694,9 +694,21 @@
 	uint16_t (*chip_readw) (const struct flashctx *flash, const chipaddr addr);
 	uint32_t (*chip_readl) (const struct flashctx *flash, const chipaddr addr);
 	void (*chip_readn) (const struct flashctx *flash, uint8_t *buf, const chipaddr addr, size_t len);
+	const void *data;
 };
 extern const struct par_master *par_master;
 void register_par_master(const struct par_master *pgm, const enum chipbustype buses);
+struct registered_master {
+	enum chipbustype buses_supported;
+	union {
+		struct par_master par;
+		struct spi_master spi;
+		struct opaque_programmer opaque;
+	};
+};
+extern struct registered_master registered_masters[];
+extern int registered_master_count;
+int register_master(const struct registered_master *mst);
 
 /* serprog.c */
 #if CONFIG_SERPROG == 1