[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