Commit c37cb56f authored by Kyungmin Park's avatar Kyungmin Park Committed by David Woodhouse

mtd: onenand: add workaround for SYNC_WRITE mode

Some chips fails to identify properly when SYNC_WRITE mode is enabled
(the example is OneNAND on S5PC110 SoC). This patch adds a workaround
for such chips.
Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
parent 3328dc31
...@@ -3763,6 +3763,12 @@ static int onenand_probe(struct mtd_info *mtd) ...@@ -3763,6 +3763,12 @@ static int onenand_probe(struct mtd_info *mtd)
/* Restore system configuration 1 */ /* Restore system configuration 1 */
this->write_word(syscfg, this->base + ONENAND_REG_SYS_CFG1); this->write_word(syscfg, this->base + ONENAND_REG_SYS_CFG1);
/* Workaround */
if (syscfg & ONENAND_SYS_CFG1_SYNC_WRITE) {
bram_maf_id = this->read_word(this->base + ONENAND_REG_MANUFACTURER_ID);
bram_dev_id = this->read_word(this->base + ONENAND_REG_DEVICE_ID);
}
/* Check manufacturer ID */ /* Check manufacturer ID */
if (onenand_check_maf(bram_maf_id)) if (onenand_check_maf(bram_maf_id))
return -ENXIO; return -ENXIO;
...@@ -3782,6 +3788,9 @@ static int onenand_probe(struct mtd_info *mtd) ...@@ -3782,6 +3788,9 @@ static int onenand_probe(struct mtd_info *mtd)
this->device_id = dev_id; this->device_id = dev_id;
this->version_id = ver_id; this->version_id = ver_id;
/* Check OneNAND features */
onenand_check_features(mtd);
density = onenand_get_density(dev_id); density = onenand_get_density(dev_id);
if (FLEXONENAND(this)) { if (FLEXONENAND(this)) {
this->dies = ONENAND_IS_DDP(this) ? 2 : 1; this->dies = ONENAND_IS_DDP(this) ? 2 : 1;
...@@ -3833,9 +3842,6 @@ static int onenand_probe(struct mtd_info *mtd) ...@@ -3833,9 +3842,6 @@ static int onenand_probe(struct mtd_info *mtd)
else else
mtd->size = this->chipsize; mtd->size = this->chipsize;
/* Check OneNAND features */
onenand_check_features(mtd);
/* /*
* We emulate the 4KiB page and 256KiB erase block size * We emulate the 4KiB page and 256KiB erase block size
* But oobsize is still 64 bytes. * But oobsize is still 64 bytes.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment