fl2440 移植u-boot-2010.09全纪录2-----------串口打印启动信息

一,修改文件arch/arm/cpu/arm920t/start.S

1,将117,118两行注释掉,这个是用于LED跳转的,没什么用,也没有程序可跳

@   bl  coloured_LED_init

@   bl  red_LED_on

2, 135-170 行注释掉,这个代码是定义特殊寄存器和屏蔽中断的,我们将在后面的程序中统一操作,让代码不至于很凌乱

 

#if 0 /*We init S3C24XX in board/fl2440/lowlevel_init.S, which called by cpu_init_crit */

跳转到lowlevel_init,修改

3,关闭看门狗

    /****** Disable Watchdog ******/

    ldr r0, =S3C24X0_WATCHDOG_BASE

    mov r1, #0

str r1, [r0]

4, 屏蔽所有中断

    /****** Disable interrupt by mask all IRQ mask ******/

    ldr r0, =S3C24X0_INTERRUPT_BASE

    mvn r1, #0x0

    str r1, [r0, #INTMSK_OFFSET]

str r1, [r0, #INTSUBMSK_OFFSET]

5, 初始化系统时钟,总线时钟

    /****** Initialize System Clock, FCLK:HCLK:PCLK = 1:4:8,default FCLK is 120MHz ******/

    ldr r0, =S3C24X0_CLOCK_POWER_BASE

    mov r1, #5

    str r1, [r0, #CLKDIVN_OFFSET]

 

    mrc p15, 0, r1, c1, c0, 0

    orr r1, r1, #0xc0000000

    mcr p15, 0, r1, c1, c0, 0

 

    mov r2, #MDIV_405

    add r2, r2, #PSDIV_405

str r2, [r0, #MPLLCON_OFFSET]

二,在board/fl2440/lowlevel_init.S 130行左右,添加以下寄存器定义
#define S3C24X0_INTERRUPT_BASE      0x4A000000
#define S3C24X0_CLOCK_POWER_BASE    0x4C000000
#define S3C2410_NAND_BASE           0x4E000000
#define S3C24X0_WATCHDOG_BASE       0x53000000
#define S3C24X0_GPIO_BASE           0x56000000
#define GPBCON                      0x56000010
#define GPBDAT                      0x56000014
#define GPBUP                       0x56000018

#define INTMSK_OFFSET               0x08
#define INTSUBMSK_OFFSET            0x1c
#define MPLLCON_OFFSET              0x04
#define CLKDIVN_OFFSET              0x14
#define NFCONF_OFFSET               0x00
#define NFCONT_OFFSET               0x04
#define NFCMD_OFFSET                0x08
#define NFSTAT_OFFSET               0x20

#define MDIV_405                    0x7f << 12
#define PSDIV_405                   0x21
#define MDIV_200                    0xa1 << 12
#define PSDIV_200                   0x31

三,修改include/asm/arch-s3c24x0/s3c24x0.h

将该文件中的#if defined(CONFIG_S3C2410)

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

支持s3c2440开发板

并在其中加入S3C2440NAND FLASH寄存器定义和CAMDIVN定义

160行左右修改nandflash的寄存器定义,修改s3c2410_nand结构体为如下

#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

124行左右修改s3c24x0_clock_power结构体

struct s3c24x0_clock_power {

    u32 LOCKTIME;

    u32 MPLLCON;

    u32 UPLLCON;

    u32 CLKCON;

    u32 CLKSLOW;

    u32 CLKDIVN;

#if defined (CONFIG_S3C2440)

    u32 CAMDIVN;

#endif

}

 

四,include/asm/arch/s3c24x0_cpu.h,补充对s3c2440的支持

文件23行,修改#elif defined (CONFIG_S3C2410)

#elif defined (CONFIG_S3C2410) | (CONFIG_S3C2440)

五,修改arch/arm/cpu/arm920t/s3c24x0/timer.c文件

184行添加支持s3c2440

 

      defined(CONFIG_S3C2440) || \

 

六,修改arch/arm/cpu/arm920t/s3c24x0/speed.c

66行添加

#if defined(CONFIG_S3C2440) /* add by hurryliu */

    if(pllreg == MPLL)

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

    else if(pllreg == UPLL)

#endif

80行左右修改get_HCLK()函数如下

ulong get_HCLK(void)

{

    struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();

 

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

#if defined(CONFIG_S3C2440) /* Modify by hurryliu*/

        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 /* Modify end*/

}

 

七,修改include/configs/fl2440.h

38行添加#define CONFIG_S3C2440      

定义在内存中运行的宏,支持在内存中运行

 #define  CONFIG_SKIP_LOWLEVEL_INIT     1

 八,修改include/configs/fl2440.h 120行为自己的开发板启动信息

#define CONFIG_SYS_PROMPT       "fl2440@hurryliu # "

 

这些工作做完后,下载到内存中运行,连接串口,就可以看到打印的信息了

U-Boot 2010.09 (Mar 14 2013 - 16:15:59)

DRAM:  64 MiB
Flash: 512 KiB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   CS8900-0
fl2440@hurryliu #
fl2440@hurryliu #

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值