No subject


Sun Dec 9 17:34:17 CET 2012


Signed-off-by: Peter Stuge <peter at stuge.se>
Acked-by: Peter Stuge <peter at stuge.se>


Modified: trunk/util/flashrom/flash.h
===================================================================
--- trunk/util/flashrom/flash.h	2009-01-26 03:23:50 UTC (rev 3912)
+++ trunk/util/flashrom/flash.h	2009-01-26 03:37:40 UTC (rev 3913)
@@ -523,6 +523,7 @@
 int spi_disable_blockprotect(void);
 void spi_byte_program(int address, uint8_t byte);
 int spi_nbyte_read(int address, uint8_t *bytes, int len);
+int spi_aai_write(struct flashchip *flash, uint8_t *buf);
 
 /* 82802ab.c */
 int probe_82802ab(struct flashchip *flash);

Modified: trunk/util/flashrom/flashchips.c
===================================================================
--- trunk/util/flashrom/flashchips.c	2009-01-26 03:23:50 UTC (rev 3912)
+++ trunk/util/flashrom/flashchips.c	2009-01-26 03:37:40 UTC (rev 3913)
@@ -1128,6 +1128,20 @@
 
 	{
 		.vendor		= "SST",
+		.name		= "SST25VF040B.REMS",
+		.manufacture_id	= 0xbf,
+		.model_id	= 0x8d,
+		.total_size	= 512,
+		.page_size	= 64*1024,
+		.tested		= TEST_OK_PR,
+		.probe		= probe_spi_rems,
+		.erase		= spi_chip_erase_c7,
+		.write		= spi_chip_aai_write,
+		.read		= spi_chip_read,
+	},
+
+	{
+		.vendor		= "SST",
 		.name		= "SST25VF080B",
 		.manufacture_id	= SST_ID,
 		.model_id	= SST_25VF080B,

Modified: trunk/util/flashrom/spi.c
===================================================================
--- trunk/util/flashrom/spi.c	2009-01-26 03:23:50 UTC (rev 3912)
+++ trunk/util/flashrom/spi.c	2009-01-26 03:37:40 UTC (rev 3913)
@@ -615,3 +615,29 @@
 
 	return 1;
 }
+
+int spi_aai_write(struct flashchip *flash, uint8_t *buf) {
+	uint32_t pos = 2, size = flash->total_size * 1024;
+	unsigned char w[6] = {0xad, 0, 0, 0, buf[0], buf[1]};
+	switch (flashbus) {
+		case BUS_TYPE_WBSIO_SPI:
+			fprintf(stderr, "%s: impossible with Winbond SPI masters, degrading to byte program\n", __func__);
+			return spi_chip_write(flash, buf);
+		default:
+			break;
+	}
+	flash->erase(flash);
+	spi_write_enable();
+	spi_command(6, 0, w, NULL);
+	while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
+		myusec_delay(5); /* SST25VF040B Tbp is max 10us */
+	while (pos < size) {
+		w[1] = buf[pos++];
+		w[2] = buf[pos++];
+		spi_command(3, 0, w, NULL);
+		while (spi_read_status_register() & JEDEC_RDSR_BIT_WIP)
+			myusec_delay(5); /* SST25VF040B Tbp is max 10us */
+	}
+	spi_write_disable();
+	return 0;
+}





More information about the coreboot mailing list