diff --git a/flash.h b/flash.h
index 8a6f766b55f8a9b0900804951e32091d692eb8b7..c487701a20438b8f9756eada0ac7e00c9192f05e 100644
--- a/flash.h
+++ b/flash.h
@@ -58,6 +58,7 @@ extern struct flashchip flashchips[];
 #define W_49F002U         0x0B	/* Winbond w29c020c device code */
 
 #define ST_ID       	  0x20
+#define ST_M29F040B       0xE2
 #define ST_M29F400BT      0xD5
 
 #define MSYSTEMS_ID       0x156f
diff --git a/flashchips.c b/flashchips.c
index ba003bf19f867fca584f09cf189b8271775d6afc..f718e7b1404d6d5832b6e2ccbfcf5b783ce9bdf8 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -74,6 +74,8 @@ struct flashchip flashchips[] = {
 	 probe_jedec, 	erase_chip_jedec, write_jedec,	NULL},
 	{"W49F002U", 	WINBOND_ID, 	W_49F002U,	NULL, 256, 128,
 	 probe_jedec,	erase_chip_jedec, write_49f002, NULL},
+	{"M29F040B",	ST_ID, 		ST_M29F040B,	NULL, 512, 64 * 1024,
+	 probe_29f040b, erase_29f040b,	write_29f040b,	NULL},
 	{"M29F400BT",	ST_ID,		ST_M29F400BT,	NULL, 512, 64 * 1024,
 	 probe_m29f400bt, erase_m29f400bt, write_linuxbios_m29f400bt, NULL},
 	{"82802ab",	137,		173,		NULL, 512, 64 * 1024,