Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'davem.r8169.fixes' of git://violet.fr.zoreil.com/romieu/linux

+27 -5
+27 -5
drivers/net/r8169.c
··· 407 407 RxOK = 0x0001, 408 408 409 409 /* RxStatusDesc */ 410 + RxBOVF = (1 << 24), 410 411 RxFOVF = (1 << 23), 411 412 RxRWT = (1 << 22), 412 413 RxRES = (1 << 21), ··· 683 682 struct mii_if_info mii; 684 683 struct rtl8169_counters counters; 685 684 u32 saved_wolopts; 685 + u32 opts1_mask; 686 686 687 687 struct rtl_fw { 688 688 const struct firmware *fw; ··· 712 710 MODULE_FIRMWARE(FIRMWARE_8168D_2); 713 711 MODULE_FIRMWARE(FIRMWARE_8168E_1); 714 712 MODULE_FIRMWARE(FIRMWARE_8168E_2); 713 + MODULE_FIRMWARE(FIRMWARE_8168E_3); 715 714 MODULE_FIRMWARE(FIRMWARE_8105E_1); 716 715 717 716 static int rtl8169_open(struct net_device *dev); ··· 3080 3077 netif_err(tp, link, dev, "PHY reset failed\n"); 3081 3078 } 3082 3079 3080 + static bool rtl_tbi_enabled(struct rtl8169_private *tp) 3081 + { 3082 + void __iomem *ioaddr = tp->mmio_addr; 3083 + 3084 + return (tp->mac_version == RTL_GIGA_MAC_VER_01) && 3085 + (RTL_R8(PHYstatus) & TBI_Enable); 3086 + } 3087 + 3083 3088 static void rtl8169_init_phy(struct net_device *dev, struct rtl8169_private *tp) 3084 3089 { 3085 3090 void __iomem *ioaddr = tp->mmio_addr; ··· 3120 3109 ADVERTISED_1000baseT_Half | 3121 3110 ADVERTISED_1000baseT_Full : 0)); 3122 3111 3123 - if (RTL_R8(PHYstatus) & TBI_Enable) 3112 + if (rtl_tbi_enabled(tp)) 3124 3113 netif_info(tp, link, dev, "TBI auto-negotiating\n"); 3125 3114 } 3126 3115 ··· 3330 3319 3331 3320 static void r810x_pll_power_down(struct rtl8169_private *tp) 3332 3321 { 3322 + void __iomem *ioaddr = tp->mmio_addr; 3323 + 3333 3324 if (__rtl8169_get_wol(tp) & WAKE_ANY) { 3334 3325 rtl_writephy(tp, 0x1f, 0x0000); 3335 3326 rtl_writephy(tp, MII_BMCR, 0x0000); 3327 + 3328 + if (tp->mac_version == RTL_GIGA_MAC_VER_29 || 3329 + tp->mac_version == RTL_GIGA_MAC_VER_30) 3330 + RTL_W32(RxConfig, RTL_R32(RxConfig) | AcceptBroadcast | 3331 + AcceptMulticast | AcceptMyPhys); 3336 3332 return; 3337 3333 } 3338 3334 ··· 3435 3417 rtl_writephy(tp, MII_BMCR, 0x0000); 3436 3418 3437 3419 if (tp->mac_version == RTL_GIGA_MAC_VER_32 || 3438 - tp->mac_version == RTL_GIGA_MAC_VER_33) 3420 + tp->mac_version == RTL_GIGA_MAC_VER_33 || 3421 + tp->mac_version == RTL_GIGA_MAC_VER_34) 3439 3422 RTL_W32(RxConfig, RTL_R32(RxConfig) | AcceptBroadcast | 3440 3423 AcceptMulticast | AcceptMyPhys); 3441 3424 return; ··· 3746 3727 tp->features |= rtl_try_msi(pdev, ioaddr, cfg); 3747 3728 RTL_W8(Cfg9346, Cfg9346_Lock); 3748 3729 3749 - if ((tp->mac_version <= RTL_GIGA_MAC_VER_06) && 3750 - (RTL_R8(PHYstatus) & TBI_Enable)) { 3730 + if (rtl_tbi_enabled(tp)) { 3751 3731 tp->set_speed = rtl8169_set_speed_tbi; 3752 3732 tp->get_settings = rtl8169_gset_tbi; 3753 3733 tp->phy_reset_enable = rtl8169_tbi_reset_enable; ··· 3794 3776 tp->hw_start = cfg->hw_start; 3795 3777 tp->intr_event = cfg->intr_event; 3796 3778 tp->napi_event = cfg->napi_event; 3779 + 3780 + tp->opts1_mask = (tp->mac_version != RTL_GIGA_MAC_VER_01) ? 3781 + ~(RxBOVF | RxFOVF) : ~0; 3797 3782 3798 3783 init_timer(&tp->timer); 3799 3784 tp->timer.data = (unsigned long) dev; ··· 4009 3988 while (RTL_R8(TxPoll) & NPQ) 4010 3989 udelay(20); 4011 3990 } else if (tp->mac_version == RTL_GIGA_MAC_VER_34) { 3991 + RTL_W8(ChipCmd, RTL_R8(ChipCmd) | StopReq); 4012 3992 while (!(RTL_R32(TxConfig) & TXCFG_EMPTY)) 4013 3993 udelay(100); 4014 3994 } else { ··· 5336 5314 u32 status; 5337 5315 5338 5316 rmb(); 5339 - status = le32_to_cpu(desc->opts1); 5317 + status = le32_to_cpu(desc->opts1) & tp->opts1_mask; 5340 5318 5341 5319 if (status & DescOwn) 5342 5320 break;