[flashrom] [PATCH] Fix probe_jedec() with continuation bytes, add EN29LV640T and get rid of probe_en29lv640b().
Stefan Tauner
stefan.tauner at alumni.tuwien.ac.at
Mon Aug 11 00:12:56 CEST 2014
We forgot to shift the addresses for continuation bytes in r1840.
Also, probe_en29lv640b() can easily be replaced with refined probe_jedec().
Furthermore, add EN29LV640T which is the top boot sector-variant of
EN29LV640B.
Signed-off-by: Stefan Tauner <stefan.tauner at alumni.tuwien.ac.at>
---
Rudolf, if you still have access to the bifferboard, I'd very welcome
testing this patch on it. This would verify the change we did in r1840
(+ its fix in this patch) + the refactoring as well.
I might look into the write function later too, but currently probing
functions are my main focus.
flashchips.c | 32 +++++++++++++++++++++++++++++++-
flashchips.h | 1 +
jedec.c | 4 ++--
3 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/flashchips.c b/flashchips.c
index 74b58ba..80fe1f5 100644
--- a/flashchips.c
+++ b/flashchips.c
@@ -4871,7 +4871,7 @@ const struct flashchip flashchips[] = {
.page_size = 8192,
.feature_bits = FEATURE_ADDR_SHIFTED,
.tested = TEST_OK_PREW,
- .probe = probe_en29lv640b,
+ .probe = probe_jedec,
.probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
.block_erasers =
{
@@ -4893,6 +4893,36 @@ const struct flashchip flashchips[] = {
{
.vendor = "Eon",
+ .name = "EN29LV640T",
+ .bustype = BUS_PARALLEL,
+ .manufacture_id = EON_ID,
+ .model_id = EON_EN29LV640T,
+ .total_size = 8192,
+ .page_size = 8192,
+ .feature_bits = FEATURE_ADDR_SHIFTED,
+ .tested = TEST_UNTESTED,
+ .probe = probe_jedec,
+ .probe_timing = TIMING_ZERO, /* Datasheet has no timing info specified */
+ .block_erasers =
+ {
+ {
+ .eraseblocks = {
+ {64 * 1024, 127},
+ {8 * 1024, 8},
+ },
+ .block_erase = erase_block_jedec,
+ }, {
+ .eraseblocks = { {8 * 1024 * 1024, 1} },
+ .block_erase = erase_chip_block_jedec,
+ },
+ },
+ .write = write_en29lv640b,
+ .read = read_memmapped,
+ .voltage = {2700, 3600},
+ },
+
+ {
+ .vendor = "Eon",
.name = "EN29GL064(A)B",
.bustype = BUS_PARALLEL,
.manufacture_id = EON_ID,
diff --git a/flashchips.h b/flashchips.h
index f0fbf4b..b2418bb 100644
--- a/flashchips.h
+++ b/flashchips.h
@@ -295,6 +295,7 @@
#define EON_EN29LV010 0x7F6E
#define EON_EN29LV040A 0x7F4F /* EN29LV040(A) */
#define EON_EN29LV640B 0xCB
+#define EON_EN29LV640T 0xC9
#define EON_EN29F002T 0x7F92 /* Same as EN29F002A */
#define EON_EN29F002B 0x7F97 /* Same as EN29F002AN */
#define EON_EN29GL064HL 0x7E0C01 /* Uniform Sectors, WP protects Top OR Bottom sector */
diff --git a/jedec.c b/jedec.c
index 358b850..dce110d 100644
--- a/jedec.c
+++ b/jedec.c
@@ -237,12 +237,12 @@ static int probe_jedec_common(struct flashctx *flash, unsigned int mask)
/* Check if it is a continuation ID, this should be a while loop. */
if (id1 == 0x7F) {
largeid1 <<= 8;
- id1 = chip_readb(flash, bios + 0x100);
+ id1 = chip_readb(flash, bios + (0x100 << shifted));
largeid1 |= id1;
}
if (id2 == 0x7F) {
largeid2 <<= 8;
- id2 = chip_readb(flash, bios + 0x101);
+ id2 = chip_readb(flash, bios + (0x101 << shifted));
largeid2 |= id2;
}
--
Kind regards, Stefan Tauner
More information about the flashrom
mailing list