Topic:XFD6410 uboot下支持DM9000驱动(作者:Sturtle)
//----------------------------------------------------------------------------------------------------------------------------
// 作者:XFDarm([email protected])
// 论坛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即可。
//如有错误,请留言指正;同时希望有更好的方法与大家交流和分享,让我们大家一起学习,共同进步!