Revert "Update all programmer init functions to register bus programmers into common list"
This reverts commit 63b92f99a9d43dd637bcce564cd372be3c81c5d8.
BUG=chromium:635405
Change-Id: I94ae18b547d2aedd74fc7103a38dcbfd2f57be66
Reviewed-on: https://chromium-review.googlesource.com/367504
Commit-Ready: David Hendricks <dhendrix@chromium.org>
Tested-by: David Hendricks <dhendrix@chromium.org>
Reviewed-by: David Hendricks <dhendrix@chromium.org>
diff --git a/flashrom.c b/flashrom.c
index c456bbf..27ee6a7 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -73,6 +73,9 @@
static char *programmer_param = NULL;
+/* Supported buses for the current programmer. */
+enum chipbustype buses_supported;
+
/*
* Programmers supporting multiple buses can have differing size limits on
* each bus. Store the limits for each bus in a common struct.
@@ -374,7 +377,7 @@
return 0;
}
-int programmer_init(struct flashctx *flash, enum programmer prog, char *param)
+int programmer_init(enum programmer prog, char *param)
{
int ret;
@@ -391,6 +394,7 @@
.fwh = 0xffffffff,
.spi = 0xffffffff,
};
+ buses_supported = BUS_NONE;
/* Default to top aligned flash at 4 GB. */
flashbase = 0;
/* Registering shutdown functions is now allowed. */
@@ -401,7 +405,7 @@
programmer_param = param;
msg_pdbg("Initializing %s programmer\n",
programmer_table[programmer].name);
- ret = programmer_table[programmer].init(flash);
+ ret = programmer_table[programmer].init();
if (programmer_param && strlen(programmer_param)) {
msg_perr("Unhandled programmer parameters: %s\n",
programmer_param);
@@ -450,42 +454,42 @@
void chip_writeb(const struct flashctx *flash, uint8_t val, chipaddr addr)
{
- flash->pgm->par.chip_writeb(flash, val, addr);
+ par_programmer->chip_writeb(flash, val, addr);
}
void chip_writew(const struct flashctx *flash, uint16_t val, chipaddr addr)
{
- flash->pgm->par.chip_writew(flash, val, addr);
+ par_programmer->chip_writew(flash, val, addr);
}
void chip_writel(const struct flashctx *flash, uint32_t val, chipaddr addr)
{
- flash->pgm->par.chip_writel(flash, val, addr);
+ par_programmer->chip_writel(flash, val, addr);
}
void chip_writen(const struct flashctx *flash, uint8_t *buf, chipaddr addr, size_t len)
{
- flash->pgm->par.chip_writen(flash, buf, addr, len);
+ par_programmer->chip_writen(flash, buf, addr, len);
}
uint8_t chip_readb(const struct flashctx *flash, const chipaddr addr)
{
- return flash->pgm->par.chip_readb(flash, addr);
+ return par_programmer->chip_readb(flash, addr);
}
uint16_t chip_readw(const struct flashctx *flash, const chipaddr addr)
{
- return flash->pgm->par.chip_readw(flash, addr);
+ return par_programmer->chip_readw(flash, addr);
}
uint32_t chip_readl(const struct flashctx *flash, const chipaddr addr)
{
- return flash->pgm->par.chip_readl(flash, addr);
+ return par_programmer->chip_readl(flash, addr);
}
void chip_readn(const struct flashctx *flash, uint8_t *buf, chipaddr addr, size_t len)
{
- flash->pgm->par.chip_readn(flash, buf, addr, len);
+ par_programmer->chip_readn(flash, buf, addr, len);
}
void programmer_delay(int usecs)
@@ -1066,8 +1070,7 @@
return 1;
}
-int probe_flash(struct registered_programmer *pgm, int startchip,
- struct flashctx *fill_flash, int force)
+int probe_flash(int startchip, struct flashctx *fill_flash, int force)
{
const struct flashchip *flash, *flash_list;
unsigned long base = 0;
@@ -1093,9 +1096,20 @@
for (flash = flash_list + startchip; flash && flash->name; flash++) {
if (chip_to_probe && strcmp(flash->name, chip_to_probe) != 0)
continue;
- buses_common = pgm->buses_supported & flash->bustype;
- if (!buses_common)
+ buses_common = buses_supported & flash->bustype;
+ if (!buses_common) {
+ msg_gspew("Probing for %s %s, %d kB: skipped. ",
+ flash->vendor, flash->name, flash->total_size);
+ tmp = flashbuses_to_text(buses_supported);
+ msg_gspew("Host bus type %s ", tmp);
+ free(tmp);
+ tmp = flashbuses_to_text(flash->bustype);
+ msg_gspew("and chip bus type %s are incompatible.",
+ tmp);
+ free(tmp);
+ msg_gspew("\n");
continue;
+ }
msg_gdbg("Probing for %s %s, %d kB: ",
flash->vendor, flash->name, flash->total_size);
if (!flash->probe && !force) {
@@ -1109,7 +1123,6 @@
/* Start filling in the dynamic data. */
memcpy(fill_flash, flash, sizeof(struct flashchip));
- fill_flash->pgm = pgm;
base = flashbase ? flashbase : (0xffffffff - size + 1);
fill_flash->virtual_memory = (chipaddr)programmer_map_flash_region("flash chip", base, size);
@@ -2086,6 +2099,7 @@
}
}
msg_cdbg("done.\n");
+
/*
* Note: This must be done after reading the file specified for the
* -w/-v argument, if any, so that files specified using -i end up
@@ -2114,7 +2128,7 @@
if (write_it) {
// parse the new fmap
- if ((ret = cros_ec_prepare(flash, newcontents, size))) {
+ if ((ret = cros_ec_prepare(newcontents, size))) {
msg_cerr("CROS_EC prepare failed, ret=%d.\n", ret);
goto out;
}
@@ -2136,7 +2150,7 @@
goto out;
}
- ret = cros_ec_need_2nd_pass(flash);
+ ret = cros_ec_need_2nd_pass();
if (ret < 0) {
// Jump failed
msg_cerr("cros_ec_need_2nd_pass() failed. Stop.\n");
@@ -2163,7 +2177,7 @@
ret = 0;
}
- if (cros_ec_finish(flash) < 0) {
+ if (cros_ec_finish() < 0) {
msg_cerr("cros_ec_finish() failed. Stop.\n");
emergency_help_message();
ret = 1;