mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 23:22:37 +02:00
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> Reviewed-on: https://review.coreboot.org/c/flashrom/+/30386 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: David Hendricks <david.hendricks@gmail.com>
This commit is contained in:
parent
3d7b1e3b5c
commit
dc5af547df
@ -933,6 +933,7 @@ static int parse_voltage(char *voltage)
|
||||
|
||||
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,
|
||||
|
10
flashrom.c
10
flashrom.c
@ -2333,6 +2333,16 @@ int prepare_flash_access(struct flashctx *const flash,
|
||||
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;
|
||||
|
@ -659,6 +659,8 @@ enum spi_controller {
|
||||
#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;
|
||||
@ -851,6 +853,11 @@ static inline bool spi_master_4ba(const struct flashctx *const flash)
|
||||
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user