打印

uboot移植参考(3)

[复制链接]
1365|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ferenc2|  楼主 | 2012-2-20 21:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

修改get_HCLK, get_PCLK:
/* for s3c2440 */
#define S3C2440_CLKDIVN_PDIVN
(1<<0)
#define S3C2440_CLKDIVN_HDIVN_MASK
(3<<1)
#define S3C2440_CLKDIVN_HDIVN_1
(0<<1)
#define S3C2440_CLKDIVN_HDIVN_2
(1<<1)
#define S3C2440_CLKDIVN_HDIVN_4_8
(2<<1)
#define S3C2440_CLKDIVN_HDIVN_3_6
(3<<1)
#define S3C2440_CLKDIVN_UCLK
(1<<3)

#define S3C2440_CAMDIVN_CAMCLK_MASK
(0xf<<0)
#define S3C2440_CAMDIVN_CAMCLK_SEL
(1<<4)
#define S3C2440_CAMDIVN_HCLK3_HALF
(1<<8)
#define S3C2440_CAMDIVN_HCLK4_HALF
(1<<9)
#define S3C2440_CAMDIVN_DVSEN
(1<<12)

/* return HCLK frequency */
ulong get_HCLK(void)
{

S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();

unsigned long clkdiv;

unsigned long camdiv;

int hdiv = 1;


/* support both of S3C2410 and S3C2440 */

if (gd->bd->bi_arch_number == MACH_TYPE_SMDK2410)

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

else

{

clkdiv = clk_power->CLKDIVN;

camdiv = clk_power->CAMDIVN;


/* work out clock scalings */


switch (clkdiv & S3C2440_CLKDIVN_HDIVN_MASK) {

case S3C2440_CLKDIVN_HDIVN_1:

hdiv = 1;

break;


case S3C2440_CLKDIVN_HDIVN_2:

hdiv = 2;

break;


case S3C2440_CLKDIVN_HDIVN_4_8:

hdiv = (camdiv & S3C2440_CAMDIVN_HCLK4_HALF) ? 8 : 4;

break;


case S3C2440_CLKDIVN_HDIVN_3_6:

hdiv = (camdiv & S3C2440_CAMDIVN_HCLK3_HALF) ? 6 : 3;

break;

}


return get_FCLK() / hdiv;

}
}

/* return PCLK frequency */
ulong get_PCLK(void)
{

S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();

unsigned long clkdiv;

unsigned long camdiv;

int hdiv = 1;


/* support both of S3C2410 and S3C2440 */

if (gd->bd->bi_arch_number == MACH_TYPE_SMDK2410)

return((clk_power->CLKDIVN & 0x1) ? get_HCLK()/2 : get_HCLK());

else

{

clkdiv = clk_power->CLKDIVN;

camdiv = clk_power->CAMDIVN;


/* work out clock scalings */


switch (clkdiv & S3C2440_CLKDIVN_HDIVN_MASK) {

case S3C2440_CLKDIVN_HDIVN_1:

hdiv = 1;

break;


case S3C2440_CLKDIVN_HDIVN_2:

hdiv = 2;


break;


case S3C2440_CLKDIVN_HDIVN_4_8:

hdiv = (camdiv & S3C2440_CAMDIVN_HCLK4_HALF) ? 8 : 4;

break;


case S3C2440_CLKDIVN_HDIVN_3_6:

hdiv = (camdiv & S3C2440_CAMDIVN_HCLK3_HALF) ? 6 : 3;

break;

}


return get_FCLK() / hdiv / ((clkdiv & S3C2440_CLKDIVN_PDIVN)? 2:1);

}
}

重新执行make TX2440_config
make all
生成u-boot.bin,由于还没有增加NAND Flash的支持,所以可烧入NOR Flash中运行
在make all时会出现错误:没有CAMDIVN
这个要在include/s3c24x0.h中定义, 在129行S3C24X0_CLOCK_POWER结构体中增加:S3C24X0_REG32
CAMDIVN;
/* for s3c2440*/
支持NAND Flash
首先在配置文件include/configs/TX2440.h的宏CONFIG_COMMANDS中增加CFG_CMD_NAND (大概在82行)
编译,出现nand.c的错误和警告
解决:在include/configs/TX2440.h的最后面增加3个宏:
/*NAND flash settings*/
#define CFG_NAND_BASE
0

//
无实际意义:基地址,在board_nand_init中重新定义
#define CFG_MAX_NAND_DEVICE
1

//NAND Flash
设备数目为1
#define NAND_MAX_CHIPS
1

//
每个NAND设备由1个NADN芯片组成
修改配置文件后再编译,只有一个错误了“board_nand_init”函数未定义

board_nand_init需要自己编写,在cpu/arm920t/s3c24x0下新建nand_flash.c
编写之前,需要针对S3C2440 NAND Flash定义一些数据结构和函数
在include/s3c24x0.h中增加S3C2440_NAND数据结构(168行)
/* NAND FLASH (see S3C2440 manual chapter 6) */
typedef struct {

S3C24X0_REG32
NFCONF;

S3C24X0_REG32
NFCONT;

S3C24X0_REG32
NFCMD;

S3C24X0_REG32
NFADDR;

S3C24X0_REG32
NFDATA;

S3C24X0_REG32
NFMECCD0;

S3C24X0_REG32
NFMECCD1;

S3C24X0_REG32
NFSECCD;

S3C24X0_REG32
NFSTAT;

S3C24X0_REG32
NFESTAT0;

S3C24X0_REG32
NFESTAT1;

S3C24X0_REG32
NFMECC0;

S3C24X0_REG32
NFMECC1;

S3C24X0_REG32
NFSECC;

S3C24X0_REG32
NFSBLK;

S3C24X0_REG32
NFEBLK;
} /*__attribute__((__packed__))*/ S3C2440_NAND;

相关帖子

沙发
ferenc2|  楼主 | 2012-2-20 21:49 | 只看该作者

111111111

本帖最后由 ferenc2 于 2012-2-20 21:54 编辑

111111111111

使用特权

评论回复
板凳
ferenc2|  楼主 | 2012-2-20 21:55 | 只看该作者
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

134

主题

207

帖子

3

粉丝