使用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 }