* [PATCH 3/3] [MTD] m25p80.c
2008-06-20 11:04 ` [PATCH 2/3] [MTD] m25p80.c code cleanup Chen Gong
@ 2008-06-20 11:04 ` Chen Gong
0 siblings, 0 replies; 5+ messages in thread
From: Chen Gong @ 2008-06-20 11:04 UTC (permalink / raw)
To: linux-mtd; +Cc: Chen Gong, dwmw2
Signed-off-by: Chen Gong <g.chen@freescale.com>
---
drivers/mtd/devices/m25p80.c | 86 +++++++++++++++++++++++-------------------
1 files changed, 47 insertions(+), 39 deletions(-)
diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c
index aae0d80..3855076 100644
--- a/drivers/mtd/devices/m25p80.c
+++ b/drivers/mtd/devices/m25p80.c
@@ -457,6 +457,7 @@ struct flash_info {
* then a two byte device id.
*/
u32 jedec_id;
+ u16 ext_id;
/* The size listed here is what works with OPCODE_SE, which isn't
* necessarily called a "sector" by the vendor.
@@ -476,57 +477,59 @@ struct flash_info {
static struct flash_info __devinitdata m25p_data [] = {
/* Atmel -- some are (confusingly) marketed as "DataFlash" */
- { "at25fs010", 0x1f6601, 32 * 1024, 4, SECT_4K, },
- { "at25fs040", 0x1f6604, 64 * 1024, 8, SECT_4K, },
+ { "at25fs010", 0x1f6601, 0, 32 * 1024, 4, SECT_4K, },
+ { "at25fs040", 0x1f6604, 0, 64 * 1024, 8, SECT_4K, },
- { "at25df041a", 0x1f4401, 64 * 1024, 8, SECT_4K, },
- { "at25df641", 0x1f4800, 64 * 1024, 128, SECT_4K, },
+ { "at25df041a", 0x1f4401, 0, 64 * 1024, 8, SECT_4K, },
+ { "at25df641", 0x1f4800, 0, 64 * 1024, 128, SECT_4K, },
- { "at26f004", 0x1f0400, 64 * 1024, 8, SECT_4K, },
- { "at26df081a", 0x1f4501, 64 * 1024, 16, SECT_4K, },
- { "at26df161a", 0x1f4601, 64 * 1024, 32, SECT_4K, },
- { "at26df321", 0x1f4701, 64 * 1024, 64, SECT_4K, },
+ { "at26f004", 0x1f0400, 0, 64 * 1024, 8, SECT_4K, },
+ { "at26df081a", 0x1f4501, 0, 64 * 1024, 16, SECT_4K, },
+ { "at26df161a", 0x1f4601, 0, 64 * 1024, 32, SECT_4K, },
+ { "at26df321", 0x1f4701, 0, 64 * 1024, 64, SECT_4K, },
/* Spansion -- single (large) sector size only, at least
* for the chips listed here (without boot sectors).
*/
- { "s25sl004a", 0x010212, 64 * 1024, 8, },
- { "s25sl008a", 0x010213, 64 * 1024, 16, },
- { "s25sl016a", 0x010214, 64 * 1024, 32, },
- { "s25sl032a", 0x010215, 64 * 1024, 64, },
- { "s25sl064a", 0x010216, 64 * 1024, 128, },
+ { "s25sl004a", 0x010212, 0, 64 * 1024, 8, },
+ { "s25sl008a", 0x010213, 0, 64 * 1024, 16, },
+ { "s25sl016a", 0x010214, 0, 64 * 1024, 32, },
+ { "s25sl032a", 0x010215, 0, 64 * 1024, 64, },
+ { "s25sl064a", 0x010216, 0, 64 * 1024, 128, },
+ { "s25sl12800", 0x012018, 0x0300, 256 * 1024, 64, },
+ { "s25sl12801", 0x012018, 0x0301, 64 * 1024, 256, },
/* SST -- large erase sizes are "overlays", "sectors" are 4K */
- { "sst25vf040b", 0xbf258d, 64 * 1024, 8, SECT_4K, },
- { "sst25vf080b", 0xbf258e, 64 * 1024, 16, SECT_4K, },
- { "sst25vf016b", 0xbf2541, 64 * 1024, 32, SECT_4K, },
- { "sst25vf032b", 0xbf254a, 64 * 1024, 64, SECT_4K, },
+ { "sst25vf040b", 0xbf258d, 0, 64 * 1024, 8, SECT_4K, },
+ { "sst25vf080b", 0xbf258e, 0, 64 * 1024, 16, SECT_4K, },
+ { "sst25vf016b", 0xbf2541, 0, 64 * 1024, 32, SECT_4K, },
+ { "sst25vf032b", 0xbf254a, 0, 64 * 1024, 64, SECT_4K, },
/* ST Microelectronics -- newer production may have feature updates */
- { "m25p05", 0x202010, 32 * 1024, 2, },
- { "m25p10", 0x202011, 32 * 1024, 4, },
- { "m25p20", 0x202012, 64 * 1024, 4, },
- { "m25p40", 0x202013, 64 * 1024, 8, },
- { "m25p80", 0, 64 * 1024, 16, },
- { "m25p16", 0x202015, 64 * 1024, 32, },
- { "m25p32", 0x202016, 64 * 1024, 64, },
- { "m25p64", 0x202017, 64 * 1024, 128, },
- { "m25p128", 0x202018, 256 * 1024, 64, },
-
- { "m45pe80", 0x204014, 64 * 1024, 16, },
- { "m45pe16", 0x204015, 64 * 1024, 32, },
-
- { "m25pe80", 0x208014, 64 * 1024, 16, },
- { "m25pe16", 0x208015, 64 * 1024, 32, SECT_4K, },
+ { "m25p05", 0x202010, 0, 32 * 1024, 2, },
+ { "m25p10", 0x202011, 0, 32 * 1024, 4, },
+ { "m25p20", 0x202012, 0, 64 * 1024, 4, },
+ { "m25p40", 0x202013, 0, 64 * 1024, 8, },
+ { "m25p80", 0, 0, 64 * 1024, 16, },
+ { "m25p16", 0x202015, 0, 64 * 1024, 32, },
+ { "m25p32", 0x202016, 0, 64 * 1024, 64, },
+ { "m25p64", 0x202017, 0, 64 * 1024, 128, },
+ { "m25p128", 0x202018, 0, 256 * 1024, 64, },
+
+ { "m45pe80", 0x204014, 0, 64 * 1024, 16, },
+ { "m45pe16", 0x204015, 0, 64 * 1024, 32, },
+
+ { "m25pe80", 0x208014, 0, 64 * 1024, 16, },
+ { "m25pe16", 0x208015, 0, 64 * 1024, 32, SECT_4K, },
/* Winbond -- w25x "blocks" are 64K, "sectors" are 4KiB */
- { "w25x10", 0xef3011, 64 * 1024, 2, SECT_4K, },
- { "w25x20", 0xef3012, 64 * 1024, 4, SECT_4K, },
- { "w25x40", 0xef3013, 64 * 1024, 8, SECT_4K, },
- { "w25x80", 0xef3014, 64 * 1024, 16, SECT_4K, },
- { "w25x16", 0xef3015, 64 * 1024, 32, SECT_4K, },
- { "w25x32", 0xef3016, 64 * 1024, 64, SECT_4K, },
- { "w25x64", 0xef3017, 64 * 1024, 128, SECT_4K, },
+ { "w25x10", 0xef3011, 0, 64 * 1024, 2, SECT_4K, },
+ { "w25x20", 0xef3012, 0, 64 * 1024, 4, SECT_4K, },
+ { "w25x40", 0xef3013, 0, 64 * 1024, 8, SECT_4K, },
+ { "w25x80", 0xef3014, 0, 64 * 1024, 16, SECT_4K, },
+ { "w25x16", 0xef3015, 0, 64 * 1024, 32, SECT_4K, },
+ { "w25x32", 0xef3016, 0, 64 * 1024, 64, SECT_4K, },
+ { "w25x64", 0xef3017, 0, 64 * 1024, 128, SECT_4K, },
};
static struct flash_info *__devinit jedec_probe(struct spi_device *spi)
@@ -535,6 +538,7 @@ static struct flash_info *__devinit jedec_probe(struct spi_device *spi)
u8 code = OPCODE_RDID;
u8 id[3];
u32 jedec;
+ u16 ext_jedec;
struct flash_info *info;
/* JEDEC also defines an optional "extended device information"
@@ -553,10 +557,14 @@ static struct flash_info *__devinit jedec_probe(struct spi_device *spi)
jedec = jedec << 8;
jedec |= id[2];
+ ext_jedec = id[3] << 8 | id[4];
+
for (tmp = 0, info = m25p_data;
tmp < ARRAY_SIZE(m25p_data);
tmp++, info++) {
if (info->jedec_id == jedec)
+ if (ext_jedec != 0 && info->ext_id != ext_jedec)
+ continue;
return info;
}
dev_err(&spi->dev, "unrecognized JEDEC id %06x\n", jedec);
--
1.5.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH RESEND 0/4] m25p80 enhance patches
@ 2008-08-07 3:41 Chen Gong
[not found] ` <1218080495-2653-2-git-send-email-g.chen@freescale.com>
0 siblings, 1 reply; 5+ messages in thread
From: Chen Gong @ 2008-08-07 3:41 UTC (permalink / raw)
To: linux-mtd; +Cc: dwmw2
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 3/3] [MTD] m25p80.c
[not found] ` <1218080495-2653-4-git-send-email-g.chen@freescale.com>
@ 2008-08-07 13:31 ` David Woodhouse
2008-09-15 7:06 ` David Woodhouse
1 sibling, 0 replies; 5+ messages in thread
From: David Woodhouse @ 2008-08-07 13:31 UTC (permalink / raw)
To: Chen Gong; +Cc: linux-mtd
On Thu, 2008-08-07 at 11:41 +0800, Chen Gong wrote:
> Signed-off-by: Chen Gong <g.chen@freescale.com>
Changelog entry for this one?
--
dwmw2
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 3/3] [MTD] m25p80.c
[not found] ` <1218080495-2653-4-git-send-email-g.chen@freescale.com>
2008-08-07 13:31 ` [PATCH 3/3] [MTD] m25p80.c David Woodhouse
@ 2008-09-15 7:06 ` David Woodhouse
2008-09-16 3:50 ` chen gong
1 sibling, 1 reply; 5+ messages in thread
From: David Woodhouse @ 2008-09-15 7:06 UTC (permalink / raw)
To: Chen Gong; +Cc: linux-mtd, viro
On Thu, 2008-08-07 at 11:41 +0800, Chen Gong wrote:
> @@ -547,6 +550,7 @@ static struct flash_info *__devinit jedec_probe(struct spi_device *spi)
> u8 code = OPCODE_RDID;
> u8 id[3];
> u32 jedec;
> + u16 ext_jedec;
> struct flash_info *info;
>
> /* JEDEC also defines an optional "extended device information"
* string for after vendor-specific data, after the three bytes
* we use here. Supporting some chips might require using it.
*/
tmp = spi_write_then_read(spi, &code, 1, id, 3);
if (tmp < 0) {
DEBUG(MTD_DEBUG_LEVEL0, "%s: error %d reading JEDEC ID\n",
spi->dev.bus_id, tmp);
return NULL;
}
jedec = id[0];
jedec = jedec << 8;
jedec |= id[1];
> jedec = jedec << 8;
> jedec |= id[2];
>
> + ext_jedec = id[3] << 8 | id[4];
> +
You're trying to read off the end of the id[] array, which has only
three elements. And you didn't ask spi_write_then_read() to read that
many bytes _anyway_. And if you did... would it fail on chips which
don't have the extended device information?
Please test and send a fix, since this is already in the git tree.
--
David Woodhouse Open Source Technology Centre
David.Woodhouse@intel.com Intel Corporation
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 3/3] [MTD] m25p80.c
2008-09-15 7:06 ` David Woodhouse
@ 2008-09-16 3:50 ` chen gong
0 siblings, 0 replies; 5+ messages in thread
From: chen gong @ 2008-09-16 3:50 UTC (permalink / raw)
To: David Woodhouse; +Cc: linux-mtd, viro
2008/9/15 David Woodhouse <dwmw2@infradead.org>:
> On Thu, 2008-08-07 at 11:41 +0800, Chen Gong wrote:
>> @@ -547,6 +550,7 @@ static struct flash_info *__devinit jedec_probe(struct spi_device *spi)
>> u8 code = OPCODE_RDID;
>> u8 id[3];
>> u32 jedec;
>> + u16 ext_jedec;
>> struct flash_info *info;
>>
>> /* JEDEC also defines an optional "extended device information"
> * string for after vendor-specific data, after the three bytes
> * we use here. Supporting some chips might require using it.
> */
> tmp = spi_write_then_read(spi, &code, 1, id, 3);
> if (tmp < 0) {
> DEBUG(MTD_DEBUG_LEVEL0, "%s: error %d reading JEDEC ID\n",
> spi->dev.bus_id, tmp);
> return NULL;
> }
> jedec = id[0];
> jedec = jedec << 8;
> jedec |= id[1];
>> jedec = jedec << 8;
>> jedec |= id[2];
>>
>> + ext_jedec = id[3] << 8 | id[4];
>> +
>
> You're trying to read off the end of the id[] array, which has only
> three elements. And you didn't ask spi_write_then_read() to read that
> many bytes _anyway_. And if you did... would it fail on chips which
> don't have the extended device information?
>
Sorry for late. Last day is Mid-autumn Festival in our Country. We have a
nice holiday.
It is a stupid error that I forget to fix it from my branch. I will
send a new patch
to fix it soon.
> Please test and send a fix, since this is already in the git tree.
>
> --
> David Woodhouse Open Source Technology Centre
> David.Woodhouse@intel.com Intel Corporation
>
>
> ______________________________________________________
> Linux MTD discussion mailing list
> http://lists.infradead.org/mailman/listinfo/linux-mtd/
>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-09-16 4:50 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-07 3:41 [PATCH RESEND 0/4] m25p80 enhance patches Chen Gong
[not found] ` <1218080495-2653-2-git-send-email-g.chen@freescale.com>
[not found] ` <1218080495-2653-3-git-send-email-g.chen@freescale.com>
[not found] ` <1218080495-2653-4-git-send-email-g.chen@freescale.com>
2008-08-07 13:31 ` [PATCH 3/3] [MTD] m25p80.c David Woodhouse
2008-09-15 7:06 ` David Woodhouse
2008-09-16 3:50 ` chen gong
-- strict thread matches above, loose matches on Subject: below --
2008-06-20 11:04 [PATCH 1/3] [MTD] m25p80.c add a erase_block command to enhance erase operation Chen Gong
2008-06-20 11:04 ` [PATCH 2/3] [MTD] m25p80.c code cleanup Chen Gong
2008-06-20 11:04 ` [PATCH 3/3] [MTD] m25p80.c Chen Gong
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox