diff --git a/chipdrivers.h b/chipdrivers.h
index 119ea7002784f895f1e03f260dfc320178464045..94daafc0428fe79849eac9a18765f8df7a3394de 100644
--- a/chipdrivers.h
+++ b/chipdrivers.h
@@ -63,7 +63,8 @@ int spi_nbyte_program(int addr, uint8_t *bytes, int len);
 int spi_nbyte_read(int addr, uint8_t *bytes, int len);
 int spi_read_chunked(struct flashchip *flash, uint8_t *buf, int start, int len, int chunksize);
 int spi_write_chunked(struct flashchip *flash, uint8_t *buf, int start, int len, int chunksize);
-int spi_aai_write(struct flashchip *flash, uint8_t *buf, int start, int len);
+int spi_aai_write_new(struct flashchip *flash, uint8_t *buf, int start, int len);
+int spi_aai_write(struct flashchip *flash, uint8_t *buf);
 
 /* 82802ab.c */
 uint8_t wait_82802ab(chipaddr bios);
diff --git a/flashchips.c b/flashchips.c
index 2b1af0b3b791531bc6f75facb635d01a6cc28798..c0280b3aca09c62801ef3bffa5038ced31355169 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -4860,7 +4860,7 @@ struct flashchip flashchips[] = {
 		.model_id	= SST_SST25VF032B,
 		.total_size	= 4096,
 		.page_size	= 256,
-		.tested		= TEST_OK_PRW,
+		.tested		= TEST_OK_PREW,
 		.probe		= probe_spi_rdid,
 		.probe_timing	= TIMING_ZERO,
 		.block_erasers	=
@@ -4883,7 +4883,7 @@ struct flashchip flashchips[] = {
 			},
 		},
 		.unlock		= spi_disable_blockprotect,
-		.write		= spi_chip_write_1,
+		.write		= spi_aai_write,
 		.read		= spi_chip_read,
 	},
 
@@ -4918,7 +4918,7 @@ struct flashchip flashchips[] = {
 			},
 		},
 		.unlock		= spi_disable_blockprotect,
-		.write		= spi_chip_write_1,
+		.write		= spi_chip_write_256,
 		.read		= spi_chip_read,
 	},
 
diff --git a/spi25.c b/spi25.c
index 9cab10aa08d6effde820dfbaacf96bb40d36e49c..688a329527420e6ca573b5548fc3317e60cdb21f 100644
--- a/spi25.c
+++ b/spi25.c
@@ -1300,7 +1300,7 @@ int spi_chip_write_1(struct flashchip *flash, uint8_t *buf)
 	return spi_chip_write_1_new(flash, buf, 0, flash->total_size * 1024);
 }
 
-int spi_aai_write(struct flashchip *flash, uint8_t *buf, int start, int len)
+int spi_aai_write_new(struct flashchip *flash, uint8_t *buf, int start, int len)
 {
 	uint32_t pos = start;
 	int result;
@@ -1391,3 +1391,17 @@ int spi_aai_write(struct flashchip *flash, uint8_t *buf, int start, int len)
 	spi_write_disable();
 	return 0;
 }
+
+int spi_aai_write(struct flashchip *flash, uint8_t *buf)
+{
+	/* Erase first */
+	msg_cinfo("Erasing flash before programming... ");
+	if (erase_flash(flash)) {
+		msg_cerr("ERASE FAILED!\n");
+		return -1;
+	}
+	msg_cinfo("done.\n");
+
+	return spi_aai_write_new(flash, buf, 0, flash->total_size * 1024);
+}
+