net: drop the weight argument from netif_napi_add
[linux-2.6-block.git] / drivers / net / ethernet / realtek / r8169_main.c
index 1b7fdb4f056bdabb918637b0dcf644d9571e6aa5..3ec6d1319a8a9a1b0ca6cbf42c4e108405f0608d 100644 (file)
 #define FIRMWARE_8106E_2       "rtl_nic/rtl8106e-2.fw"
 #define FIRMWARE_8168G_2       "rtl_nic/rtl8168g-2.fw"
 #define FIRMWARE_8168G_3       "rtl_nic/rtl8168g-3.fw"
-#define FIRMWARE_8168H_1       "rtl_nic/rtl8168h-1.fw"
 #define FIRMWARE_8168H_2       "rtl_nic/rtl8168h-2.fw"
 #define FIRMWARE_8168FP_3      "rtl_nic/rtl8168fp-3.fw"
-#define FIRMWARE_8107E_1       "rtl_nic/rtl8107e-1.fw"
 #define FIRMWARE_8107E_2       "rtl_nic/rtl8107e-2.fw"
 #define FIRMWARE_8125A_3       "rtl_nic/rtl8125a-3.fw"
 #define FIRMWARE_8125B_2       "rtl_nic/rtl8125b-2.fw"
@@ -102,12 +100,9 @@ static const struct {
        [RTL_GIGA_MAC_VER_07] = {"RTL8102e"                             },
        [RTL_GIGA_MAC_VER_08] = {"RTL8102e"                             },
        [RTL_GIGA_MAC_VER_09] = {"RTL8102e/RTL8103e"                    },
-       [RTL_GIGA_MAC_VER_10] = {"RTL8101e"                             },
+       [RTL_GIGA_MAC_VER_10] = {"RTL8101e/RTL8100e"                    },
        [RTL_GIGA_MAC_VER_11] = {"RTL8168b/8111b"                       },
-       [RTL_GIGA_MAC_VER_12] = {"RTL8168b/8111b"                       },
-       [RTL_GIGA_MAC_VER_13] = {"RTL8101e/RTL8100e"                    },
        [RTL_GIGA_MAC_VER_14] = {"RTL8401"                              },
-       [RTL_GIGA_MAC_VER_16] = {"RTL8101e"                             },
        [RTL_GIGA_MAC_VER_17] = {"RTL8168b/8111b"                       },
        [RTL_GIGA_MAC_VER_18] = {"RTL8168cp/8111cp"                     },
        [RTL_GIGA_MAC_VER_19] = {"RTL8168c/8111c"                       },
@@ -131,20 +126,14 @@ static const struct {
        [RTL_GIGA_MAC_VER_38] = {"RTL8411",             FIRMWARE_8411_1 },
        [RTL_GIGA_MAC_VER_39] = {"RTL8106e",            FIRMWARE_8106E_1},
        [RTL_GIGA_MAC_VER_40] = {"RTL8168g/8111g",      FIRMWARE_8168G_2},
-       [RTL_GIGA_MAC_VER_41] = {"RTL8168g/8111g"                       },
        [RTL_GIGA_MAC_VER_42] = {"RTL8168gu/8111gu",    FIRMWARE_8168G_3},
        [RTL_GIGA_MAC_VER_43] = {"RTL8106eus",          FIRMWARE_8106E_2},
        [RTL_GIGA_MAC_VER_44] = {"RTL8411b",            FIRMWARE_8411_2 },
-       [RTL_GIGA_MAC_VER_45] = {"RTL8168h/8111h",      FIRMWARE_8168H_1},
        [RTL_GIGA_MAC_VER_46] = {"RTL8168h/8111h",      FIRMWARE_8168H_2},
-       [RTL_GIGA_MAC_VER_47] = {"RTL8107e",            FIRMWARE_8107E_1},
        [RTL_GIGA_MAC_VER_48] = {"RTL8107e",            FIRMWARE_8107E_2},
-       [RTL_GIGA_MAC_VER_49] = {"RTL8168ep/8111ep"                     },
-       [RTL_GIGA_MAC_VER_50] = {"RTL8168ep/8111ep"                     },
        [RTL_GIGA_MAC_VER_51] = {"RTL8168ep/8111ep"                     },
        [RTL_GIGA_MAC_VER_52] = {"RTL8168fp/RTL8117",  FIRMWARE_8168FP_3},
        [RTL_GIGA_MAC_VER_53] = {"RTL8168fp/RTL8117",                   },
-       [RTL_GIGA_MAC_VER_60] = {"RTL8125A"                             },
        [RTL_GIGA_MAC_VER_61] = {"RTL8125A",            FIRMWARE_8125A_3},
        /* reserve 62 for CFG_METHOD_4 in the vendor driver */
        [RTL_GIGA_MAC_VER_63] = {"RTL8125B",            FIRMWARE_8125B_2},
@@ -658,10 +647,8 @@ MODULE_FIRMWARE(FIRMWARE_8106E_1);
 MODULE_FIRMWARE(FIRMWARE_8106E_2);
 MODULE_FIRMWARE(FIRMWARE_8168G_2);
 MODULE_FIRMWARE(FIRMWARE_8168G_3);
-MODULE_FIRMWARE(FIRMWARE_8168H_1);
 MODULE_FIRMWARE(FIRMWARE_8168H_2);
 MODULE_FIRMWARE(FIRMWARE_8168FP_3);
-MODULE_FIRMWARE(FIRMWARE_8107E_1);
 MODULE_FIRMWARE(FIRMWARE_8107E_2);
 MODULE_FIRMWARE(FIRMWARE_8125A_3);
 MODULE_FIRMWARE(FIRMWARE_8125B_2);
@@ -689,7 +676,7 @@ static void rtl_pci_commit(struct rtl8169_private *tp)
 
 static bool rtl_is_8125(struct rtl8169_private *tp)
 {
-       return tp->mac_version >= RTL_GIGA_MAC_VER_60;
+       return tp->mac_version >= RTL_GIGA_MAC_VER_61;
 }
 
 static bool rtl_is_8168evl_up(struct rtl8169_private *tp)
@@ -892,8 +879,6 @@ static void rtl8168g_phy_suspend_quirk(struct rtl8169_private *tp, int value)
 {
        switch (tp->mac_version) {
        case RTL_GIGA_MAC_VER_40:
-       case RTL_GIGA_MAC_VER_41:
-       case RTL_GIGA_MAC_VER_49:
                if (value & BMCR_RESET || !(value & BMCR_PDOWN))
                        rtl_eri_set_bits(tp, 0x1a8, 0xfc000000);
                else
@@ -1207,7 +1192,7 @@ static enum rtl_dash_type rtl_check_dash(struct rtl8169_private *tp)
        case RTL_GIGA_MAC_VER_28:
        case RTL_GIGA_MAC_VER_31:
                return r8168dp_check_dash(tp) ? RTL_DASH_DP : RTL_DASH_NONE;
-       case RTL_GIGA_MAC_VER_49 ... RTL_GIGA_MAC_VER_53:
+       case RTL_GIGA_MAC_VER_51 ... RTL_GIGA_MAC_VER_53:
                return r8168ep_check_dash(tp) ? RTL_DASH_EP : RTL_DASH_NONE;
        default:
                return RTL_DASH_NONE;
@@ -1423,11 +1408,11 @@ static void rtl8169_get_drvinfo(struct net_device *dev,
        struct rtl8169_private *tp = netdev_priv(dev);
        struct rtl_fw *rtl_fw = tp->rtl_fw;
 
-       strlcpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
-       strlcpy(info->bus_info, pci_name(tp->pci_dev), sizeof(info->bus_info));
+       strscpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
+       strscpy(info->bus_info, pci_name(tp->pci_dev), sizeof(info->bus_info));
        BUILD_BUG_ON(sizeof(info->fw_version) < sizeof(rtl_fw->version));
        if (rtl_fw)
-               strlcpy(info->fw_version, rtl_fw->version,
+               strscpy(info->fw_version, rtl_fw->version,
                        sizeof(info->fw_version));
 }
 
@@ -2011,7 +1996,10 @@ static enum mac_version rtl8169_get_mac_version(u16 xid, bool gmii)
 
                /* 8168F family. */
                { 0x7c8, 0x488, RTL_GIGA_MAC_VER_38 },
-               { 0x7cf, 0x481, RTL_GIGA_MAC_VER_36 },
+               /* It seems this chip version never made it to
+                * the wild. Let's disable detection.
+                * { 0x7cf, 0x481,      RTL_GIGA_MAC_VER_36 },
+                */
                { 0x7cf, 0x480, RTL_GIGA_MAC_VER_35 },
 
                /* 8168E family. */
@@ -2041,7 +2029,6 @@ static enum mac_version rtl8169_get_mac_version(u16 xid, bool gmii)
                { 0x7c8, 0x3c0, RTL_GIGA_MAC_VER_22 },
 
                /* 8168B family. */
-               { 0x7cf, 0x380, RTL_GIGA_MAC_VER_12 },
                { 0x7c8, 0x380, RTL_GIGA_MAC_VER_17 },
                { 0x7c8, 0x300, RTL_GIGA_MAC_VER_11 },
 
@@ -2054,19 +2041,10 @@ static enum mac_version rtl8169_get_mac_version(u16 xid, bool gmii)
                { 0x7cf, 0x249, RTL_GIGA_MAC_VER_08 },
                { 0x7cf, 0x348, RTL_GIGA_MAC_VER_07 },
                { 0x7cf, 0x248, RTL_GIGA_MAC_VER_07 },
-               { 0x7cf, 0x340, RTL_GIGA_MAC_VER_13 },
                { 0x7cf, 0x240, RTL_GIGA_MAC_VER_14 },
-               { 0x7cf, 0x343, RTL_GIGA_MAC_VER_10 },
-               { 0x7cf, 0x342, RTL_GIGA_MAC_VER_16 },
                { 0x7c8, 0x348, RTL_GIGA_MAC_VER_09 },
                { 0x7c8, 0x248, RTL_GIGA_MAC_VER_09 },
-               { 0x7c8, 0x340, RTL_GIGA_MAC_VER_16 },
-               /* FIXME: where did these entries come from ? -- FR
-                * Not even r8101 vendor driver knows these id's,
-                * so let's disable detection for now. -- HK
-                * { 0xfc8, 0x388,      RTL_GIGA_MAC_VER_13 },
-                * { 0xfc8, 0x308,      RTL_GIGA_MAC_VER_13 },
-                */
+               { 0x7c8, 0x340, RTL_GIGA_MAC_VER_10 },
 
                /* 8110 family. */
                { 0xfc8, 0x980, RTL_GIGA_MAC_VER_06 },
@@ -2088,8 +2066,6 @@ static enum mac_version rtl8169_get_mac_version(u16 xid, bool gmii)
        if (ver != RTL_GIGA_MAC_NONE && !gmii) {
                if (ver == RTL_GIGA_MAC_VER_42)
                        ver = RTL_GIGA_MAC_VER_43;
-               else if (ver == RTL_GIGA_MAC_VER_45)
-                       ver = RTL_GIGA_MAC_VER_47;
                else if (ver == RTL_GIGA_MAC_VER_46)
                        ver = RTL_GIGA_MAC_VER_48;
        }
@@ -2271,7 +2247,7 @@ static void rtl_init_rxcfg(struct rtl8169_private *tp)
        case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_53:
                RTL_W32(tp, RxConfig, RX128_INT_EN | RX_MULTI_EN | RX_DMA_BURST | RX_EARLY_OFF);
                break;
-       case RTL_GIGA_MAC_VER_60 ... RTL_GIGA_MAC_VER_63:
+       case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_63:
                RTL_W32(tp, RxConfig, RX_FETCH_DFLT_8125 | RX_DMA_BURST);
                break;
        default:
@@ -2338,7 +2314,6 @@ static void rtl_jumbo_config(struct rtl8169_private *tp)
 
        rtl_unlock_config_regs(tp);
        switch (tp->mac_version) {
-       case RTL_GIGA_MAC_VER_12:
        case RTL_GIGA_MAC_VER_17:
                if (jumbo) {
                        readrq = 512;
@@ -2455,7 +2430,7 @@ static void rtl_wait_txrx_fifo_empty(struct rtl8169_private *tp)
                rtl_loop_wait_high(tp, &rtl_txcfg_empty_cond, 100, 42);
                rtl_loop_wait_high(tp, &rtl_rxtx_empty_cond, 100, 42);
                break;
-       case RTL_GIGA_MAC_VER_60 ... RTL_GIGA_MAC_VER_61:
+       case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_61:
                rtl_loop_wait_high(tp, &rtl_rxtx_empty_cond, 100, 42);
                break;
        case RTL_GIGA_MAC_VER_63:
@@ -2700,8 +2675,8 @@ static void rtl_hw_aspm_clkreq_enable(struct rtl8169_private *tp, bool enable)
                RTL_W8(tp, Config2, RTL_R8(tp, Config2) | ClkReqEn);
 
                switch (tp->mac_version) {
-               case RTL_GIGA_MAC_VER_45 ... RTL_GIGA_MAC_VER_48:
-               case RTL_GIGA_MAC_VER_60 ... RTL_GIGA_MAC_VER_63:
+               case RTL_GIGA_MAC_VER_46 ... RTL_GIGA_MAC_VER_48:
+               case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_63:
                        /* reset ephy tx/rx disable timer */
                        r8168_mac_ocp_modify(tp, 0xe094, 0xff00, 0);
                        /* chip can trigger L1.2 */
@@ -2712,8 +2687,8 @@ static void rtl_hw_aspm_clkreq_enable(struct rtl8169_private *tp, bool enable)
                }
        } else {
                switch (tp->mac_version) {
-               case RTL_GIGA_MAC_VER_45 ... RTL_GIGA_MAC_VER_48:
-               case RTL_GIGA_MAC_VER_60 ... RTL_GIGA_MAC_VER_63:
+               case RTL_GIGA_MAC_VER_46 ... RTL_GIGA_MAC_VER_48:
+               case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_63:
                        r8168_mac_ocp_modify(tp, 0xe092, 0x00ff, 0);
                        break;
                default:
@@ -3288,45 +3263,6 @@ static void rtl_hw_start_8168ep(struct rtl8169_private *tp)
        rtl_pcie_state_l2l3_disable(tp);
 }
 
-static void rtl_hw_start_8168ep_1(struct rtl8169_private *tp)
-{
-       static const struct ephy_info e_info_8168ep_1[] = {
-               { 0x00, 0xffff, 0x10ab },
-               { 0x06, 0xffff, 0xf030 },
-               { 0x08, 0xffff, 0x2006 },
-               { 0x0d, 0xffff, 0x1666 },
-               { 0x0c, 0x3ff0, 0x0000 }
-       };
-
-       /* disable aspm and clock request before access ephy */
-       rtl_hw_aspm_clkreq_enable(tp, false);
-       rtl_ephy_init(tp, e_info_8168ep_1);
-
-       rtl_hw_start_8168ep(tp);
-
-       rtl_hw_aspm_clkreq_enable(tp, true);
-}
-
-static void rtl_hw_start_8168ep_2(struct rtl8169_private *tp)
-{
-       static const struct ephy_info e_info_8168ep_2[] = {
-               { 0x00, 0xffff, 0x10a3 },
-               { 0x19, 0xffff, 0xfc00 },
-               { 0x1e, 0xffff, 0x20ea }
-       };
-
-       /* disable aspm and clock request before access ephy */
-       rtl_hw_aspm_clkreq_enable(tp, false);
-       rtl_ephy_init(tp, e_info_8168ep_2);
-
-       rtl_hw_start_8168ep(tp);
-
-       RTL_W8(tp, DLLPR, RTL_R8(tp, DLLPR) & ~PFM_EN);
-       RTL_W8(tp, MISC_1, RTL_R8(tp, MISC_1) & ~PFM_D3COLD_EN);
-
-       rtl_hw_aspm_clkreq_enable(tp, true);
-}
-
 static void rtl_hw_start_8168ep_3(struct rtl8169_private *tp)
 {
        static const struct ephy_info e_info_8168ep_3[] = {
@@ -3625,46 +3561,6 @@ static void rtl_hw_start_8125_common(struct rtl8169_private *tp)
        udelay(10);
 }
 
-static void rtl_hw_start_8125a_1(struct rtl8169_private *tp)
-{
-       static const struct ephy_info e_info_8125a_1[] = {
-               { 0x01, 0xffff, 0xa812 },
-               { 0x09, 0xffff, 0x520c },
-               { 0x04, 0xffff, 0xd000 },
-               { 0x0d, 0xffff, 0xf702 },
-               { 0x0a, 0xffff, 0x8653 },
-               { 0x06, 0xffff, 0x001e },
-               { 0x08, 0xffff, 0x3595 },
-               { 0x20, 0xffff, 0x9455 },
-               { 0x21, 0xffff, 0x99ff },
-               { 0x02, 0xffff, 0x6046 },
-               { 0x29, 0xffff, 0xfe00 },
-               { 0x23, 0xffff, 0xab62 },
-
-               { 0x41, 0xffff, 0xa80c },
-               { 0x49, 0xffff, 0x520c },
-               { 0x44, 0xffff, 0xd000 },
-               { 0x4d, 0xffff, 0xf702 },
-               { 0x4a, 0xffff, 0x8653 },
-               { 0x46, 0xffff, 0x001e },
-               { 0x48, 0xffff, 0x3595 },
-               { 0x60, 0xffff, 0x9455 },
-               { 0x61, 0xffff, 0x99ff },
-               { 0x42, 0xffff, 0x6046 },
-               { 0x69, 0xffff, 0xfe00 },
-               { 0x63, 0xffff, 0xab62 },
-       };
-
-       rtl_set_def_aspm_entry_latency(tp);
-
-       /* disable aspm and clock request before access ephy */
-       rtl_hw_aspm_clkreq_enable(tp, false);
-       rtl_ephy_init(tp, e_info_8125a_1);
-
-       rtl_hw_start_8125_common(tp);
-       rtl_hw_aspm_clkreq_enable(tp, true);
-}
-
 static void rtl_hw_start_8125a_2(struct rtl8169_private *tp)
 {
        static const struct ephy_info e_info_8125a_2[] = {
@@ -3721,10 +3617,7 @@ static void rtl_hw_config(struct rtl8169_private *tp)
                [RTL_GIGA_MAC_VER_09] = rtl_hw_start_8102e_2,
                [RTL_GIGA_MAC_VER_10] = NULL,
                [RTL_GIGA_MAC_VER_11] = rtl_hw_start_8168b,
-               [RTL_GIGA_MAC_VER_12] = rtl_hw_start_8168b,
-               [RTL_GIGA_MAC_VER_13] = NULL,
                [RTL_GIGA_MAC_VER_14] = rtl_hw_start_8401,
-               [RTL_GIGA_MAC_VER_16] = NULL,
                [RTL_GIGA_MAC_VER_17] = rtl_hw_start_8168b,
                [RTL_GIGA_MAC_VER_18] = rtl_hw_start_8168cp_1,
                [RTL_GIGA_MAC_VER_19] = rtl_hw_start_8168c_1,
@@ -3748,20 +3641,14 @@ static void rtl_hw_config(struct rtl8169_private *tp)
                [RTL_GIGA_MAC_VER_38] = rtl_hw_start_8411,
                [RTL_GIGA_MAC_VER_39] = rtl_hw_start_8106,
                [RTL_GIGA_MAC_VER_40] = rtl_hw_start_8168g_1,
-               [RTL_GIGA_MAC_VER_41] = rtl_hw_start_8168g_1,
                [RTL_GIGA_MAC_VER_42] = rtl_hw_start_8168g_2,
                [RTL_GIGA_MAC_VER_43] = rtl_hw_start_8168g_2,
                [RTL_GIGA_MAC_VER_44] = rtl_hw_start_8411_2,
-               [RTL_GIGA_MAC_VER_45] = rtl_hw_start_8168h_1,
                [RTL_GIGA_MAC_VER_46] = rtl_hw_start_8168h_1,
-               [RTL_GIGA_MAC_VER_47] = rtl_hw_start_8168h_1,
                [RTL_GIGA_MAC_VER_48] = rtl_hw_start_8168h_1,
-               [RTL_GIGA_MAC_VER_49] = rtl_hw_start_8168ep_1,
-               [RTL_GIGA_MAC_VER_50] = rtl_hw_start_8168ep_2,
                [RTL_GIGA_MAC_VER_51] = rtl_hw_start_8168ep_3,
                [RTL_GIGA_MAC_VER_52] = rtl_hw_start_8117,
                [RTL_GIGA_MAC_VER_53] = rtl_hw_start_8117,
-               [RTL_GIGA_MAC_VER_60] = rtl_hw_start_8125a_1,
                [RTL_GIGA_MAC_VER_61] = rtl_hw_start_8125a_2,
                [RTL_GIGA_MAC_VER_63] = rtl_hw_start_8125b,
        };
@@ -4156,7 +4043,6 @@ static unsigned int rtl_quirk_packet_padto(struct rtl8169_private *tp,
 
        switch (tp->mac_version) {
        case RTL_GIGA_MAC_VER_34:
-       case RTL_GIGA_MAC_VER_60:
        case RTL_GIGA_MAC_VER_61:
        case RTL_GIGA_MAC_VER_63:
                padto = max_t(unsigned int, padto, ETH_ZLEN);
@@ -4677,8 +4563,7 @@ static void r8169_phylink_handler(struct net_device *ndev)
                pm_runtime_idle(&tp->pci_dev->dev);
        }
 
-       if (net_ratelimit())
-               phy_print_status(tp->phydev);
+       phy_print_status(tp->phydev);
 }
 
 static int r8169_phy_connect(struct rtl8169_private *tp)
@@ -4954,23 +4839,6 @@ static const struct dev_pm_ops rtl8169_pm_ops = {
                       rtl8169_runtime_idle)
 };
 
-static void rtl_wol_shutdown_quirk(struct rtl8169_private *tp)
-{
-       /* WoL fails with 8168b when the receiver is disabled. */
-       switch (tp->mac_version) {
-       case RTL_GIGA_MAC_VER_11:
-       case RTL_GIGA_MAC_VER_12:
-       case RTL_GIGA_MAC_VER_17:
-               pci_clear_master(tp->pci_dev);
-
-               RTL_W8(tp, ChipCmd, CmdRxEnb);
-               rtl_pci_commit(tp);
-               break;
-       default:
-               break;
-       }
-}
-
 static void rtl_shutdown(struct pci_dev *pdev)
 {
        struct rtl8169_private *tp = pci_get_drvdata(pdev);
@@ -4984,9 +4852,6 @@ static void rtl_shutdown(struct pci_dev *pdev)
 
        if (system_state == SYSTEM_POWER_OFF &&
            tp->dash_type == RTL_DASH_NONE) {
-               if (tp->saved_wolopts)
-                       rtl_wol_shutdown_quirk(tp);
-
                pci_wake_from_d3(pdev, tp->saved_wolopts);
                pci_set_power_state(pdev, PCI_D3hot);
        }
@@ -5194,13 +5059,13 @@ static void rtl_hw_init_8125(struct rtl8169_private *tp)
 static void rtl_hw_initialize(struct rtl8169_private *tp)
 {
        switch (tp->mac_version) {
-       case RTL_GIGA_MAC_VER_49 ... RTL_GIGA_MAC_VER_53:
+       case RTL_GIGA_MAC_VER_51 ... RTL_GIGA_MAC_VER_53:
                rtl8168ep_stop_cmac(tp);
                fallthrough;
        case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_48:
                rtl_hw_init_8168g(tp);
                break;
-       case RTL_GIGA_MAC_VER_60 ... RTL_GIGA_MAC_VER_63:
+       case RTL_GIGA_MAC_VER_61 ... RTL_GIGA_MAC_VER_63:
                rtl_hw_init_8125(tp);
                break;
        default:
@@ -5220,7 +5085,6 @@ static int rtl_jumbo_max(struct rtl8169_private *tp)
                return JUMBO_7K;
        /* RTL8168b */
        case RTL_GIGA_MAC_VER_11:
-       case RTL_GIGA_MAC_VER_12:
        case RTL_GIGA_MAC_VER_17:
                return JUMBO_4K;
        /* RTL8168c */
@@ -5231,37 +5095,6 @@ static int rtl_jumbo_max(struct rtl8169_private *tp)
        }
 }
 
-static void rtl_disable_clk(void *data)
-{
-       clk_disable_unprepare(data);
-}
-
-static int rtl_get_ether_clk(struct rtl8169_private *tp)
-{
-       struct device *d = tp_to_dev(tp);
-       struct clk *clk;
-       int rc;
-
-       clk = devm_clk_get(d, "ether_clk");
-       if (IS_ERR(clk)) {
-               rc = PTR_ERR(clk);
-               if (rc == -ENOENT)
-                       /* clk-core allows NULL (for suspend / resume) */
-                       rc = 0;
-               else
-                       dev_err_probe(d, rc, "failed to get clk\n");
-       } else {
-               tp->clk = clk;
-               rc = clk_prepare_enable(clk);
-               if (rc)
-                       dev_err(d, "failed to enable clk: %d\n", rc);
-               else
-                       rc = devm_add_action_or_reset(d, rtl_disable_clk, clk);
-       }
-
-       return rc;
-}
-
 static void rtl_init_mac_address(struct rtl8169_private *tp)
 {
        u8 mac_addr[ETH_ALEN] __aligned(2) = {};
@@ -5291,7 +5124,7 @@ done:
 /* register is set if system vendor successfully tested ASPM 1.2 */
 static bool rtl_aspm_is_safe(struct rtl8169_private *tp)
 {
-       if (tp->mac_version >= RTL_GIGA_MAC_VER_60 &&
+       if (tp->mac_version >= RTL_GIGA_MAC_VER_61 &&
            r8168_mac_ocp_read(tp, 0xc0b2) & 0xf)
                return true;
 
@@ -5325,9 +5158,9 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
                return -ENOMEM;
 
        /* Get the *optional* external "ether_clk" used on some boards */
-       rc = rtl_get_ether_clk(tp);
-       if (rc)
-               return rc;
+       tp->clk = devm_clk_get_optional_enabled(&pdev->dev, "ether_clk");
+       if (IS_ERR(tp->clk))
+               return dev_err_probe(&pdev->dev, PTR_ERR(tp->clk), "failed to get ether_clk\n");
 
        /* enable device (incl. PCI PM wakeup and hotplug setup) */
        rc = pcim_enable_device(pdev);
@@ -5346,12 +5179,6 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
                return -ENODEV;
        }
 
-       /* check for weird/broken PCI region reporting */
-       if (pci_resource_len(pdev, region) < R8169_REGS_SIZE) {
-               dev_err(&pdev->dev, "Invalid PCI region size(s), aborting\n");
-               return -ENODEV;
-       }
-
        rc = pcim_iomap_regions(pdev, BIT(region), KBUILD_MODNAME);
        if (rc < 0) {
                dev_err(&pdev->dev, "cannot remap MMIO, aborting\n");
@@ -5378,7 +5205,7 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
         */
        if (rtl_aspm_is_safe(tp))
                rc = 0;
-       else if (tp->mac_version >= RTL_GIGA_MAC_VER_45)
+       else if (tp->mac_version >= RTL_GIGA_MAC_VER_46)
                rc = pci_disable_link_state(pdev, PCIE_LINK_STATE_L1_2);
        else
                rc = pci_disable_link_state(pdev, PCIE_LINK_STATE_L1);
@@ -5413,7 +5240,7 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 
        dev->ethtool_ops = &rtl8169_ethtool_ops;
 
-       netif_napi_add(dev, &tp->napi, rtl8169_poll, NAPI_POLL_WEIGHT);
+       netif_napi_add(dev, &tp->napi, rtl8169_poll);
 
        dev->hw_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM |
                           NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;