mirror of
				https://review.coreboot.org/flashrom.git
				synced 2025-10-31 13:20:42 +01:00 
			
		
		
		
	dummyflasher.c: Allow filling with either 0x00 or 0xff
This upstreams a ChromiumOS feature that allows the user of the dummyflasher spi master to either fill with 0x00 or 0xff in the fake flash content by way of a spi master param. BUG=b:140394053 BRANCH=none TEST=none Change-Id: I37c6dee932e449201d8bbfb03ca6d139da3cb6a2 Signed-off-by: Edward O'Callaghan <quasisec@google.com> Reviewed-on: https://review.coreboot.org/c/flashrom/+/47859 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Sam McNally <sammc@google.com>
This commit is contained in:
		 Edward O'Callaghan
					Edward O'Callaghan
				
			
				
					committed by
					
						 Edward O'Callaghan
						Edward O'Callaghan
					
				
			
			
				
	
			
			
			 Edward O'Callaghan
						Edward O'Callaghan
					
				
			
						parent
						
							f280797060
						
					
				
				
					commit
					3d300cb797
				
			| @@ -52,6 +52,7 @@ struct emu_data { | |||||||
| 	enum emu_chip emu_chip; | 	enum emu_chip emu_chip; | ||||||
| 	char *emu_persistent_image; | 	char *emu_persistent_image; | ||||||
| 	unsigned int emu_chip_size; | 	unsigned int emu_chip_size; | ||||||
|  | 	int erase_to_zero; | ||||||
| 	int emu_modified;	/* is the image modified since reading it? */ | 	int emu_modified;	/* is the image modified since reading it? */ | ||||||
| 	uint8_t emu_status; | 	uint8_t emu_status; | ||||||
| 	/* If "freq" parameter is passed in from command line, commands will delay | 	/* If "freq" parameter is passed in from command line, commands will delay | ||||||
| @@ -455,6 +456,23 @@ int dummy_init(void) | |||||||
| 		return 1; | 		return 1; | ||||||
| 	} | 	} | ||||||
| 	free(tmp); | 	free(tmp); | ||||||
|  |  | ||||||
|  | 	/* Should emulated flash erase to zero (yes/no)? */ | ||||||
|  | 	tmp = extract_programmer_param("erase_to_zero"); | ||||||
|  | 	if (tmp) { | ||||||
|  | 		if (!strcmp(tmp, "yes")) { | ||||||
|  | 			msg_pdbg("Emulated chip will erase to 0x00\n"); | ||||||
|  | 			data->erase_to_zero = 1; | ||||||
|  | 		} else if (!strcmp(tmp, "no")) { | ||||||
|  | 			msg_pdbg("Emulated chip will erase to 0xff\n"); | ||||||
|  | 		} else { | ||||||
|  | 			msg_perr("erase_to_zero can be \"yes\" or \"no\"\n"); | ||||||
|  | 			free(tmp); | ||||||
|  | 			return 1; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	free(tmp); | ||||||
|  |  | ||||||
| 	flashchip_contents = malloc(data->emu_chip_size); | 	flashchip_contents = malloc(data->emu_chip_size); | ||||||
| 	if (!flashchip_contents) { | 	if (!flashchip_contents) { | ||||||
| 		msg_perr("Out of memory!\n"); | 		msg_perr("Out of memory!\n"); | ||||||
| @@ -478,8 +496,9 @@ int dummy_init(void) | |||||||
| 	} | 	} | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| 	msg_pdbg("Filling fake flash chip with 0xff, size %i\n", data->emu_chip_size); | 	msg_pdbg("Filling fake flash chip with 0x%02x, size %i\n", | ||||||
| 	memset(flashchip_contents, 0xff, data->emu_chip_size); | 			data->erase_to_zero ? 0x00 : 0xff, data->emu_chip_size); | ||||||
|  | 	memset(flashchip_contents, data->erase_to_zero ? 0x00 : 0xff, data->emu_chip_size); | ||||||
|  |  | ||||||
| 	/* Will be freed by shutdown function if necessary. */ | 	/* Will be freed by shutdown function if necessary. */ | ||||||
| 	data->emu_persistent_image = extract_programmer_param("image"); | 	data->emu_persistent_image = extract_programmer_param("image"); | ||||||
| @@ -1052,6 +1071,9 @@ int probe_variable_size(struct flashctx *flash) | |||||||
| 	msg_cdbg("%s: set flash->total_size to %dK bytes.\n", __func__, | 	msg_cdbg("%s: set flash->total_size to %dK bytes.\n", __func__, | ||||||
| 	         flash->chip->total_size); | 	         flash->chip->total_size); | ||||||
|  |  | ||||||
|  | 	if (emu_data->erase_to_zero) | ||||||
|  | 		flash->chip->feature_bits |= FEATURE_ERASED_ZERO; | ||||||
|  |  | ||||||
| 	/* Update the first count of each of the block_erasers. */ | 	/* Update the first count of each of the block_erasers. */ | ||||||
| 	for (i = 0; i < NUM_ERASEFUNCTIONS; i++) { | 	for (i = 0; i < NUM_ERASEFUNCTIONS; i++) { | ||||||
| 		struct block_eraser *eraser = &flash->chip->block_erasers[i]; | 		struct block_eraser *eraser = &flash->chip->block_erasers[i]; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user