[PATCH] mtd: nand: Fix Spansion sparearea size detection
Nikolay Martynov
mar.kolya at gmail.com
Mon Nov 30 18:59:32 EST 2015
Hi.
Thanks for your response!
I'm sorry, I only have board with S34ML02G2 and I've tested by
change on it - it works fine. But unfortunately I do not have any way
to test S34ML01G2.
It looks like that logic can be simplified if just check id_data[1]
is one of 0xda, 0xdc, 0xca, 0xcc - this should be safer option.
I'm sorry, I'm very new to all this. This patch made kernel boot on
a board that I have. The kernel was 'oldish' - 3.18. So I'm not sure
why ONFI is not used here, I will see if I can figure it out.
Thanks!
2015-11-30 15:35 GMT-05:00 Brian Norris <computersforpeace at gmail.com>:
> Hi Nikolay,
>
> On Thu, Nov 26, 2015 at 01:25:22AM -0500, Nikolay Martynov wrote:
>> According to datasheet S34ML02G2 and S34ML04G2 have
>> larger sparea area size than was detected.
>>
>> Signed-off-by: Nikolay Martynov <mar.kolya at gmail.com>
>> ---
>> drivers/mtd/nand/nand_base.c | 9 +++++++++
>> 1 file changed, 9 insertions(+)
>>
>> diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
>> index ceb68ca..2c01f9e 100644
>> --- a/drivers/mtd/nand/nand_base.c
>> +++ b/drivers/mtd/nand/nand_base.c
>> @@ -3415,6 +3415,7 @@ static void nand_decode_ext_id(struct mtd_info *mtd, struct nand_chip *chip,
>> /*
>> * Field definitions are in the following datasheets:
>> * Old style (4,5 byte ID): Samsung K9GAG08U0M (p.32)
>> + * Spansion S34ML02G2 (p.33)
>> * New Samsung (6 byte ID): Samsung K9GAG08U0F (p.44)
>> * Hynix MLC (6 byte ID): Hynix H27UBG8T2B (p.22)
>> *
>> @@ -3512,6 +3513,14 @@ static void nand_decode_ext_id(struct mtd_info *mtd, struct nand_chip *chip,
>> *busw = (extid & 0x01) ? NAND_BUSWIDTH_16 : 0;
>>
>> /*
>> + * Spansion S34ML0[24]G2 have oobsize twice as large
>> + * as S34ML01G2 encoded in the same bit. We
>> + * differentiate them by their ID length
>
> Hmm, are you sure the ID length heuristic works correctly for these
> particular flash? i.e., did you actually test both of these flash?
> Sometimes it's hard to tell if a device has a 4-byte or 5-byte ID just
> from reading out bytes, since a "4-byte ID" NAND may just have a "don't
> care" byte for the 5th one, and so we might still compute id_len == 5.
>
> Also, why do you even need nand_decode_ext_id() for these flash?
> According to the datasheet, these flash support ONFI.
>
> Brian
>
>> + */
>> + if (id_len == 5 && id_data[0] == NAND_MFR_AMD)
>> + mtd->oobsize *= 2;
>> +
>> + /*
>> * Toshiba 24nm raw SLC (i.e., not BENAND) have 32B OOB per
>> * 512B page. For Toshiba SLC, we decode the 5th/6th byte as
>> * follows:
>> --
>> 2.6.3
>>
--
Martynov Nikolay.
Email: mar.kolya at gmail.com
More information about the linux-mtd
mailing list