使用SmartARM3250 V1.00版源码,会出现不插入网线,终端会很缓慢的BUG,可以修改drivers/net/lpc32xx_mii.c文件的下面两个函数解决,将两个函数中的变量的lps的值改为5即可:
 1 /*
 2  * MAC<--->PHY support functions
 3  */
 4 static int lpc32xx_mdio_read(struct mii_bus *bus, int phy_id, int phyreg)
 5 {
 6     struct netdata_local *pldat = bus->priv;
 7     int lps;
 8     u32 tmp;
 9 
10     __raw_writel(((phy_id << 8) | phyreg), ENET_MADR(pldat->net_base));
11     __raw_writel(MCMD_READ, ENET_MCMD(pldat->net_base));
12 
13     /* Wait for unbusy status */
14     lps = 50;   //改为5即可
15     tmp = __raw_readl(ENET_MIND(pldat->net_base));
16     while ((lps > 0) && (tmp & (MIND_BUSY | MIND_MII_LINK_FAIL)))
17     {
18         msleep(1);
19         tmp = __raw_readl(ENET_MIND(pldat->net_base));
20         lps--;
21     }
22     lps = (int) __raw_readl(ENET_MRDD(pldat->net_base));
23     __raw_writel(0, ENET_MCMD(pldat->net_base));
24 
25     return lps;
26 }
27 
28 static int lpc32xx_mdio_write(struct mii_bus *bus, int phy_id, int phyreg,
29             u16 phydata)
30 {
31     struct netdata_local *pldat = bus->priv;
32     int lps;
33     u32 tmp;
34 
35     __raw_writel(((phy_id << 8) | phyreg), ENET_MADR(pldat->net_base));
36     __raw_writel(phydata, ENET_MWTD(pldat->net_base));
37 
38     /* Wait for completion */
39     lps = 50;   //改为5即可
40     tmp = __raw_readl(ENET_MIND(pldat->net_base));
41     while ((lps > 0) && (tmp & MIND_BUSY))
42     {
43         msleep(1);
44         tmp = __raw_readl(ENET_MIND(pldat->net_base));
45         lps--;
46     }
47 
48     return 0;
49 }

 

posted on 2012-04-28 15:33  风行雪舞  阅读(339)  评论(0编辑  收藏  举报
无觅相关文章插件,快速提升流量