[MTD] [NOR] Read extended device ID from AMD/Spansion CFI flash chips

Linux-MTD Mailing List linux-mtd at lists.infradead.org
Tue Apr 22 16:59:01 EDT 2008


Gitweb:     http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=fecb8865def541ff38f59ef3caf0cbd09f4fc9fd
Commit:     fecb8865def541ff38f59ef3caf0cbd09f4fc9fd
Parent:     0ff6631be150702ed4c92b46b77941affee866ba
Author:     Trent Piepho <tpiepho at freescale.com>
AuthorDate: Sun Mar 30 21:19:29 2008 -0700
Committer:  David Woodhouse <dwmw2 at infradead.org>
CommitDate: Tue Apr 22 21:16:09 2008 +0100

    [MTD] [NOR] Read extended device ID from AMD/Spansion CFI flash chips
    
    AMD/Spansion use a device id of 0x7e to indicate an extended device is
    present at offset 0xe and 0xf in the query data.
    
    I've verified with Spansion that all their chips (mfr == 0x01) with an id
    of 0x7e use it to indicate an extended id is present.  What's more, there
    are no chips with a NON-extended id that is the same as a different chip's
    extended id.  In other words, when the extended ID is present, one can
    replace the normal id with the extended id without losing any information.
    Which is what I've done.
    
    Signed-off-by: Trent Piepho <tpiepho at freescale.com>
    Signed-off-by: David Woodhouse <dwmw2 at infradead.org>
---
 drivers/mtd/chips/cfi_probe.c |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/drivers/mtd/chips/cfi_probe.c b/drivers/mtd/chips/cfi_probe.c
index b03d43e..a4463a9 100644
--- a/drivers/mtd/chips/cfi_probe.c
+++ b/drivers/mtd/chips/cfi_probe.c
@@ -232,6 +232,11 @@ static int __xipram cfi_chip_setup(struct map_info *map,
 	cfi->mfr = cfi_read_query16(map, base);
 	cfi->id = cfi_read_query16(map, base + ofs_factor);
 
+	/* Get AMD/Spansion extended JEDEC ID */
+	if (cfi->mfr == CFI_MFR_AMD && (cfi->id & 0xff) == 0x7e)
+		cfi->id = cfi_read_query(map, base + 0xe * ofs_factor) << 8 |
+			  cfi_read_query(map, base + 0xf * ofs_factor);
+
 	/* Put it back into Read Mode */
 	cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL);
 	/* ... even if it's an Intel chip */



More information about the linux-mtd-cvs mailing list