mirror of
				https://review.coreboot.org/flashrom.git
				synced 2025-11-04 07:00:39 +01: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:
		@@ -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;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user