Nico Huber has uploaded this change for review.

View Change

dediprog: Disable 4BA completely

This is an interim solution. We'll have to enable 4BA step-by-step for
each dediprog protocol version.

Change-Id: I08efcbb09ab3499ef6902a698e9ce3d6232237c4
Signed-off-by: Nico Huber <nico.h@gmx.de>
---
M dediprog.c
M flashrom.c
M programmer.h
3 files changed, 18 insertions(+), 0 deletions(-)

git pull ssh://review.coreboot.org:29418/flashrom refs/changes/86/30386/1
diff --git a/dediprog.c b/dediprog.c
index 72818ea..3cac360 100644
--- a/dediprog.c
+++ b/dediprog.c
@@ -933,6 +933,7 @@

static const struct spi_master spi_master_dediprog = {
.type = SPI_CONTROLLER_DEDIPROG,
+ .features = SPI_MASTER_NO_4BA_MODES,
.max_data_read = 16, /* 18 seems to work fine as well, but 19 times out sometimes with FW 5.15. */
.max_data_write = 16,
.command = dediprog_spi_send_command,
diff --git a/flashrom.c b/flashrom.c
index 59a7531..b229228 100644
--- a/flashrom.c
+++ b/flashrom.c
@@ -2258,6 +2258,16 @@
flash->address_high_byte = -1;
flash->in_4ba_mode = false;

+ /* Be careful about 4BA chips and broken masters */
+ if (flash->chip->total_size > 16 * 1024 && spi_master_no_4ba_modes(flash)) {
+ /* If we can't use native instructions, bail out */
+ if ((flash->chip->feature_bits & FEATURE_4BA_NATIVE) != FEATURE_4BA_NATIVE
+ || !spi_master_4ba(flash)) {
+ msg_cerr("Programmer doesn't support this chip. Aborting.\n");
+ return 1;
+ }
+ }
+
/* Enable/disable 4-byte addressing mode if flash chip supports it */
if (flash->chip->feature_bits & (FEATURE_4BA_ENTER | FEATURE_4BA_ENTER_WREN | FEATURE_4BA_ENTER_EAR7)) {
int ret;
diff --git a/programmer.h b/programmer.h
index 311992a..8c2ae28 100644
--- a/programmer.h
+++ b/programmer.h
@@ -648,6 +648,8 @@
#define MAX_DATA_WRITE_UNLIMITED 256

#define SPI_MASTER_4BA (1U << 0) /**< Can handle 4-byte addresses */
+#define SPI_MASTER_NO_4BA_MODES (1U << 1) /**< Compatibility modes (i.e. extended address
+ register, 4BA mode switch) don't work */

struct spi_master {
enum spi_controller type;
@@ -840,6 +842,11 @@
return flash->mst->buses_supported & BUS_SPI &&
flash->mst->spi.features & SPI_MASTER_4BA;
}
+static inline bool spi_master_no_4ba_modes(const struct flashctx *const flash)
+{
+ return flash->mst->buses_supported & BUS_SPI &&
+ flash->mst->spi.features & SPI_MASTER_NO_4BA_MODES;
+}

/* usbdev.c */
struct libusb_device_handle;

To view, visit change 30386. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I08efcbb09ab3499ef6902a698e9ce3d6232237c4
Gerrit-Change-Number: 30386
Gerrit-PatchSet: 1
Gerrit-Owner: Nico Huber <nico.h@gmx.de>
Gerrit-MessageType: newchange