mtd: OneNAND: Detect the correct NOP when 4KiB pagesize
Subsystems (3)
PATCH v2 1/1 mtd: OneNAND: Detect the correct NOP when 4KiB pagesize
From: Kyungmin Park <[email protected]>
There are two different 4KiB pagesize chips KFM4G16Q4M series have NOP 4 with version ID 0x0131 But KFM4G16Q5M has NOP 1 with versoin ID 0x013e
Note that Q5M means that it has NOP 1.
---
drivers/mtd/onenand/onenand_base.c +15 -0
@@ -3429,6 +3429,19 @@ static void onenand_check_features(struct mtd_info *mtd)else if (numbufs ==1 ) { this->options |=ONENAND_HAS_4KB_PAGE ; this->options |=ONENAND_HAS_CACHE_PROGRAM ; +/* +* There are two different 4KiB pagesize chips +* and no way to detect it by H/W config values. +* +* To detect the correct NOP for each chips, +* It should check the version ID as workaround. +* +* Now it has as following +* KFM4G16Q4M has NOP 4 with version ID 0x0131 +* KFM4G16Q5M has NOP 1 with versoin ID 0x013e +*/ +if ((this->version_id &0xf ) ==0xe ) + this->options |=ONENAND_HAS_NOP_1 ; }case ONENAND_DEVICE_DENSITY_2Gb:
@@ -4054,6 +4067,8 @@ int onenand_scan(struct mtd_info *mtd, int maxchips) this->ecclayout = &onenand_oob_128; mtd->subpage_sft =2 ; } +if (ONENAND_IS_NOP_1 (this)) + mtd->subpage_sft =0 ;break ;case 64 : this->ecclayout = &onenand_oob_64;
include/linux/mtd/onenand.h +4 -0
@@ -184,6 +184,9 @@ struct onenand_chip {#define ONENAND_IS_CACHE_PROGRAM (this) \ (this->options & ONENAND_HAS_CACHE_PROGRAM) +#define ONENAND_IS_NOP_1 (this) \ + (this->options & ONENAND_HAS_NOP_1) +/* Check byte access in OneNAND */ #define ONENAND_CHECK_BYTE_ACCESS (addr) (addr & 0x1)
@@ -195,6 +198,7 @@ struct onenand_chip {#define ONENAND_HAS_2PLANE (0x0004)#define ONENAND_HAS_4KB_PAGE (0x0008)#define ONENAND_HAS_CACHE_PROGRAM (0x0010) +#define ONENAND_HAS_NOP_1 (0x0020)#define ONENAND_SKIP_UNLOCK_CHECK (0x0100)#define ONENAND_PAGEBUF_ALLOC (0x1000)#define ONENAND_OOBBUF_ALLOC (0x2000)
Artem Bityutskiy
AppliedQuoted 9 lines · Kyungmin Park
From: Kyungmin Park <[email protected]>
There are two different 4KiB pagesize chips KFM4G16Q4M series have NOP 4 with version ID
0x0131But KFM4G16Q5M has NOP 1 with versoin ID0x013eNote that Q5M means that it has NOP 1.
Signed-off-by Kyungmin Park <[email protected]>
Pushed to l2-mtd-2.6.git, thanks.
Signature · 2 lines
Best Regards, Artem Bityutskiy (Битюцкий Артём)
Quoted 7 lines · Artem Bityutskiy
Quoted 6 lines · Kyungmin Park
From: Kyungmin Park <[email protected]>
There are two different 4KiB pagesize chips KFM4G16Q4M series have NOP 4 with version ID
0x0131But KFM4G16Q5M has NOP 1 with versoin ID0x013e
Quoted 5 lines
Quoted 3 lines
Note that Q5M means that it has NOP 1.
Signed-off-by Kyungmin Park <[email protected]>Pushed to l2-mtd-2.6.git, thanks.
Hi Artem,
It's required for s5pc110 series and supported at previous kernel, I mean it's bug fixed.
So please merge it 3.0-rc periods
Thank you,
Kyungmin Park
Quoted 6 lines
--
Best Regards,
Artem Bityutskiy (Битюцкий Артём)
Quoted 12 lines · Kyungmin Park
Quoted 11 lines · Artem Bityutskiy
Quoted 9 lines · Kyungmin Park
From: Kyungmin Park <[email protected]>
There are two different 4KiB pagesize chips KFM4G16Q4M series have NOP 4 with version ID
0x0131But KFM4G16Q5M has NOP 1 with versoin ID0x013eNote that Q5M means that it has NOP 1.
Signed-off-by Kyungmin Park <[email protected]>
Quoted 7 lines
Quoted 1 line
Pushed to l2-mtd-2.6.git, thanks.
Hi Artem,
It's required for s5pc110 series and supported at previous kernel, I mean it's bug fixed.
So please merge it 3.0-rc periods
Only dwmw2 does this, so please, ask him.
Signature · 2 lines
Best Regards, Artem Bityutskiy (Битюцкий Артём)