U-boot-2009.03移植之九:第一阶段之lowlevel_init.S的理解和修改

接下来对board/samsung/mini2440/lowlevel_init.s这个文件进行修改。

这个文件主要在start.S中被调用,在start.S中初始化时钟之后会判断是否uboot已经在ram中运行,如果没有,则跳转到cpu_init_crit初始化协处理器,然后跳转到lowlevel_init初始化存储器控制器。
这个文件主要设置ARM的存储器控制器,这几个控制器包括存储控制器,总线带宽控制器等。设置了这写东西后,ARM才能正常的对

nand nor ram等存储空间进行访问。
为了支持2440,需要修改BWSCON,mini2440 BANK0接NOR Flash,BANK4接DM9000,BANK6接RAM,对于mini2440,
只要修改B4_BWSCON即可,为了配合其他板,这里统一修改如下:
...
#define B1_BWSCON    (DW16)
#define B2_BWSCON  (DW16)
#define B3_BWSCON    (DW16 + UBLB) /* cs8900 */
#define B4_BWSCON    (DW16 + WAIT + UBLB) /* DM9000 */
#define B5_BWSCON    (DW8)
#define B6_BWSCON  (DW32)
#define B7_BWSCON  (DW32)
...

然后修改 REFRESH 的刷新周期:

参考http://zjbintsystem.blog.51cto.com/964211/211345

#define REFEN            0x1    /* Refresh enable */
#define TREFMD            0x0    /* CBR(CAS before RAS)/Auto refresh */
#define Trc            0x3    /* 7clk */
#define Tchr            0x2    /* 3clk */
#if defined(CONFIG_S3C2440)
#define Trp            0x2    /* 4clk */
#define REFCNT            1012
#else
#define Trp            0x0    /* 2clk */
#define REFCNT            0x0459
#endif

lowlevel_init.s 修改完成。

以下解释一下主要代码:
_TEXT_BASE:
 .word TEXT_BASE

.globl lowlevel_init
lowlevel_init:
 /* memory control configuration */
 /* make r0 relative the current location so that it */
 /* reads SMRDATA out of FLASH rather than memory ! */
 ldr     r0, =SMRDATA
 ldr r1, _TEXT_BASE
 sub r0, r0, r1
 ldr r1, =BWSCON /* Bus Width Status Controller */
 add     r2, r0, #13*4
/*其实明白了前三条语句这段程序就不难懂了,归根到底就是为什么将SMRDATA 的值减

去_TEXT_BASE的值?原因是这样的:我们使用的是从nandflash boot的方式,目前程序

仍然在4K-bytes ‘Steppingstone’(这里为什么突然冒出个Steppingstone’,这个就是我前面提到从nand flash 引导的方法,但不

知道名字,后来重新看s3c2440A  datasheet的nand flash那一章的开头才知道)上面运行,在SMRDATA后面的的内容仍然在

Steppingstone里面。但是SMRDATA的值是相对于_TEXT_BASE 值的地址,而且_TEXT_BASE 是放置u-boot的开始地方,所以用SMRDATA

-_TEXT_BASE 就可以得到SMRDATA后面内容在Steppingstone里面相对于地址0x00000000的放置的所在地方(相对于0x00的地址值)。*/

/*从这三条语句可以看出前人为了实现从nand flash启动可谓费尽心思啊!*/


0:
 ldr     r3, [r0], #4
 str     r3, [r1], #4
 cmp     r2, r0
 bne     0b

 /* everything is fine now */
 mov pc, lr

 .ltorg
/* the literal pools origin */

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值