u-boot网卡驱动移植
网卡移植的驱动是针对国嵌GQ2440开发板的,u-boot版本为u-boot-2009,比这版本高一些的也没问题。移植主要有一下几个步骤,大多数和mini2440相同。
1.设置网卡的位宽
由于s3c2440存储控制器的bank4连接的是DM9000网卡,下面是网上截取的图,可知网卡位宽为16。
接着在lowlevel_init.S修改如下代码
#define B1_BWSCON (DW16)
#define B2_BWSCON (DW16)
#define B3_BWSCON (DW16)
#define B4_BWSCON (DW16)//没有使用wait信号
#define B5_BWSCON (DW8)
#define B6_BWSCON (DW32)
#define B7_BWSCON (DW32)
2.设置网卡时序
相关位的含义如下图:
修改的代码如下:
#define B4_Tacs 0x0
#define B4_Tcos 0x0
#define B4_Tacc 0x7
#define B4_Tcoh 0x1//这句修改,其它的和mini2440相似
#define B4_Tah 0x0
#define B4_Tacp 0x0
#define B4_PMC 0x0
3、在board/GQ2440/GQ2440.c 文件中添加网卡驱动入口函数
添加如下代码:
#ifdef CONFIG_CMD_NET
int board_eth_init(bd_t *bis)
{
int rc = 0;
#ifdef CONFIG_CS8900
rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
#endif
#ifdef CONFIG_DRIVER_DM9000
rc = dm9000_initialize(bis);
#endif
return rc;
}
#endif
4、在include/configs/GQ2440.h文件添加网卡驱动相关定义
主要是DM9000的基地址设置
#define CONFIG_NET_MULTI 1
#define CONFIG_NET_RETRY_COUNT 20
#define CONFIG_DRIVER_DM9000 1
#define CONFIG_DM9000_BASE 0x20000000
#define DM9000_IO CONFIG_DM9000_BASE
#define DM9000_DATA (CONFIG_DM9000_BASE+4)
#define CONFIG_DM9000_USE_16BIT 1
#define CONFIG_DM9000_NO_SROM 1
#undef CONFIG_DM9000_DEBUG
5、修改网卡驱动相关代码
在drivers/net/dm9000x.c文件中主要进行如下的修改
防止出现“could not establish link”的错误,进行下面修改:
i = 0;
while (!(phy_read(1) & 0x20)) { /* autonegation complete bit */
udelay(1000);
i++;
if (i == 1000) {
// printf("could not establish link\n");
// return 0;
break;
}
}
防止出现ping不同的情况,修改如下代码:
static void dm9000_halt(struct eth_device *netdev)
{
#if 0
DM9000_DBG("%s\n", __func__);
/* RESET devie */
phy_write(0, 0x8000); /* PHY RESET */
DM9000_iow(DM9000_GPR, 0x01); /* Power-Down PHY */
DM9000_iow(DM9000_IMR, 0x80); /* Disable all interrupt */
DM9000_iow(DM9000_RCR, 0x00); /* Disable RX */
#endif
}
到此为止,网卡驱动移植完成了。