diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index c70ab40..c57174d 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c @@ -4353,12 +4353,12 @@ static void rtl8169_init_phy(struct net_device *dev, struct rtl8169_private *tp) rtl8169_phy_reset(dev, tp); - rtl8169_set_speed(dev, AUTONEG_ENABLE, SPEED_1000, DUPLEX_FULL, + /* rtl8169_set_speed(dev, AUTONEG_ENABLE, SPEED_1000, DUPLEX_FULL, ADVERTISED_10baseT_Half | ADVERTISED_10baseT_Full | ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Full | (tp->mii.supports_gmii ? ADVERTISED_1000baseT_Half | - ADVERTISED_1000baseT_Full : 0)); + ADVERTISED_1000baseT_Full : 0));*/ if (rtl_tbi_enabled(tp)) netif_info(tp, link, dev, "TBI auto-negotiating\n"); @@ -7582,6 +7582,11 @@ static int rtl_open(struct net_device *dev) void __iomem *ioaddr = tp->mmio_addr; struct pci_dev *pdev = tp->pci_dev; int retval = -ENOMEM; + int aner_reg; + int aner_autoneg; + aner_reg = rtl_readphy(tp, MII_EXPANSION); + aner_autoneg = aner_reg & 0x1; + pm_runtime_get_sync(&pdev->dev); @@ -7623,17 +7628,34 @@ static int rtl_open(struct net_device *dev) rtl8169_init_phy(dev, tp); - __rtl8169_set_features(dev, dev->features); + //__rtl8169_set_features(dev, dev->features); rtl_pll_power_up(tp); + mdelay(100); + + rtl8169_init_phy(dev, tp); + mdelay(100); + if (aner_autoneg == 0x0) { + netif_info(tp, probe, dev, "disable autoneg and sett speed 100 half duplex on nic\n"); + //restart autoneg + rtl_writephy(tp, MII_BMCR, 0x200); + mdelay(100); + //disable autoneg + rtl_writephy(tp, MII_BMCR, 0x00); + //set speed 100 + rtl_writephy(tp, MII_BMCR, 0x2000); + } + + mdelay(100); rtl_hw_start(dev); netif_start_queue(dev); - rtl_unlock_work(tp); + //rtl_unlock_work(tp); tp->saved_wolopts = 0; + rtl_unlock_work(tp); pm_runtime_put_noidle(&pdev->dev); rtl8169_check_link_status(dev, tp, ioaddr);