Chinaunix首页 | 论坛 | 博客
  • 博客访问: 71055
  • 博文数量: 25
  • 博客积分: 116
  • 博客等级: 民兵
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-26 11:31
文章分类
文章存档

2013年(1)

2012年(24)

我的朋友

分类:

2012-08-09 10:34:22

移植U-Boot-2010.03到友善之臂mini2440(五)

 

5.1在文件中添加“CONFIG_S3C2440,使得原来s3c2410的代码可以编译进来

1include/serial.h 40添加

#if defined(CONFIG_S3C2410)|| defined(CONFIG_S3C2440)

 

2include/asm/arch-s3c24x0/s3c24x0.h这是将原来的include/ s3c24x.h 移到include/asm/arch-s3c24x0/目录下,文件的第819195106144400行:

将“#ifdef CONFIG_S3C2410改为 #if defined(CONFIG_S3C2410) || defined (CONFIG_S3C2440)

顺便在其中加入2440 NAND FLASH 寄存器定义(第155行附近)和CAMDIVN定义(第124行附近):

   /* CLOCK & POWER MANAGEMENT (see S3C2400 manual chapter 6) */

/*                          (see S3C2410 manual chapter 7) */

struct s3c24x0_clock_power {

       u32  LOCKTIME;

       u32  MPLLCON;

       u32  UPLLCON;

       u32  CLKCON;

       u32  CLKSLOW;

       u32  CLKDIVN;

#if defined (CONFIG_S3C2440)

       u32  CAMDIVN;

#endif

};

 

#if defined(CONFIG_S3C2410)

/* NAND FLASH (see S3C2410 manual chapter 6) */

struct s3c2410_nand {

       u32  NFCONF;

       u32  NFCMD;

       u32  NFADDR;

       u32  NFDATA;

       u32  NFSTAT;

       u32  NFECC;};

#endif

#if defined (CONFIG_S3C2440)

/* NAND FLASH (see S3C2440 manual chapter 6) */

struct s3c2410_nand {

       u32  NFCONF;

       u32  NFCONT;

       u32  NFCMD;

       u32  NFADDR;

       u32  NFDATA;

       u32  NFMECCD0;

       u32  NFMECCD1;

       u32  NFSECCD;

       u32  NFSTAT;

       u32  NFESTAT0;

       u32  NFESTAT1;

       u32  NFMECC0;

       u32  NFMECC1;

       u32  NFSECC;

       u32  NFSBLK;

       u32  NFEBLK;

};

#endif

    

3include/asm/arch/s3c24x0_cpu.h,这个文件使添加对2440的支持的头文件的工作量少了很多。文件的第23

#if defined(CONFIG_S3C2400)

    #include 3c2400.h>

  #elif defined(CONFIG_S3C2410) || defined (CONFIG_S3C2440)

  #include 3c2410.h>

 

4cpu/arm920t/s3c24x0/timer.c文件的184行添加      defined(CONFIG_MINI2440) || \

 

5cpu/arm920t/s3c24x0/speed.c

由于S3C2410S3C2440MPLLUPLL计算公式不一样,所以get_PLLCLK函数也需要修改

     m = ((r & 0xFF000) >> 12) + 8;

     p = ((r & 0x003F0) >> 4) + 2;

     s = r & 0x3;

66行添加

#if defined(CONFIG_S3C2440)

   if (pllreg == MPLL)

   return ((CONFIG_SYS_CLK_FREQ * m * 2) /(p << s));

   else if (pllreg == UPLL)

#endif

return((CONFIG_SYS_CLK_FREQ * m ) / (p << s));

 

由于S3C2410S3C2440的设置方法也不一样,所以get_HCLK函数也需要修改

87/* return HCLK frequency */
ulong get_HCLK(void)
{
   S3C24X0_CLOCK_POWER *
const clk_power = S3C24X0_GetBase_CLOCK_POWER();
//     return (readl(&clk_power->CLKDIVN) & 2) ? get_FCLK() / 2 : get_FCLK();

#if defined(CONFIG_S3C2440)

  if (readl(&clk_power->CLKDIVN) & 0x6)

                       {

                       if ((readl(&clk_power->CLKDIVN) & 0x6)==2) return(get_FCLK()/2);

                           if ((readl(&clk_power->CLKDIVN) & 0x6)==6) return((readl(&clk_power->CAMDIVN) & 0x100) ? get_FCLK()/6 : get_FCLK()/3);

                      if ((readl(&clk_power->CLKDIVN) & 0x6)==4) return((readl(&clk_power->CAMDIVN) & 0x200) ? get_FCLK()/8 : get_FCLK()/4);

                       return(get_FCLK());

                       }

  else return(get_FCLK());

#else

  return((readl(&clk_power->CLKDIVN) & 0x2) ? get_FCLK()/2 : get_FCLK());

#endif

 

}

 

7)修改drivers/i2c/s3c24x0_i2c.c文件,其原来的位置/cpu/arm920t/s3c24x0/i2c.c

 

6079131140166

“#ifdef CONFIG_S3C2410”改为 #if defined(CONFIG_S3C2410) || defined (CONFIG_S3C2440)

8)修改common/serial.c文件62#elif defined(CONFIG_S3C2410) 改为#elif defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)

151    改为#if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)

阅读(735) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~