FL2440的U-boot-2010.09移植(二)
FL2440的U-boot-2010.09移植(二)
添加fl2440中S3C2440片上系统的支持。
相关阅读:
U-Boot源代码下载地址
FL2440的U-boot-2010.09移植(一)
FL2440的U-boot-2010.09移植(二)
FL2440的U-boot-2010.09移植(三)DM9000网卡及开发板相关配置
FL2440的U-boot-2010.09移植(四) 添加NOR FLash启动支持
FL2440的U-boot-2010.09移植(五)uboot架构中NAND FLash驱动修改
FL2440的U-boot-2010.09移植(六)NAND FLash启动支持
FL2440的U-boot-2010.09移植(七)LCD的支持
针对FL2440开发板的u-boot-2010.09版本补丁
一、汇编文件修改,这部分主要集中修改修改cpu/arm920t/start.S文件。
1、删除AT91RM9200使用的LED代码,117、118行,关闭LED代码。
- // bl coloured_LED_init
- // bl red_LED_on
2、修改编译条件支持s3c2440,修改寄存器地址定义,修改 CPU频率初始化设置
- # if defined(CONFIG_S3C2400)
- # define pWTCON 0x15300000
- # define INTMSK 0x14400008 /* Interupt-Controller base addresses */
- # define CLKDIVN 0x14800014 /* clock divisor register */
- #else
- # define pWTCON 0x53000000
- # define INTMSK 0x4A000008 /* Interupt-Controller base addresses */
- # define INTSUBMSK 0x4A00001C
- # define CLKDIVN 0x4C000014 /* clock divisor register */
- # endif
- 添加
- # define CLK_CTL_BASE 0x4C000000
- # define MDIV_405 0x7f<<12
- # define PSDIV_405 0x21 /*set s3c2440 MPLL 405MHZ*/
- # define MDIV_200 0xa1<<12
- # define PSDIV_200 0x31 /*set s3c2410 MPLL 200MHZ*/
3、修改中断禁止部分
- # if defined(CONFIG_S3C2410)
- //ldr r1, =0x3ff
- ldr r1, =0x7ff /*uboot error*/
- ldr r0, =INTSUBMSK
- str r1, [r0]
- # endif
- 后添加
- #if defined(CONFIG_S3C2440)
- ldr r1, =0x7ff
- ldr r0, =INTSUBMSK
- str r1, [r0]
- /*INTSUBMSK 关闭中断 S3C2440有15位*/
- # endif
4、修改时钟设置(2440的主频为405MHz),紧接着上面一步,在其后添加和修改为:
- #if defined(CONFIG_S3C2440)
- /* FCLK:HCLK:PCLK = 1:4:8 */
- /* default FCLK is 405 MHz ! */
- ldr r0, =CLKDIVN
- mov r1, #5
- str r1, [r0]
- mrc p15, 0, r1, c1, c0, 0
- orr r1, r1, #0xc0000000 //asynchronous
- mcr p15, 0, r1, c1, c0, 0
- /*上面这段代码见s3c2440a手册p215,HDIVN != 0 叫做异步总线模式*/
- /* cpu clock FCLK = 405MHZ 通常我们叫400MHZ,实际是405MHZ,见S3C2440手册(英文版)chapt7,P227要习惯用英文手册:-)*/
- /*根据表中的数据设置MDIV,PDIV,SDIV*/
- mov r1, #CLK_CTL_BASE
- mov r2, #MDIV_405
- add r2, r2, #PSDIV_405
- str r2, [r1, #0x04] //写入MPLLCON
- #else
- /* FCLK:HCLK:PCLK = 1:2:4 */
- /* default FCLK is 120 MHz ! */
- ldr r0, =CLKDIVN
- mov r1, #3
- str r1, [r0]
- mrc p15, 0, r1, c1, c0, 0
- orr r1, r1, #0xc0000000 //asynchronous
- mcr p15, 0, r1, c1, c0, 0
- /* cpu clock is 200MHZ*/
- mov r1, #CLK_CTL_BASE
- mov r2, #MDIV_200
- add r2, r2, #PSDIV_200
- str r2, [r1, #0x04] //MPLLCON
- #endif
5、修改SDRAM的REFRESH刷新周期,修改board/fl2440/lowlevel_init.S文件
- #define REFCNT 1259
- /*在SDRAM手册上P3上有64ms refresh period (8K Cycle)*/
- /*结合fl2440开发板 preiod =64ms/8129=7.8125us,取7.9的话REFCNT的值为 (2048+1-7.9us*100Mhz)=1259*/
- #define Trp 0x0 /* 2clk */
- /*RAS precharge Time SDRAM数据手册P10 tRP(min)=20ns 或者18ns(由型号决定)我们知道我们的HCLK=405/4Mhz 故可设成2clk(20ns),有些移植手册设为4clk 再次充电时间设大点问题也不大吧 */
- #define Trc 0x3 /* 7clk */
- /*SDRAM ROW cycle time: Trc=Tsrc+Trp SDRAM数据手册p10 tRC(min)=65ns 或者60ns(由型号决定) 设为7即为70ns */
- #define Tchr 0x2 /* 3clk */
- /*为找到Tchr相关定义,在SMRDATA:后面设置REFRESH寄存器时(Tchr<<16),而实际上该寄存器(11~17)位为保留位,这里设置并没有意义(可能这个值在其他ARM体系中有用吧,但至少在S3C2440中是无效的)*/
|
评论暂时关闭