mirror of
				https://review.coreboot.org/flashrom.git
				synced 2025-10-31 21:30:42 +01:00 
			
		
		
		
	Add support for Spansion S25FL...S chips
Add... - S25FL128S - S25FL256S uniform version (defunct due to addressing) - S25FL512S uniform version (defunct due to addressing) Merge Intel S33 status register functions with this one's. Corresponding to flashrom svn r1692. Signed-off-by: Nikolay Nikolaev <evrinoma@gmail.com> Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
This commit is contained in:
		 Nikolay Nikolaev
					Nikolay Nikolaev
				
			
				
					committed by
					
						 Stefan Tauner
						Stefan Tauner
					
				
			
			
				
	
			
			
			 Stefan Tauner
						Stefan Tauner
					
				
			
						parent
						
							0ec2f7e7e0
						
					
				
				
					commit
					c80c4a35a0
				
			| @@ -91,8 +91,8 @@ int spi_disable_blockprotect_at25f512b(struct flashctx *flash); | ||||
| int spi_disable_blockprotect_at25fs010(struct flashctx *flash); | ||||
| int spi_disable_blockprotect_at25fs040(struct flashctx *flash); | ||||
| int spi_prettyprint_status_register_en25s_wp(struct flashctx *flash); | ||||
| int spi_prettyprint_status_register_s33(struct flashctx *flash); | ||||
| int spi_disable_blockprotect_s33(struct flashctx *flash); | ||||
| int spi_prettyprint_status_register_bp2_ep_srwd(struct flashctx *flash); | ||||
| int spi_disable_blockprotect_bp2_ep_srwd(struct flashctx *flash); | ||||
| int spi_prettyprint_status_register_sst25(struct flashctx *flash); | ||||
| int spi_prettyprint_status_register_sst25vf016(struct flashctx *flash); | ||||
| int spi_prettyprint_status_register_sst25vf040b(struct flashctx *flash); | ||||
|   | ||||
							
								
								
									
										130
									
								
								flashchips.c
									
									
									
									
									
								
							
							
						
						
									
										130
									
								
								flashchips.c
									
									
									
									
									
								
							| @@ -5159,8 +5159,8 @@ const struct flashchip flashchips[] = { | ||||
| 				.block_erase = spi_block_erase_c7, | ||||
| 			} | ||||
| 		}, | ||||
| 		.printlock	= spi_prettyprint_status_register_s33, | ||||
| 		.unlock		= spi_disable_blockprotect_s33, | ||||
| 		.printlock	= spi_prettyprint_status_register_bp2_ep_srwd, | ||||
| 		.unlock		= spi_disable_blockprotect_bp2_ep_srwd, | ||||
| 		.write		= spi_chip_write_256, | ||||
| 		.read		= spi_chip_read,	/* also fast read 0x0B */ | ||||
| 		.voltage	= {2700, 3600}, | ||||
| @@ -5198,8 +5198,8 @@ const struct flashchip flashchips[] = { | ||||
| 				.block_erase = spi_block_erase_c7, | ||||
| 			} | ||||
| 		}, | ||||
| 		.printlock	= spi_prettyprint_status_register_s33, | ||||
| 		.unlock		= spi_disable_blockprotect_s33, | ||||
| 		.printlock	= spi_prettyprint_status_register_bp2_ep_srwd, | ||||
| 		.unlock		= spi_disable_blockprotect_bp2_ep_srwd, | ||||
| 		.write		= spi_chip_write_256, | ||||
| 		.read		= spi_chip_read,	/* also fast read 0x0B */ | ||||
| 		.voltage	= {2700, 3600}, | ||||
| @@ -5237,8 +5237,8 @@ const struct flashchip flashchips[] = { | ||||
| 				.block_erase = spi_block_erase_c7, | ||||
| 			} | ||||
| 		}, | ||||
| 		.printlock	= spi_prettyprint_status_register_s33, | ||||
| 		.unlock		= spi_disable_blockprotect_s33, | ||||
| 		.printlock	= spi_prettyprint_status_register_bp2_ep_srwd, | ||||
| 		.unlock		= spi_disable_blockprotect_bp2_ep_srwd, | ||||
| 		.write		= spi_chip_write_256, | ||||
| 		.read		= spi_chip_read,	/* also fast read 0x0B */ | ||||
| 		.voltage	= {2700, 3600}, | ||||
| @@ -5276,8 +5276,8 @@ const struct flashchip flashchips[] = { | ||||
| 				.block_erase = spi_block_erase_c7, | ||||
| 			} | ||||
| 		}, | ||||
| 		.printlock	= spi_prettyprint_status_register_s33, | ||||
| 		.unlock		= spi_disable_blockprotect_s33, | ||||
| 		.printlock	= spi_prettyprint_status_register_bp2_ep_srwd, | ||||
| 		.unlock		= spi_disable_blockprotect_bp2_ep_srwd, | ||||
| 		.write		= spi_chip_write_256, | ||||
| 		.read		= spi_chip_read,	/* also fast read 0x0B */ | ||||
| 		.voltage	= {2700, 3600}, | ||||
| @@ -5315,8 +5315,8 @@ const struct flashchip flashchips[] = { | ||||
| 				.block_erase = spi_block_erase_c7, | ||||
| 			} | ||||
| 		}, | ||||
| 		.printlock	= spi_prettyprint_status_register_s33, | ||||
| 		.unlock		= spi_disable_blockprotect_s33, | ||||
| 		.printlock	= spi_prettyprint_status_register_bp2_ep_srwd, | ||||
| 		.unlock		= spi_disable_blockprotect_bp2_ep_srwd, | ||||
| 		.write		= spi_chip_write_256, | ||||
| 		.read		= spi_chip_read,	/* also fast read 0x0B */ | ||||
| 		.voltage	= {2700, 3600}, | ||||
| @@ -5354,8 +5354,8 @@ const struct flashchip flashchips[] = { | ||||
| 				.block_erase = spi_block_erase_c7, | ||||
| 			} | ||||
| 		}, | ||||
| 		.printlock	= spi_prettyprint_status_register_s33, | ||||
| 		.unlock		= spi_disable_blockprotect_s33, | ||||
| 		.printlock	= spi_prettyprint_status_register_bp2_ep_srwd, | ||||
| 		.unlock		= spi_disable_blockprotect_bp2_ep_srwd, | ||||
| 		.write		= spi_chip_write_256, | ||||
| 		.read		= spi_chip_read,	/* also fast read 0x0B */ | ||||
| 		.voltage	= {2700, 3600}, | ||||
| @@ -8586,6 +8586,112 @@ const struct flashchip flashchips[] = { | ||||
| 		.voltage	= {2700, 3600}, | ||||
| 	}, | ||||
|  | ||||
| 	{ | ||||
| 		.vendor		= "Spansion", | ||||
| 		.name		= "S25FL128S......0", /* uniform 256kB sectors */ | ||||
| 		.bustype	= BUS_SPI, | ||||
| 		.manufacture_id	= SPANSION_ID, | ||||
| 		.model_id	= SPANSION_S25FL128, | ||||
| 		.total_size	= 16384, | ||||
| 		.page_size	= 256, | ||||
| 		/* supports 4B addressing */ | ||||
| 		/* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */ | ||||
| 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP, | ||||
| 		.tested		= TEST_UNTESTED, | ||||
| 		.probe		= probe_spi_rdid, | ||||
| 		.probe_timing	= TIMING_ZERO, | ||||
| 		.block_erasers	= { | ||||
| 			{ | ||||
| 				.eraseblocks = { {4 * 1024, 4096} }, | ||||
| 				.block_erase = spi_block_erase_20, | ||||
| 			}, { | ||||
| 				.eraseblocks = { {256 * 1024, 64} }, | ||||
| 				.block_erase = spi_block_erase_d8, | ||||
| 			}, { | ||||
| 				.eraseblocks = { { 16384 * 1024, 1} }, | ||||
| 				.block_erase = spi_block_erase_60, | ||||
| 			}, { | ||||
| 				.eraseblocks = { { 16384 * 1024, 1} }, | ||||
| 				.block_erase = spi_block_erase_c7, | ||||
| 			} | ||||
| 		}, | ||||
| 		.printlock	= spi_prettyprint_status_register_bp2_ep_srwd, /* TODO: SR2 and many others */ | ||||
| 		.unlock		= spi_disable_blockprotect_bp2_srwd, /* TODO: various other locks */ | ||||
| 		.write		= spi_chip_write_256, /* Multi I/O supported */ | ||||
| 		.read		= spi_chip_read, /* Fast read (0x0B) and multi I/O supported */ | ||||
| 		.voltage	= {2700, 3600}, | ||||
| 	}, | ||||
|  | ||||
| 	{ | ||||
| 		.vendor		= "Spansion", | ||||
| 		.name		= "S25FL256S......0", /* uniform 256kB sectors */ | ||||
| 		.bustype	= BUS_SPI, | ||||
| 		.manufacture_id	= SPANSION_ID, | ||||
| 		.model_id	= SPANSION_S25FL256, | ||||
| 		.total_size	= 32768, | ||||
| 		.page_size	= 256, | ||||
| 		/* supports 4B addressing */ | ||||
| 		/* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */ | ||||
| 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP, | ||||
| 		.tested		= TEST_BAD_REW, | ||||
| 		.probe		= probe_spi_rdid, | ||||
| 		.probe_timing	= TIMING_ZERO, | ||||
| 		.block_erasers	= { | ||||
| 			{ | ||||
| 				.eraseblocks = { {4 * 1024, 8192} }, | ||||
| 				.block_erase = spi_block_erase_20, | ||||
| 			}, { | ||||
| 				.eraseblocks = { {256 * 1024, 128} }, | ||||
| 				.block_erase = spi_block_erase_d8, | ||||
| 			}, { | ||||
| 				.eraseblocks = { { 32768 * 1024, 1} }, | ||||
| 				.block_erase = spi_block_erase_60, | ||||
| 			}, { | ||||
| 				.eraseblocks = { { 32768 * 1024, 1} }, | ||||
| 				.block_erase = spi_block_erase_c7, | ||||
| 			} | ||||
| 		}, | ||||
| 		.printlock	= spi_prettyprint_status_register_bp2_ep_srwd, /* TODO: SR2 and many others */ | ||||
| 		.unlock		= spi_disable_blockprotect_bp2_srwd, /* TODO: various other locks */ | ||||
| 		.write		= spi_chip_write_256, /* Multi I/O supported */ | ||||
| 		.read		= spi_chip_read, /* Fast read (0x0B) and multi I/O supported */ | ||||
| 		.voltage	= {2700, 3600}, | ||||
| 	}, | ||||
|  | ||||
| 	{ | ||||
| 		.vendor		= "Spansion", | ||||
| 		.name		= "S25FL512S", | ||||
| 		.bustype	= BUS_SPI, | ||||
| 		.manufacture_id	= SPANSION_ID, | ||||
| 		.model_id	= SPANSION_S25FL512, | ||||
| 		.total_size	= 65536, | ||||
| 		.page_size	= 256, | ||||
| 		/* supports 4B addressing */ | ||||
| 		/* supports SFDP */ | ||||
| 		/* OTP: 1024B total, 32B reserved; read 0x4B; write 0x42 */ | ||||
| 		.feature_bits	= FEATURE_WRSR_WREN | FEATURE_OTP, | ||||
| 		.tested		= TEST_BAD_REW, | ||||
| 		.probe		= probe_spi_rdid, | ||||
| 		.probe_timing	= TIMING_ZERO, | ||||
| 		.block_erasers	= { | ||||
| 			{ | ||||
| 				.eraseblocks = { {256 * 1024, 256} }, | ||||
| 				.block_erase = spi_block_erase_d8, | ||||
| 			}, { | ||||
| 				.eraseblocks = { { 65536 * 1024, 1} }, | ||||
| 				.block_erase = spi_block_erase_60, | ||||
| 			}, { | ||||
| 				.eraseblocks = { { 65536 * 1024, 1} }, | ||||
| 				.block_erase = spi_block_erase_c7, | ||||
| 			} | ||||
| 		}, | ||||
| 		.printlock	= spi_prettyprint_status_register_bp2_ep_srwd, /* TODO: SR2 and many others */ | ||||
| 		.unlock		= spi_disable_blockprotect_bp2_srwd, /* TODO: various other locks */ | ||||
| 		.write		= spi_chip_write_256, /* Multi I/O supported */ | ||||
| 		.read		= spi_chip_read, /* Fast read (0x0B) and multi I/O supported */ | ||||
| 		.voltage	= {2700, 3600}, | ||||
| 	}, | ||||
|  | ||||
| 	{ | ||||
| 		.vendor		= "SST", | ||||
| 		.name		= "SST25LF040A", | ||||
|   | ||||
| @@ -540,6 +540,9 @@ | ||||
| #define SPANSION_S25FL016A	0x0214 | ||||
| #define SPANSION_S25FL032A	0x0215	/* Same as S25FL032P, but the latter supports EDI and CFI */ | ||||
| #define SPANSION_S25FL064A	0x0216	/* Same as S25FL064P, but the latter supports EDI and CFI */ | ||||
| #define SPANSION_S25FL128	0x2018 | ||||
| #define SPANSION_S25FL256	0x0219 | ||||
| #define SPANSION_S25FL512	0x0220 | ||||
| #define SPANSION_S25FL204	0x4013 | ||||
| #define SPANSION_S25FL208	0x4014 | ||||
| #define SPANSION_S25FL216	0x4015	/* Same as S25FL216K, but the latter supports OTP, 3 status regs, quad I/O, SFDP etc. */ | ||||
|   | ||||
| @@ -605,15 +605,17 @@ int spi_prettyprint_status_register_en25s_wp(struct flashctx *flash) | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| /* === Intel === */ | ||||
| /* === Intel/Numonyx/Micron - Spansion === */ | ||||
|  | ||||
| /* Used by Intel/Numonyx S33 and Spansion S25FL-S chips */ | ||||
| /* TODO: Clear P_FAIL and E_FAIL with Clear SR Fail Flags Command (30h) here? */ | ||||
| int spi_disable_blockprotect_s33(struct flashctx *flash) | ||||
| int spi_disable_blockprotect_bp2_ep_srwd(struct flashctx *flash) | ||||
| { | ||||
| 	return spi_disable_blockprotect_bp2_srwd(flash); | ||||
| } | ||||
|  | ||||
| int spi_prettyprint_status_register_s33(struct flashctx *flash) | ||||
| /* Used by Intel/Numonyx S33 and Spansion S25FL-S chips */ | ||||
| int spi_prettyprint_status_register_bp2_ep_srwd(struct flashctx *flash) | ||||
| { | ||||
| 	uint8_t status = spi_read_status_register(flash); | ||||
| 	msg_cdbg("Chip status register is %02x\n", status); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user