Exynos4412 uboot2013.1移植B

DM9000 网卡移植
由于DM9000 挂接在 EBI 总线上,所以CPU用SROM控制器(此处用BANK1)来对其进行访问和配置,SROM控制器直接接到AHB,所以保证了其通信速度
根据DM9000特性进行SROM控制器配置
#define DM9000_Tacs (0x1) /* 0clk         address set-up */
#define DM9000_Tcos (0x1) /* 4clk         chip selection set-up */
#define DM9000_Tacc (0x5) /* 14clk        access cycle */
#define DM9000_Tcoh (0x1) /* 1clk         chip selection hold */
#define DM9000_Tah (0xC) /* 4clk         address holding time */
#define DM9000_Tacp (0x9) /* 6clk         page mode access cycle */
#define DM9000_PMC (0x1) /* normal(1data)page mode configuration */
#define SROM_BC1_VAL ((DM9000_Tacs << 28) \
| (DM9000_Tcos << 24) \
| (DM9000_Tacc << 16) \
| (DM9000_Tcoh << 12) \
| (DM9000_Tah << 8) \
| (DM9000_Tacp << 4) \
| (DM9000_PMC))


.global srom_ctrl_init
srom_ctrl_init:
/* CSn, WE, OE*/
ldr r0, =0x11000120
ldr r1, =0x00222222
str r1, [r0]


/* BE, WAIT, RD */
ldr r0, =0x11000140
ldr r1, =0x00002222
str r1, [r0]


/* ADDR[0-7], pull up */
ldr r0, =0x11000180
ldr r1, =0x22222222
str r1, [r0]
ldr r0, =0x11000188
ldr r1, =0x0000FFFF
str r1, [r0]


/* DATA[0-7], pull up */
ldr r0, =0x110001C0
ldr r1, =0x22222222
str r1, [r0]
ldr r0, =0x110001C8
ldr r1, =0x0000FFFF
str r1, [r0]


/* DATA[8-15], pull up */
ldr r0, =0x110001E0
ldr r1, =0x22222222
str r1, [r0]
ldr r0, =0x110001E8
ldr r1, =0x0000FFFF
str r1, [r0]


/* SROM BANK 1 */
ldr r0, =0x12570000
ldr r1, [r0]
orr r1, r1, #0xF0
str r1, [r0]


ldr r0, =0x12570008
ldr r1, =SROM_BC1_VAL
str r1, [r0]


mov pc, lr
在include/configs/xxdk.h 添加如下配置宏
#define CONFIG_CMD_PING
#define CONFIG_CMD_ELF
#define CONFIG_CMD_DHCP
#define CONFIG_CMD_MMC
#define CONFIG_CMD_FAT
#define CONFIG_CMD_NET
#undef CONFIG_CMD_NFS


#define CONFIG_CMD_NET
#define CONFIG_DRIVER_DM9000  1
#define CONFIG_DM9000_BASE    0x05000000 // SROMC 的BANK1 MEMORY地址
#define DM9000_IO        CONFIG_DM9000_BASE
#define DM9000_DATA      (CONFIG_DM9000_BASE + 4)


#define CONFIG_ETHADDR 11:22:33:44:55:66
#define CONFIG_IPADDR   192.168.9.200
#define CONFIG_SERVERIP     192.168.9.120
#define CONFIG_GATEWAYIP    192.168.9.1
#define CONFIG_NETMASK 255.255.255.0
在board/Samsung/xxdk/xxdk.c 添加网卡初始化函数
/*dm9000 initialize*/
#ifdef CONFIG_CMD_NET
int board_eth_init(bd_t *bis)                                                  
{      
int rc = 0;
#ifdef CONFIG_DRIVER_DM9000
rc = dm9000_initialize(bis);                                            
#endif                                                                         
return rc;                                                              
}  
#endif

编译测试
> tftp 41000000 uImage 
 ..........ok
这里重要的思想是:命令和驱动分离,每个层次有自己的处理问题的方法和范围,也就是高内聚低耦合原则
比如: 设备驱动在 driver中
 设备初始化在 board/samsung/xxdk/xxdk.c 中
 设备相关的命令在commom/下 
 编译配置宏在include/configs/xxdk.h 中
各司其事,层次清晰,协同工作
每次学习时, 层次一定要对,设计思想是重中之重
最后总结一下uboot2013 的4412启动流程
1. arch/arm/cpu/armv7/start.S
学习其刚开始的汇编的回调写法例如:ldr, pc, _irq
2. 根据 CONFIG_SPL_BUILD 选择uboot和spl
3. reset 宰狗,关闭电源管理芯片
4. bl cpu_init_cirt (spl)
| system_clock_init 时钟
| mem_ctrl_init 内存
在uboot运行时发现自己已在内存中则跳过时钟和内存的初始化
5.bl _main (arch/arm/lib/ctr0.S)
6.bl board_init_f (arch/arm/lib/board.c)(flash这里是sd, 重定向之前的准备工作)
7.bl relocate_code (arch/arm/cpu/armv7/start.S) 自己将自己搬移到内存中的高端地址
将内存低端留给加载的内核或其他镜像使用
8.ldr, pc, =board_init_r 在内存中初始化一些必要函数
......
board_init(); 板板相关的添加到此处
......
for(;;) {
main_loop(); // 解析字符串,查函数指针表,执行命令
}
over。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值