Skip to contentSkip to conversation

mtd: OneNAND: Detect the correct NOP when 4KiB pagesize

PATCH Applied Kyungmin Park 2 participants 4 messages Jun 22, 2011 – Jun 24, 2011

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

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
index ac9e959..51800a7 100644
@@ -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
index 52b6f18..4596503 100644
@@ -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)
#1 lore raw
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 0x0131 But KFM4G16Q5M has NOP 1 with versoin ID 0x013e

Note that Q5M means that it has NOP 1.

Pushed to l2-mtd-2.6.git, thanks.

Signature · 2 lines
Best Regards,
Artem Bityutskiy (Битюцкий Артём)
#2 lore raw
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 0x0131 But KFM4G16Q5M has NOP 1 with versoin ID 0x013e

Quoted 5 lines
Quoted 3 lines

Note that Q5M means that it has NOP 1.

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 (Битюцкий Артём)

#3 lore raw
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 0x0131 But KFM4G16Q5M has NOP 1 with versoin ID 0x013e

Note that Q5M means that it has NOP 1.

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 (Битюцкий Артём)