一块板子上使用了DM9000CIEP,48脚封装的,这个网卡与100脚的DM9000驱动不同,调试这个网卡破费了周折,终于搞定,总结如下:
1、这个芯片在DM9000_probe函数中探测为TYPE_DM9000B,这个需要注意,DM9000B的PHY初始化建议加个延时
2、在dm9000_open函数中,在dm9000_reset前需要增加下划线部分,以预先初始化内部PHY,因为reset函数并不初始化PHY,虽然其后的dm9000_init_dm9000(dev)中初始化PHY,但已没用。
未修改的代码具体如下:这个代码使用100脚的DM9000没问题,但在DM9000CIEP上不能用。
static int
dm9000_open(struct net_device *dev)
{
board_info_t *db = netdev_priv(dev);
unsigned long irqflags = db->irq_res->flags & IRQF_TRIGGER_MASK;
if (netif_msg_ifup(db))
dev_dbg(db->dev, "enabling %s\n", dev->name);
/* If there is no IRQ type specified, default to something that
* may work, and tell the user that this is a problem */
if (irqflags == IRQF_TRIGGER_NONE)
dev_warn(db->dev, "WARNING: no IRQ