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 = ;
#ifdef CONFIG_CS8900
rc = cs8900_initialize(, 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 = ;
while (!(phy_read() & )) { /* autonegation complete bit */
udelay();
i++;
if (i == ) {
// printf("could not establish link\n");
// return ;
break;
}
}
防止出現ping不同的情況,修改如下代碼:
static void dm9000_halt(struct eth_device *netdev)
{
#if 0
DM9000_DBG("%s\n", __func__);
/* RESET devie */
phy_write(, ); /* PHY RESET */
DM9000_iow(DM9000_GPR, ); /* Power-Down PHY */
DM9000_iow(DM9000_IMR, ); /* Disable all interrupt */
DM9000_iow(DM9000_RCR, ); /* Disable RX */
#endif
}
到此為止,網卡驅動移植完成了。