[flashrom] [PATCH/RFC] finish jedec converstion

Anders Juel Jensen andersjjensen at gmail.com
Thu Jan 28 23:58:19 CET 2010


Carl asked me to double check as many as i could. Sorry for the somewhat funny 
notation, but it helped me keep track of where i was. There are only a few not 
mentioned.. i worked that out with Sean on IRC.

Also, major sorry for the delay.. this was a little tougher than i expected.

The features quoted are the features i have checked. Comments are above.
Legend:
(C) = Checks out
(W) = Warning, sheet says otherwise.
(U) = Unsure, please double check and comment.
(N) = No datasheet available.
(S) = Skipped in this review because $REASON


[AMD Section]
(W)(U) I can't find evidence of  anything other than write_jedec_1 in the 
sheet. Please verify.
 		.name		= "Am29F010A/B",
 		.feature_bits = FEATURE_ADDR_2AA|FEATURE_EITHER_RESET,
 		.write		= write_jedec,

(W)(U) Uhm, the N versions do not support reset at all, but I don't think we 
can tell them apart with out a runtime test. Also they are ADDR_2AA I think.
 		.name		= "Am29F002(N)BB" / "Am29F002(N)BT"
 		.feature_bits = FEATURE_SHORT_RESET,
                .write          = write_jedec_1,

(C) No comments.
 		.name		= "Am29F016D",
 		.feature_bits = FEATURE_ADDR_2AA|FEATURE_SHORT_RESET,
 		.write		= write_jedec_1,

 		.name		= "Am29F040B",
 		.feature_bits = FEATURE_ADDR_2AA|FEATURE_SHORT_RESET,
 		.write		= write_jedec_1,

 		.name		= "Am29F080B",
 		.feature_bits = FEATURE_ADDR_2AA|FEATURE_SHORT_RESET,
 		.write		= write_jedec_1,

 		.name		= "Am29LV040B",
 		.feature_bits = FEATURE_ADDR_2AA|FEATURE_SHORT_RESET,
 		.write		= write_jedec_1,

