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: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
committed by
David Woodhouse
parent
3328dc3159
commit
c37cb56fb1
@@ -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)
|
|||||||
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)
|
|||||||
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.
|
||||||
|
Reference in New Issue
Block a user