Skip to content
Snippets Groups Projects
omap_gpmc.c 29 KiB
Newer Older
  • Learn to ignore specific revisions
  • Dirk Behme's avatar
    Dirk Behme committed
    		return -ENODEV;
    	}
    
    
    	gpmc_config = readl(&gpmc_cfg->config);
    
    Dirk Behme's avatar
    Dirk Behme committed
    	/* Disable Write protect */
    	gpmc_config |= 0x10;
    
    	writel(gpmc_config, &gpmc_cfg->config);
    
    	nand->IO_ADDR_R = (void __iomem *)&gpmc_cfg->cs[cs].nand_dat;
    	nand->IO_ADDR_W = (void __iomem *)&gpmc_cfg->cs[cs].nand_cmd;
    
    	nand->priv	= &bch_priv;
    	nand->cmd_ctrl	= omap_nand_hwcontrol;
    	nand->options	|= NAND_NO_PADDING | NAND_CACHEPRG;
    
    Dirk Behme's avatar
    Dirk Behme committed
    	/* If we are 16 bit dev, our gpmc config tells us that */
    
    	if ((readl(&gpmc_cfg->cs[cs].config1) & 0x3000) == 0x1000)
    
    Dirk Behme's avatar
    Dirk Behme committed
    		nand->options |= NAND_BUSWIDTH_16;
    
    	nand->chip_delay = 100;
    
    	nand->ecc.layout = &omap_ecclayout;
    
    	/* select ECC scheme */
    
    #if defined(CONFIG_NAND_OMAP_ECCSCHEME)
    	err = omap_select_ecc_scheme(nand, CONFIG_NAND_OMAP_ECCSCHEME,
    
    			CONFIG_SYS_NAND_PAGE_SIZE, CONFIG_SYS_NAND_OOBSIZE);
    
    #else
    	/* pagesize and oobsize are not required to configure sw ecc-scheme */
    
    	err = omap_select_ecc_scheme(nand, OMAP_ECC_HAM1_CODE_SW,
    			0, 0);
    
    #ifdef CONFIG_SPL_BUILD
    
    	if (nand->options & NAND_BUSWIDTH_16)
    		nand->read_buf = nand_read_buf16;
    	else
    		nand->read_buf = nand_read_buf;
    	nand->dev_ready = omap_spl_dev_ready;
    #endif
    
    Dirk Behme's avatar
    Dirk Behme committed
    
    	return 0;
    }