(C) Strictly speaking it doesn't need ADDR_2AA as it has "Don't care" for all 
addresses (except the last in ID detection) [weird freakin' chip!, red]
 		.name		= "Am29LV081B",
 		.feature_bits = FEATURE_ADDR_2AA|FEATURE_SHORT_RESET,
 		.write		= write_jedec_1,


[ASD Section]
(N) Also has strange comments in flashchips.h
		.name		= "AE49F2008",


[Atmel Section]
(C) No comments.
 		.name		= "AT29C512",
 		.feature_bits = FEATURE_LONG_RESET,
 		.write		= write_jedec,

 		.name		= "AT29C010A",
 		.feature_bits = FEATURE_LONG_RESET,
 		.write		= write_jedec,

 		.name		= "AT29C020",
 		.feature_bits = FEATURE_LONG_RESET,
 		.write		= write_jedec,

 		.name		= "AT29C040A",
 		.feature_bits = FEATURE_LONG_RESET,
 		.write		= write_jedec,

 		.name		= "AT49BV512",
 		.feature_bits = FEATURE_EITHER_RESET,
 		.write		= write_jedec_1,

(W) N-version does not support reset.
 		.name		= "AT49F002(N)" / "AT49F002(N)T"
		.feature_bits = FEATURE_EITHER_RESET,
 		.write		= write_jedec_1,


[AMIC Section]
(C) No remarks.
 		.name		= "A29002B" / "A29002T"
  		.feature_bits = FEATURE_ADDR_2AA|FEATURE_SHORT_RESET,
		.write		= write_jedec_1,

 		.name		= "A29040B",
 		.feature_bits = FEATURE_ADDR_2AA|FEATURE_SHORT_RESET,
 		.write		= write_jedec_1,

(C)(U) This one should do write_jedec_1 if that function understands 
registermap.
 		.name		= "A49LF040A",
		.feature_bits	= FEATURE_REGISTERMAP|FEATURE_EITHER_RESET,
                .write          = write_49fl00x,


[EMST Section]
(C) No comments.
 		.name		= "F49B002UA",
		.feature_bits = FEATURE_EITHER_RESET,
 		.write		= write_jedec_1,


[EON Section]
(W)  Oops,  ADDR_555 only.
 		.name		= "EN29F002(A)(N)B" / "EN29F002(A)(N)T"
		.feature_bits = FEATURE_EITHER_RESET,
                .write          = write_jedec_1,


[Fujitsu Section]
(C)(U)  *Looks like* it supports write_jedec_1.
 		.name		= "MBM29F004BC" / "MBM29F004TC"
		.feature_bits = FEATURE_ADDR_2AA|FEATURE_EITHER_RESET,
 		.write		= NULL,

(U) I have no idea...
		/* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
 		.name		= "MBM29F400BC" / "MBM29F400TC"
 		.feature_bits = FEATURE_ADDR_SHIFTED|FEATURE_EITHER_RESET,
                .write          = write_coreboot_m29f400bt,


[Intel Section]
(S) These datasheets are scary.
		.name		= "28F001BX-B" / "28F001BX-T" / "82802AB"


[Macronix Section]
(C) These check out:
 		.name		= "MX29F001B" / "MX29F001T"
 		.feature_bits = FEATURE_ADDR_2AA|FEATURE_SHORT_RESET,
		.write		= write_jedec_1,

 		.name		= "MX29F002B" / "MX29F002T"
 		.feature_bits = FEATURE_ADDR_2AA|FEATURE_SHORT_RESET,
  		.write		= write_jedec_1,

 		.name		= "MX29LV040",
 		.feature_bits = FEATURE_ADDR_2AA|FEATURE_SHORT_RESET,
  		.write		= write_jedec_1,


[PMC Section]
(W)(U) Looks like write_jedec_1 only.
 		.name		= "Pm29F002T" / "Pm29F002B",
 		.feature_bits	= FEATURE_ADDR_2AA|FEATURE_EITHER_RESET,
 		.write		= write_jedec,

(W) Is ADDR_2AA
 		.name		= "Pm39LV010",
 		.feature_bits	= FEATURE_EITHER_RESET,
 		.write		= write_jedec_1,

(W)(U) This looks like plain write_jedec_1 to me
 		.name		= "Pm49FL002" / "Pm49FL004"
 		.feature_bits	= FEATURE_REGISTERMAP|FEATURE_EITHER_RESET,
                .write               = write_49fl00x


[Sharp Section]
(S) Can't read that sheet. Silly people...
 		.name		= "LHF00L04",


[SST Section]
(W)(U) Can only find short reset in sheet.
 		.name		= "SST28SF040A",
 		.feature_bits	= FEATURE_EITHER_RESET,

(C) No comment.
 		.name		= "SST29EE010" / "SST29LE010",
 		.feature_bits	= FEATURE_LONG_RESET,
                .write               = write_jedec

 		.name		= "SST29EE020A" / "SST29LE020",
 		.feature_bits	= FEATURE_LONG_RESET,
                .write              = write_jedec

 		.name		= "SST39SF512" / "SST39SF010A" / "SST39SF020A" / "SST39SF040"
				           "SST39VF512" / "SST39VF010"   / "SST39VF020"   / "SST39VF040"
					   "SST39VF080" /
 		.feature_bits	= FEATURE_EITHER_RESET,
 		.write		= write_jedec_1,

 		.name		= "SST49LF002A/B" / "SST49LF003A/B" / "SST49LF004A/B"
					   "SST49LF008A"
		.feature_bits	= FEATURE_REGISTERMAP|FEATURE_EITHER_RESET

(W) This one is REGISTERMAP (ds page 22) and SHORT_RESET (ds page 14)
 		.name		= "SST49LF004C" / "SST49LF008C"
 		.feature_bits	= 0,

(W) This one is REGISTERMAP (ds page 19) and SHORT_RESET (ds page 17)
 		.name		= "SST49LF016C",
 		.feature_bits	= 0,

(W) REGISTERMAP and (ds page 23) and SHORT_RESET (ds page 16)
 		.name		= "SST49LF160C",
		.feature_bits	= 0,

(C) No comments.
 		.name		= "SST49LF020" / "SST49LF040"
 		.feature_bits	= FEATURE_EITHER_RESET,
 		.write		= write_jedec_1,

 		.name		= "SST49LF020A" / "SST49LF080A"
		.feature_bits	= FEATURE_EITHER_RESET,
 		.write		= write_jedec_1,

 		.name		= "SST49LF040B",
 		.feature_bits	= FEATURE_EITHER_RESET,
 		.write		= write_jedec_1,

[ST Section]
(U) Generally i have a hard time with ST and write_jedec vs write_jedec_1,
      so someone else should look over this...
(C) Checks out.
 		.name		= "M29F002B",
 		.feature_bits	= FEATURE_ADDR_AAA|FEATURE_EITHER_RESET,
 		.write		= write_jedec,

(W) And once again the N version does not support reset.
 		.name		= "M29F002T/NT",
		.feature_bits	= FEATURE_ADDR_AAA|FEATURE_EITHER_RESET,
		.write		= write_jedec,

 		.name		= "M29F040B",
 		.feature_bits	= FEATURE_ADDR_2AA|FEATURE_EITHER_RESET,
 		.write		= write_jedec_1,

(C) No comment
		/* FIXME: this has WORD/BYTE sequences; 2AA for word, 555 for byte */
 		.name		= "M29F400BT",
		.feature_bits	= FEATURE_ADDR_SHIFTED|FEATURE_EITHER_RESET,

(W) Is ADDR_2AA
 		.name		= "M29W010B" / "M29W040B"
 		.feature_bits	= FEATURE_EITHER_RESET,
                .write               = write_jedec,


[SyncMOS Section]
(C) Home run baby.
 		.name		= "S29C31004T" / "S29C51001T" / "S29C51002T" / "S29C51004T"
 		.feature_bits	= FEATURE_EITHER_RESET,
 		.write		= write_jedec_1,


[TI Section]
(W) Looks ADDR_2AA to me.
 		.name		= "TMS29F002RB" / "TMS29F002RT"
 		.feature_bits	= FEATURE_EITHER_RESET,


[Winbond Section]
(C) No remarks.
 		.name		= "W29C011" / "W29C020C" / "W29C040P" / "W29EE011"
 		.feature_bits	= FEATURE_LONG_RESET,
                .write               = write_jedec,

 		.name		= "W39V040A" / "W39V040B" / "W39V040C" / "W39V040FA"
					   "W39V080A" / "W49F002U" / "W49V002A" / "W49V002FA"
 		.feature_bits	= FEATURE_EITHER_RESET,
 		.write		= write_jedec_1,

(W) Is EITHER_RESET (ds page 11)
 		.name		= "W39V080FA" / "W39V080FA (dual mode)"
 		.feature_bits	= FEATURE_REGISTERMAP|FEATURE_LONG_RESET,


Have a nice day!
/Anders




More information about the flashrom mailing list