Topic:XFD6410 uboot下支持DM9000驱动(作者:Sturtle)
//----------------------------------------------------------------------------------------------------------------------------
// 作者:XFDarm(xfdarm@163.com)
// 论坛ID:Sturtle
// 版权:XFDarm(www.xfdarm.com)
// 平台:芯飞达科技 XFD6410开发板+uboot1.1.6
// 发布日期:2011-12-23
// 最后修改:2011-12-23
// 注意事项:未经作者同意,商业网站不能转载,更不得在转载的时候擅自修改、删除文章的任何部分
//------------------------------------------------------------------------------------------------------------------------------
1、 对照原理图修改include/configs/smdk6410.h#define CONFIG_DRIVER_DM9000 1
#define CONFIG_DM9000_BASE 0x18000300
#define DM9000_IO CONFIG_DM9000_BASE
#define CONFIG_DM9000_USE_16BIT
#define DM9000_DATA (CONFIG_DM9000_BASE + 4)
2、 注释掉dm9000x.c中如下内容:
/* Set Node address */
/* for (i = 0; i < 6; i++)
((u16 *) bd->bi_enetaddr)[i] = read_srom_word(i);
*/
添加以下内容,参考1.3的dm9000x.c中的
char *e,*s;
s = getenv("ethaddr");
for(i=0;i++;i<6)
{
bd->bi_enetaddr[i] = s ? simple_stroul(s,&e,16) : 0;
if(s)
s = (*e) ? e+1 : e;
}
3、 smdk6410.c中的CS1的bank要正确配置
SROM_BW_REG &= ~(0xff << 0);
SROM_BW_REG |= (1<<7) | (1<<6) | (1<<4)
4、 在dm9000.c的eth_rx()中添加do while循环,参考kernel下的dm9000.c,并在do之前将寄存器清空:
DM9000_ior(DM9000_MRRH);
DM9000_ior(DM9000_MRRL); //要加,不然还是ping不通
至此,重新make即可。
//如有错误,请留言指正;同时希望有更好的方法与大家交流和分享,让我们大家一起学习,共同进步!