参考另一块板子s5p_goni很容易就能添加MMC功能,
首先复制goni.c中的int board_mmc_init(bd_t *bis)函数到smdkv210.c中,
在smdkv210.h中添加MMC的相关宏:
/* MMC */
#define CONFIG_GENERIC_MMC
#define CONFIG_MMC
#define CONFIG_SDHCI
#define CONFIG_S5P_SDHCI
需要包含2个头文件:
#include
#include
static struct s5pc110_gpio *s5pc110_gpio;
编译发现打印MMC: 就卡住了。
MMC:
正常情况下即使mmc初始化失败应该打印错误,但是这里直接卡住了,很可能pc指针出错了。
检查发现
s5pc110_gpio指针没有初始化。添加:
s5pc110_gpio = (struct s5pc110_gpio *)S5PC110_GPIO_BASE;
编译成功,但是mmc打印Unknown command 'mmc' - try 'help'
添加命令宏:
#define CONFIG_CMD_MMC
SMDKV210 # fatls mmc 0
37504 mlo
lost.dir/
images/
451872 u-boot.bin
484788 u-boot.img
6678 smdkv210.h
1787 cmd
images(210)/
.android_secure/
music/
podcasts/
ringtones/
alarms/
notifications/
pictures/
movies/
download/
dcim/
5 file(s), 13 dir(s)
MMC驱动移植,就是这么简单。
现在还是以普通方式读写数据,看了exynos4是开启DMA的,试试:
#define CONFIG_MMC_SDMA
#define CONFIG_MMC_DEFAULT_DEV 0
在另一块板子上移植mmc的时候,时钟停在DRAM: 1 GiB,加打印信息,最终卡在nand_set_defaults函数中的
if (!chip->block_markbad)
chip->block_markbad = nand_default_block_markbad;
但是这句代码怎么看都不像有问题,于是怀疑是不是DDR配置有问题,后来突然想到,BL2程序可能没有拷贝完整,检查:
copy_bl2_to_ram,果然:
u32 bl2Size = 250 * 1024; // 250K
这是zjh写的,我没做修改,浪费了一天时间啊。
烧写u-boot到nand:
mmc dev 0
U-Boot# fatload mmc 0 82000000 /MLO ;nand erase.part NAND.SPL;nand write 82000000 NAND.SPL
U-Boot# fatload mmc 0 82000000 /u-boot.img;nand erase.part NAND.u-boot;nand write 82000000 NAND.u-boot
阅读(2355) | 评论(0) | 转发(0) |