s5pc100: OneNAND: Handle sync write support
authorKyungmin Park <kyungmin.park@samsung.com>
Thu, 11 Mar 2010 00:54:52 +0000 (09:54 +0900)
committerKyungmin Park <kyungmin.park@samsung.com>
Thu, 11 Mar 2010 00:54:52 +0000 (09:54 +0900)
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
drivers/mtd/onenand/onenand_base.c

index d45c78f..1bc9cbd 100644 (file)
@@ -2631,10 +2631,20 @@ static int onenand_probe(struct mtd_info *mtd)
        int bram_maf_id, bram_dev_id, maf_id, dev_id, ver_id;
        int density;
        int syscfg;
+#if defined(CONFIG_S5PC110) || defined(CONFIG_S5P6442)
+       int onenand_if_ctrl_cfg;
+#endif
 
        /* Save system configuration 1 */
        syscfg = this->read_word(this->base + ONENAND_REG_SYS_CFG1);
-#if !defined(CONFIG_S5PC110) && !defined(CONFIG_S5P6442)
+
+#if defined(CONFIG_S5PC110) || defined(CONFIG_S5P6442)
+       if (syscfg & ONENAND_SYS_CFG1_WM) {
+               this->write_word(syscfg & ~(ONENAND_SYS_CFG1_WM), this->base + ONENAND_REG_SYS_CFG1);
+               onenand_if_ctrl_cfg = readl(0xB0600100);
+               writel(onenand_if_ctrl_cfg & ~ONENAND_SYS_CFG1_WM, 0xB0600100);
+       }
+#else
        /* Clear Sync. Burst Read mode to read BootRAM */
        this->write_word((syscfg & ~ONENAND_SYS_CFG1_SYNC_READ), this->base + ONENAND_REG_SYS_CFG1);
 #endif
@@ -2655,6 +2665,11 @@ static int onenand_probe(struct mtd_info *mtd)
        /* Restore system configuration 1 */
        this->write_word(syscfg, this->base + ONENAND_REG_SYS_CFG1);
 
+#if defined(CONFIG_S5PC110) || defined(CONFIG_S5P6442)
+       if (syscfg & ONENAND_SYS_CFG1_WM)
+               writel(onenand_if_ctrl_cfg, 0xB0600100);
+#endif
+
        /* Check manufacturer ID */
        if (onenand_check_maf(bram_maf_id))
                return -ENXIO;