mtd: OneNAND: Detect the correct NOP when 4KiB pagesize
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. Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
This commit is contained in:
Родитель
b2a5a4878e
Коммит
e1c10243df
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче