注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小白的博客

嵌入式爱好者

 
 
 

日志

 
 

u-boot-2012.04.01移植笔记——支持NAND启动(二)  

2012-08-13 01:29:29|  分类: 韦东山视频第二轮 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1、在include/configs/smdk2440.h文件里将:
//#define CONFIG_CMD_NAND
注释拿掉:
#define CONFIG_CMD_NAND

2、把drivers\mtd\nand\s3c2410_nand.c复制为s3c2440_nand.c
并且把那个目录下的Makefile文件中的:
COBJS-$(CONFIG_NAND_S3C2410) += s3c2410_nand.o
修改为:
COBJS-$(CONFIG_NAND_S3C2410) += s3c2410_nand.o
COBJS-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o

并且在在include/configs/smdk2440.h文件里将:

#ifdef CONFIG_CMD_NAND
#define CONFIG_NAND_S3C2410
#define CONFIG_SYS_S3C2410_NAND_HWECC

进行如下扩展:

#ifdef CONFIG_CMD_NAND
ifdef CONFIG_NAND_2410
#define CONFIG_NAND_S3C2410
#define CONFIG_SYS_S3C2410_NAND_HWECC
#else
#define CONFIG_NAND_S3C2440
#define CONFIG_SYS_S3C2440_NAND_HWECC
#endif

3、在drivers/mtd/nand/s3c2440_nand.c文件的board_nand_init里进行如下修改:
(1)tacls = 4;
         twrph0 = 8;
        twrph1 = 8;
修改为:
       tacls = 0;
      twrph0 = 1;
      twrph1 = 0;
(2)将:
cfg = S3C2410_NFCONF_EN;
cfg |= S3C2410_NFCONF_TACLS(tacls - 1);
cfg |= S3C2410_NFCONF_TWRPH0(twrph0 - 1);
cfg |= S3C2410_NFCONF_TWRPH1(twrph1 - 1);

修改为:
 cfg = (tacls<<12) | (twrph0<<8) | (twrph1<<4) ;
 writel((1<<4) | (1<<1) | (1<<0), &nand_reg->nfcont);
(3)
将:struct s3c2410_nand *nand_reg = s3c2410_get_base_nand();

修改为:struct s3c2440_nand *nand_reg = s3c2440_get_base_nand();

(4)将:
nand->select_chip = NULL;
修改为:
nand->select_chip = s3c2440_nand_select;
并且提供函数:s3c2440_nand_select

static void s3c2440_nand_select(struct mtd_info *mtd, int chipnr)
{
struct s3c2440_nand *nand = s3c2440_get_base_nand();

switch (chipnr) {
case -1:
nand->nfcont |= (1<<1);
break;
case 0:
              nand->nfcont &= ~(1<<1);
break;

default:
BUG();
}
}

4、在drivers/mtd/nand/s3c2440_nand.c文件文件里面
      将所有的:s3c2410_hwcontrol
      改为:s3c2440_hwcontrol
     
      将所有的:s3c2410_dev_ready
      修改为:s3c2440_dev_ready

      将所有的:s3c2410_nand
      修改为:s3c2440_nand
    
      将所有的:s3c2410_get_base_nand
      修改为:s3c2440_get_base_nand

5、在drivers/mtd/nand/s3c2440_nand.c文件文件的s3c2440_hwcontrol函数里面进行如下修改
(1)将:
if (ctrl & NAND_NCE)
writel(readl(&nand->nfconf) & ~S3C2410_NFCONF_nFCE,
      &nand->nfconf);
else
writel(readl(&nand->nfconf) | S3C2410_NFCONF_nFCE,
      &nand->nfconf);
修改为:
if (ctrl & NAND_NCE)
writel(readl(&nand->nfcont) & ~(1<<1),
      &nand->nfcont);
else
writel(readl(&nand->nfcont) | (1<<1),
      &nand->nfcont);

(2)将:
struct s3c2410_nand *nand = s3c2410_get_base_nand();
修改为:
struct s3c2440_nand *nand = s3c2440_get_base_nand();

6、将drivers/mtd/nand/s3c2440_nand.c文件的s3c2440_hwcontrol函数修改成下面这个样子:
static void s3c2440_hwcontrol(struct mtd_info *mtd, int dat, unsigned int ctrl)
{
struct nand_chip *chip = mtd->priv;
struct s3c2440_nand *nand = s3c2440_get_base_nand();

        if(ctrl & NAND_CLE)
            {
                writeb(dat , &nand->nfcmd);
            }
        else(ctrl & NAND_ALE)
            {
                writeb(dat , &nand->nfaddr);
            }
}
  评论这张
 
阅读(1114)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017