Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1249602
  • 博文数量: 479
  • 博客积分: 12240
  • 博客等级: 上将
  • 技术积分: 4999
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-24 17:12
文章分类

全部博文(479)

文章存档

2014年(1)

2013年(1)

2012年(1)

2011年(95)

2010年(177)

2009年(167)

2008年(16)

2007年(21)

分类: LINUX

2009-12-04 14:14:55


使用SmartARM3250 V1.00版源码,会出现不插入网线,终端会很缓慢的BUG,可以修改drivers/net/lpc32xx_mii.c文件的下面两个函数解决,将两个函数中的变量的lps的值改为5即可:

/*
 * MAC<--->PHY support functions
 */

static int lpc32xx_mdio_read(struct mii_bus *bus, int phy_id, int phyreg)
{
    struct netdata_local *pldat = bus->priv;
    int lps;
    u32 tmp;

    __raw_writel(((phy_id << 8) | phyreg), ENET_MADR(pldat->net_base));
    __raw_writel(MCMD_READ, ENET_MCMD(pldat->net_base));

    /* Wait for unbusy status */
    lps = 50;   //改为5即可
    tmp = __raw_readl(ENET_MIND(pldat->net_base));
    while ((lps > 0) && (tmp & (MIND_BUSY | MIND_MII_LINK_FAIL)))
    {
        msleep(1);
        tmp = __raw_readl(ENET_MIND(pldat->net_base));
        lps--;
    }
    lps = (int) __raw_readl(ENET_MRDD(pldat->net_base));
    __raw_writel(0, ENET_MCMD(pldat->net_base));

    return lps;
}

static int lpc32xx_mdio_write(struct mii_bus *bus, int phy_id, int phyreg,
            u16 phydata)
{
    struct netdata_local *pldat = bus->priv;
    int lps;
    u32 tmp;

    __raw_writel(((phy_id << 8) | phyreg), ENET_MADR(pldat->net_base));
    __raw_writel(phydata, ENET_MWTD(pldat->net_base));

    /* Wait for completion */
    lps = 50;   //改为5即可
    tmp = __raw_readl(ENET_MIND(pldat->net_base));
    while ((lps > 0) && (tmp & MIND_BUSY))
    {
        msleep(1);
        tmp = __raw_readl(ENET_MIND(pldat->net_base));
        lps--;
    }

    return 0;
}



阅读(1502) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~