OSDN Git Service

r8169: remove calls to rtl_set_rx_mode
[uclinux-h8/linux.git] / drivers / net / ethernet / realtek / r8169.c
index 7a513b9..c7b9301 100644 (file)
@@ -171,12 +171,11 @@ enum rtl_tx_desc_version {
 #define JUMBO_7K       (7*1024 - ETH_HLEN - 2)
 #define JUMBO_9K       (9*1024 - ETH_HLEN - 2)
 
-#define _R(NAME,TD,FW,SZ,B) {  \
+#define _R(NAME,TD,FW,SZ) {    \
        .name = NAME,           \
        .txd_version = TD,      \
        .fw_name = FW,          \
        .jumbo_max = SZ,        \
-       .jumbo_tx_csum = B      \
 }
 
 static const struct {
@@ -184,135 +183,111 @@ static const struct {
        enum rtl_tx_desc_version txd_version;
        const char *fw_name;
        u16 jumbo_max;
-       bool jumbo_tx_csum;
 } rtl_chip_infos[] = {
        /* PCI devices. */
        [RTL_GIGA_MAC_VER_01] =
-               _R("RTL8169",           RTL_TD_0, NULL, JUMBO_7K, true),
+               _R("RTL8169",           RTL_TD_0, NULL, JUMBO_7K),
        [RTL_GIGA_MAC_VER_02] =
-               _R("RTL8169s",          RTL_TD_0, NULL, JUMBO_7K, true),
+               _R("RTL8169s",          RTL_TD_0, NULL, JUMBO_7K),
        [RTL_GIGA_MAC_VER_03] =
-               _R("RTL8110s",          RTL_TD_0, NULL, JUMBO_7K, true),
+               _R("RTL8110s",          RTL_TD_0, NULL, JUMBO_7K),
        [RTL_GIGA_MAC_VER_04] =
-               _R("RTL8169sb/8110sb",  RTL_TD_0, NULL, JUMBO_7K, true),
+               _R("RTL8169sb/8110sb",  RTL_TD_0, NULL, JUMBO_7K),
        [RTL_GIGA_MAC_VER_05] =
-               _R("RTL8169sc/8110sc",  RTL_TD_0, NULL, JUMBO_7K, true),
+               _R("RTL8169sc/8110sc",  RTL_TD_0, NULL, JUMBO_7K),
        [RTL_GIGA_MAC_VER_06] =
-               _R("RTL8169sc/8110sc",  RTL_TD_0, NULL, JUMBO_7K, true),
+               _R("RTL8169sc/8110sc",  RTL_TD_0, NULL, JUMBO_7K),
        /* PCI-E devices. */
        [RTL_GIGA_MAC_VER_07] =
-               _R("RTL8102e",          RTL_TD_1, NULL, JUMBO_1K, true),
+               _R("RTL8102e",          RTL_TD_1, NULL, JUMBO_1K),
        [RTL_GIGA_MAC_VER_08] =
-               _R("RTL8102e",          RTL_TD_1, NULL, JUMBO_1K, true),
+               _R("RTL8102e",          RTL_TD_1, NULL, JUMBO_1K),
        [RTL_GIGA_MAC_VER_09] =
-               _R("RTL8102e",          RTL_TD_1, NULL, JUMBO_1K, true),
+               _R("RTL8102e",          RTL_TD_1, NULL, JUMBO_1K),
        [RTL_GIGA_MAC_VER_10] =
-               _R("RTL8101e",          RTL_TD_0, NULL, JUMBO_1K, true),
+               _R("RTL8101e",          RTL_TD_0, NULL, JUMBO_1K),
        [RTL_GIGA_MAC_VER_11] =
-               _R("RTL8168b/8111b",    RTL_TD_0, NULL, JUMBO_4K, false),
+               _R("RTL8168b/8111b",    RTL_TD_0, NULL, JUMBO_4K),
        [RTL_GIGA_MAC_VER_12] =
-               _R("RTL8168b/8111b",    RTL_TD_0, NULL, JUMBO_4K, false),
+               _R("RTL8168b/8111b",    RTL_TD_0, NULL, JUMBO_4K),
        [RTL_GIGA_MAC_VER_13] =
-               _R("RTL8101e",          RTL_TD_0, NULL, JUMBO_1K, true),
+               _R("RTL8101e",          RTL_TD_0, NULL, JUMBO_1K),
        [RTL_GIGA_MAC_VER_14] =
-               _R("RTL8100e",          RTL_TD_0, NULL, JUMBO_1K, true),
+               _R("RTL8100e",          RTL_TD_0, NULL, JUMBO_1K),
        [RTL_GIGA_MAC_VER_15] =
-               _R("RTL8100e",          RTL_TD_0, NULL, JUMBO_1K, true),
+               _R("RTL8100e",          RTL_TD_0, NULL, JUMBO_1K),
        [RTL_GIGA_MAC_VER_16] =
-               _R("RTL8101e",          RTL_TD_0, NULL, JUMBO_1K, true),
+               _R("RTL8101e",          RTL_TD_0, NULL, JUMBO_1K),
        [RTL_GIGA_MAC_VER_17] =
-               _R("RTL8168b/8111b",    RTL_TD_0, NULL, JUMBO_4K, false),
+               _R("RTL8168b/8111b",    RTL_TD_0, NULL, JUMBO_4K),
        [RTL_GIGA_MAC_VER_18] =
-               _R("RTL8168cp/8111cp",  RTL_TD_1, NULL, JUMBO_6K, false),
+               _R("RTL8168cp/8111cp",  RTL_TD_1, NULL, JUMBO_6K),
        [RTL_GIGA_MAC_VER_19] =
-               _R("RTL8168c/8111c",    RTL_TD_1, NULL, JUMBO_6K, false),
+               _R("RTL8168c/8111c",    RTL_TD_1, NULL, JUMBO_6K),
        [RTL_GIGA_MAC_VER_20] =
-               _R("RTL8168c/8111c",    RTL_TD_1, NULL, JUMBO_6K, false),
+               _R("RTL8168c/8111c",    RTL_TD_1, NULL, JUMBO_6K),
        [RTL_GIGA_MAC_VER_21] =
-               _R("RTL8168c/8111c",    RTL_TD_1, NULL, JUMBO_6K, false),
+               _R("RTL8168c/8111c",    RTL_TD_1, NULL, JUMBO_6K),
        [RTL_GIGA_MAC_VER_22] =
-               _R("RTL8168c/8111c",    RTL_TD_1, NULL, JUMBO_6K, false),
+               _R("RTL8168c/8111c",    RTL_TD_1, NULL, JUMBO_6K),
        [RTL_GIGA_MAC_VER_23] =
-               _R("RTL8168cp/8111cp",  RTL_TD_1, NULL, JUMBO_6K, false),
+               _R("RTL8168cp/8111cp",  RTL_TD_1, NULL, JUMBO_6K),
        [RTL_GIGA_MAC_VER_24] =
-               _R("RTL8168cp/8111cp",  RTL_TD_1, NULL, JUMBO_6K, false),
+               _R("RTL8168cp/8111cp",  RTL_TD_1, NULL, JUMBO_6K),
        [RTL_GIGA_MAC_VER_25] =
-               _R("RTL8168d/8111d",    RTL_TD_1, FIRMWARE_8168D_1,
-                                                       JUMBO_9K, false),
+               _R("RTL8168d/8111d",    RTL_TD_1, FIRMWARE_8168D_1, JUMBO_9K),
        [RTL_GIGA_MAC_VER_26] =
-               _R("RTL8168d/8111d",    RTL_TD_1, FIRMWARE_8168D_2,
-                                                       JUMBO_9K, false),
+               _R("RTL8168d/8111d",    RTL_TD_1, FIRMWARE_8168D_2, JUMBO_9K),
        [RTL_GIGA_MAC_VER_27] =
-               _R("RTL8168dp/8111dp",  RTL_TD_1, NULL, JUMBO_9K, false),
+               _R("RTL8168dp/8111dp",  RTL_TD_1, NULL, JUMBO_9K),
        [RTL_GIGA_MAC_VER_28] =
-               _R("RTL8168dp/8111dp",  RTL_TD_1, NULL, JUMBO_9K, false),
+               _R("RTL8168dp/8111dp",  RTL_TD_1, NULL, JUMBO_9K),
        [RTL_GIGA_MAC_VER_29] =
-               _R("RTL8105e",          RTL_TD_1, FIRMWARE_8105E_1,
-                                                       JUMBO_1K, true),
+               _R("RTL8105e",          RTL_TD_1, FIRMWARE_8105E_1, JUMBO_1K),
        [RTL_GIGA_MAC_VER_30] =
-               _R("RTL8105e",          RTL_TD_1, FIRMWARE_8105E_1,
-                                                       JUMBO_1K, true),
+               _R("RTL8105e",          RTL_TD_1, FIRMWARE_8105E_1, JUMBO_1K),
        [RTL_GIGA_MAC_VER_31] =
-               _R("RTL8168dp/8111dp",  RTL_TD_1, NULL, JUMBO_9K, false),
+               _R("RTL8168dp/8111dp",  RTL_TD_1, NULL, JUMBO_9K),
        [RTL_GIGA_MAC_VER_32] =
-               _R("RTL8168e/8111e",    RTL_TD_1, FIRMWARE_8168E_1,
-                                                       JUMBO_9K, false),
+               _R("RTL8168e/8111e",    RTL_TD_1, FIRMWARE_8168E_1, JUMBO_9K),
        [RTL_GIGA_MAC_VER_33] =
-               _R("RTL8168e/8111e",    RTL_TD_1, FIRMWARE_8168E_2,
-                                                       JUMBO_9K, false),
+               _R("RTL8168e/8111e",    RTL_TD_1, FIRMWARE_8168E_2, JUMBO_9K),
        [RTL_GIGA_MAC_VER_34] =
-               _R("RTL8168evl/8111evl",RTL_TD_1, FIRMWARE_8168E_3,
-                                                       JUMBO_9K, false),
+               _R("RTL8168evl/8111evl",RTL_TD_1, FIRMWARE_8168E_3, JUMBO_9K),
        [RTL_GIGA_MAC_VER_35] =
-               _R("RTL8168f/8111f",    RTL_TD_1, FIRMWARE_8168F_1,
-                                                       JUMBO_9K, false),
+               _R("RTL8168f/8111f",    RTL_TD_1, FIRMWARE_8168F_1, JUMBO_9K),
        [RTL_GIGA_MAC_VER_36] =
-               _R("RTL8168f/8111f",    RTL_TD_1, FIRMWARE_8168F_2,
-                                                       JUMBO_9K, false),
+               _R("RTL8168f/8111f",    RTL_TD_1, FIRMWARE_8168F_2, JUMBO_9K),
        [RTL_GIGA_MAC_VER_37] =
-               _R("RTL8402",           RTL_TD_1, FIRMWARE_8402_1,
-                                                       JUMBO_1K, true),
+               _R("RTL8402",           RTL_TD_1, FIRMWARE_8402_1,  JUMBO_1K),
        [RTL_GIGA_MAC_VER_38] =
-               _R("RTL8411",           RTL_TD_1, FIRMWARE_8411_1,
-                                                       JUMBO_9K, false),
+               _R("RTL8411",           RTL_TD_1, FIRMWARE_8411_1,  JUMBO_9K),
        [RTL_GIGA_MAC_VER_39] =
-               _R("RTL8106e",          RTL_TD_1, FIRMWARE_8106E_1,
-                                                       JUMBO_1K, true),
+               _R("RTL8106e",          RTL_TD_1, FIRMWARE_8106E_1, JUMBO_1K),
        [RTL_GIGA_MAC_VER_40] =
-               _R("RTL8168g/8111g",    RTL_TD_1, FIRMWARE_8168G_2,
-                                                       JUMBO_9K, false),
+               _R("RTL8168g/8111g",    RTL_TD_1, FIRMWARE_8168G_2, JUMBO_9K),
        [RTL_GIGA_MAC_VER_41] =
-               _R("RTL8168g/8111g",    RTL_TD_1, NULL, JUMBO_9K, false),
+               _R("RTL8168g/8111g",    RTL_TD_1, NULL, JUMBO_9K),
        [RTL_GIGA_MAC_VER_42] =
-               _R("RTL8168g/8111g",    RTL_TD_1, FIRMWARE_8168G_3,
-                                                       JUMBO_9K, false),
+               _R("RTL8168g/8111g",    RTL_TD_1, FIRMWARE_8168G_3, JUMBO_9K),
        [RTL_GIGA_MAC_VER_43] =
-               _R("RTL8106e",          RTL_TD_1, FIRMWARE_8106E_2,
-                                                       JUMBO_1K, true),
+               _R("RTL8106e",          RTL_TD_1, FIRMWARE_8106E_2, JUMBO_1K),
        [RTL_GIGA_MAC_VER_44] =
-               _R("RTL8411",           RTL_TD_1, FIRMWARE_8411_2,
-                                                       JUMBO_9K, false),
+               _R("RTL8411",           RTL_TD_1, FIRMWARE_8411_2,  JUMBO_9K),
        [RTL_GIGA_MAC_VER_45] =
-               _R("RTL8168h/8111h",    RTL_TD_1, FIRMWARE_8168H_1,
-                                                       JUMBO_9K, false),
+               _R("RTL8168h/8111h",    RTL_TD_1, FIRMWARE_8168H_1, JUMBO_9K),
        [RTL_GIGA_MAC_VER_46] =
-               _R("RTL8168h/8111h",    RTL_TD_1, FIRMWARE_8168H_2,
-                                                       JUMBO_9K, false),
+               _R("RTL8168h/8111h",    RTL_TD_1, FIRMWARE_8168H_2, JUMBO_9K),
        [RTL_GIGA_MAC_VER_47] =
-               _R("RTL8107e",          RTL_TD_1, FIRMWARE_8107E_1,
-                                                       JUMBO_1K, false),
+               _R("RTL8107e",          RTL_TD_1, FIRMWARE_8107E_1, JUMBO_1K),
        [RTL_GIGA_MAC_VER_48] =
-               _R("RTL8107e",          RTL_TD_1, FIRMWARE_8107E_2,
-                                                       JUMBO_1K, false),
+               _R("RTL8107e",          RTL_TD_1, FIRMWARE_8107E_2, JUMBO_1K),
        [RTL_GIGA_MAC_VER_49] =
-               _R("RTL8168ep/8111ep",  RTL_TD_1, NULL,
-                                                       JUMBO_9K, false),
+               _R("RTL8168ep/8111ep",  RTL_TD_1, NULL, JUMBO_9K),
        [RTL_GIGA_MAC_VER_50] =
-               _R("RTL8168ep/8111ep",  RTL_TD_1, NULL,
-                                                       JUMBO_9K, false),
+               _R("RTL8168ep/8111ep",  RTL_TD_1, NULL, JUMBO_9K),
        [RTL_GIGA_MAC_VER_51] =
-               _R("RTL8168ep/8111ep",  RTL_TD_1, NULL,
-                                                       JUMBO_9K, false),
+               _R("RTL8168ep/8111ep",  RTL_TD_1, NULL, JUMBO_9K),
 };
 #undef _R
 
@@ -624,6 +599,7 @@ enum rtl_register_content {
        RxChkSum        = (1 << 5),
        PCIDAC          = (1 << 4),
        PCIMulRW        = (1 << 3),
+#define INTT_MASK      GENMASK(1, 0)
        INTT_0          = 0x0000,       // 8168
        INTT_1          = 0x0001,       // 8168
        INTT_2          = 0x0002,       // 8168
@@ -714,6 +690,7 @@ enum rtl_rx_desc_bit {
 };
 
 #define RsvdMask       0x3fffc000
+#define CPCMD_QUIRK_MASK       (Normal_mode | RxVlan | RxChkSum | INTT_MASK)
 
 struct TxDesc {
        __le32 opts1;
@@ -776,7 +753,6 @@ struct rtl8169_private {
        struct net_device *dev;
        struct napi_struct napi;
        u32 msg_enable;
-       u16 txd_version;
        u16 mac_version;
        u32 cur_rx; /* Index into the Rx descriptor buffer of next Rx pkt. */
        u32 cur_tx; /* Index into the Tx descriptor buffer of next Rx pkt. */
@@ -836,7 +812,6 @@ struct rtl8169_private {
        struct rtl8169_counters *counters;
        struct rtl8169_tc_offsets tc_offset;
        u32 saved_wolopts;
-       u32 opts1_mask;
 
        struct rtl_fw {
                const struct firmware *fw;
@@ -1956,18 +1931,20 @@ static netdev_features_t rtl8169_fix_features(struct net_device *dev,
                features &= ~NETIF_F_ALL_TSO;
 
        if (dev->mtu > JUMBO_1K &&
-           !rtl_chip_infos[tp->mac_version].jumbo_tx_csum)
+           tp->mac_version > RTL_GIGA_MAC_VER_06)
                features &= ~NETIF_F_IP_CSUM;
 
        return features;
 }
 
-static void __rtl8169_set_features(struct net_device *dev,
-                                  netdev_features_t features)
+static int rtl8169_set_features(struct net_device *dev,
+                               netdev_features_t features)
 {
        struct rtl8169_private *tp = netdev_priv(dev);
        u32 rx_config;
 
+       rtl_lock_work(tp);
+
        rx_config = RTL_R32(tp, RxConfig);
        if (features & NETIF_F_RXALL)
                rx_config |= (AcceptErr | AcceptRunt);
@@ -1986,28 +1963,14 @@ static void __rtl8169_set_features(struct net_device *dev,
        else
                tp->cp_cmd &= ~RxVlan;
 
-       tp->cp_cmd |= RTL_R16(tp, CPlusCmd) & ~(RxVlan | RxChkSum);
-
        RTL_W16(tp, CPlusCmd, tp->cp_cmd);
        RTL_R16(tp, CPlusCmd);
-}
 
-static int rtl8169_set_features(struct net_device *dev,
-                               netdev_features_t features)
-{
-       struct rtl8169_private *tp = netdev_priv(dev);
-
-       features &= NETIF_F_RXALL | NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_RX;
-
-       rtl_lock_work(tp);
-       if (features ^ dev->features)
-               __rtl8169_set_features(dev, features);
        rtl_unlock_work(tp);
 
        return 0;
 }
 
-
 static inline u32 rtl8169_tx_vlan_tag(struct sk_buff *skb)
 {
        return (skb_vlan_tag_present(skb)) ?
@@ -2151,9 +2114,8 @@ DECLARE_RTL_COND(rtl_counters_cond)
        return RTL_R32(tp, CounterAddrLow) & (CounterReset | CounterDump);
 }
 
-static bool rtl8169_do_counters(struct net_device *dev, u32 counter_cmd)
+static bool rtl8169_do_counters(struct rtl8169_private *tp, u32 counter_cmd)
 {
-       struct rtl8169_private *tp = netdev_priv(dev);
        dma_addr_t paddr = tp->counters_phys_addr;
        u32 cmd;
 
@@ -2166,10 +2128,8 @@ static bool rtl8169_do_counters(struct net_device *dev, u32 counter_cmd)
        return rtl_udelay_loop_wait_low(tp, &rtl_counters_cond, 10, 1000);
 }
 
-static bool rtl8169_reset_counters(struct net_device *dev)
+static bool rtl8169_reset_counters(struct rtl8169_private *tp)
 {
-       struct rtl8169_private *tp = netdev_priv(dev);
-
        /*
         * Versions prior to RTL_GIGA_MAC_VER_19 don't support resetting the
         * tally counters.
@@ -2177,13 +2137,11 @@ static bool rtl8169_reset_counters(struct net_device *dev)
        if (tp->mac_version < RTL_GIGA_MAC_VER_19)
                return true;
 
-       return rtl8169_do_counters(dev, CounterReset);
+       return rtl8169_do_counters(tp, CounterReset);
 }
 
-static bool rtl8169_update_counters(struct net_device *dev)
+static bool rtl8169_update_counters(struct rtl8169_private *tp)
 {
-       struct rtl8169_private *tp = netdev_priv(dev);
-
        /*
         * Some chips are unable to dump tally counters when the receiver
         * is disabled.
@@ -2191,12 +2149,11 @@ static bool rtl8169_update_counters(struct net_device *dev)
        if ((RTL_R8(tp, ChipCmd) & CmdRxEnb) == 0)
                return true;
 
-       return rtl8169_do_counters(dev, CounterDump);
+       return rtl8169_do_counters(tp, CounterDump);
 }
 
-static bool rtl8169_init_counter_offsets(struct net_device *dev)
+static bool rtl8169_init_counter_offsets(struct rtl8169_private *tp)
 {
-       struct rtl8169_private *tp = netdev_priv(dev);
        struct rtl8169_counters *counters = tp->counters;
        bool ret = false;
 
@@ -2219,10 +2176,10 @@ static bool rtl8169_init_counter_offsets(struct net_device *dev)
                return true;
 
        /* If both, reset and update fail, propagate to caller. */
-       if (rtl8169_reset_counters(dev))
+       if (rtl8169_reset_counters(tp))
                ret = true;
 
-       if (rtl8169_update_counters(dev))
+       if (rtl8169_update_counters(tp))
                ret = true;
 
        tp->tc_offset.tx_errors = counters->tx_errors;
@@ -2245,7 +2202,7 @@ static void rtl8169_get_ethtool_stats(struct net_device *dev,
        pm_runtime_get_noresume(d);
 
        if (pm_runtime_active(d))
-               rtl8169_update_counters(dev);
+               rtl8169_update_counters(tp);
 
        pm_runtime_put_noidle(d);
 
@@ -2387,7 +2344,7 @@ static int rtl_get_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
        if (IS_ERR(ci))
                return PTR_ERR(ci);
 
-       scale = &ci->scalev[RTL_R16(tp, CPlusCmd) & 3];
+       scale = &ci->scalev[tp->cp_cmd & INTT_MASK];
 
        /* read IntrMitigate and adjust according to scale */
        for (w = RTL_R16(tp, IntrMitigate); w; w >>= RTL_COALESCE_SHIFT, p++) {
@@ -2486,7 +2443,7 @@ static int rtl_set_coalesce(struct net_device *dev, struct ethtool_coalesce *ec)
 
        RTL_W16(tp, IntrMitigate, swab16(w));
 
-       tp->cp_cmd = (tp->cp_cmd & ~3) | cp01;
+       tp->cp_cmd = (tp->cp_cmd & ~INTT_MASK) | cp01;
        RTL_W16(tp, CPlusCmd, tp->cp_cmd);
        RTL_R16(tp, CPlusCmd);
 
@@ -2516,7 +2473,7 @@ static const struct ethtool_ops rtl8169_ethtool_ops = {
 };
 
 static void rtl8169_get_mac_version(struct rtl8169_private *tp,
-                                   struct net_device *dev, u8 default_version)
+                                   u8 default_version)
 {
        /*
         * The driver currently handles the 8168Bf and the 8168Be identically
@@ -2556,12 +2513,10 @@ static void rtl8169_get_mac_version(struct rtl8169_private *tp,
 
                /* 8168E family. */
                { 0x7c800000, 0x2c800000,       RTL_GIGA_MAC_VER_34 },
-               { 0x7cf00000, 0x2c200000,       RTL_GIGA_MAC_VER_33 },
                { 0x7cf00000, 0x2c100000,       RTL_GIGA_MAC_VER_32 },
                { 0x7c800000, 0x2c000000,       RTL_GIGA_MAC_VER_33 },
 
                /* 8168D family. */
-               { 0x7cf00000, 0x28300000,       RTL_GIGA_MAC_VER_26 },
                { 0x7cf00000, 0x28100000,       RTL_GIGA_MAC_VER_25 },
                { 0x7c800000, 0x28000000,       RTL_GIGA_MAC_VER_26 },
 
@@ -2571,32 +2526,24 @@ static void rtl8169_get_mac_version(struct rtl8169_private *tp,
                { 0x7cf00000, 0x28b00000,       RTL_GIGA_MAC_VER_31 },
 
                /* 8168C family. */
-               { 0x7cf00000, 0x3cb00000,       RTL_GIGA_MAC_VER_24 },
                { 0x7cf00000, 0x3c900000,       RTL_GIGA_MAC_VER_23 },
                { 0x7cf00000, 0x3c800000,       RTL_GIGA_MAC_VER_18 },
                { 0x7c800000, 0x3c800000,       RTL_GIGA_MAC_VER_24 },
                { 0x7cf00000, 0x3c000000,       RTL_GIGA_MAC_VER_19 },
                { 0x7cf00000, 0x3c200000,       RTL_GIGA_MAC_VER_20 },
                { 0x7cf00000, 0x3c300000,       RTL_GIGA_MAC_VER_21 },
-               { 0x7cf00000, 0x3c400000,       RTL_GIGA_MAC_VER_22 },
                { 0x7c800000, 0x3c000000,       RTL_GIGA_MAC_VER_22 },
 
                /* 8168B family. */
                { 0x7cf00000, 0x38000000,       RTL_GIGA_MAC_VER_12 },
-               { 0x7cf00000, 0x38500000,       RTL_GIGA_MAC_VER_17 },
                { 0x7c800000, 0x38000000,       RTL_GIGA_MAC_VER_17 },
                { 0x7c800000, 0x30000000,       RTL_GIGA_MAC_VER_11 },
 
                /* 8101 family. */
-               { 0x7cf00000, 0x44900000,       RTL_GIGA_MAC_VER_39 },
                { 0x7c800000, 0x44800000,       RTL_GIGA_MAC_VER_39 },
                { 0x7c800000, 0x44000000,       RTL_GIGA_MAC_VER_37 },
-               { 0x7cf00000, 0x40b00000,       RTL_GIGA_MAC_VER_30 },
-               { 0x7cf00000, 0x40a00000,       RTL_GIGA_MAC_VER_30 },
                { 0x7cf00000, 0x40900000,       RTL_GIGA_MAC_VER_29 },
                { 0x7c800000, 0x40800000,       RTL_GIGA_MAC_VER_30 },
-               { 0x7cf00000, 0x34a00000,       RTL_GIGA_MAC_VER_09 },
-               { 0x7cf00000, 0x24a00000,       RTL_GIGA_MAC_VER_09 },
                { 0x7cf00000, 0x34900000,       RTL_GIGA_MAC_VER_08 },
                { 0x7cf00000, 0x24900000,       RTL_GIGA_MAC_VER_08 },
                { 0x7cf00000, 0x34800000,       RTL_GIGA_MAC_VER_07 },
@@ -2631,8 +2578,8 @@ static void rtl8169_get_mac_version(struct rtl8169_private *tp,
        tp->mac_version = p->mac_version;
 
        if (tp->mac_version == RTL_GIGA_MAC_NONE) {
-               netif_notice(tp, probe, dev,
-                            "unknown MAC, using family default\n");
+               dev_notice(tp_to_dev(tp),
+                          "unknown MAC, using family default\n");
                tp->mac_version = default_version;
        } else if (tp->mac_version == RTL_GIGA_MAC_VER_42) {
                tp->mac_version = tp->mii.supports_gmii ?
@@ -4893,7 +4840,7 @@ static void r8168_pll_power_down(struct rtl8169_private *tp)
 
        if ((tp->mac_version == RTL_GIGA_MAC_VER_23 ||
             tp->mac_version == RTL_GIGA_MAC_VER_24) &&
-           (RTL_R16(tp, CPlusCmd) & ASF)) {
+           (tp->cp_cmd & ASF)) {
                return;
        }
 
@@ -5373,15 +5320,6 @@ static void rtl_set_rx_tx_desc_registers(struct rtl8169_private *tp)
        RTL_W32(tp, RxDescAddrLow, ((u64) tp->RxPhyAddr) & DMA_BIT_MASK(32));
 }
 
-static u16 rtl_rw_cpluscmd(struct rtl8169_private *tp)
-{
-       u16 cmd;
-
-       cmd = RTL_R16(tp, CPlusCmd);
-       RTL_W16(tp, CPlusCmd, cmd);
-       return cmd;
-}
-
 static void rtl_set_rx_max_size(struct rtl8169_private *tp)
 {
        /* Low hurts. Let's disable the filtering. */
@@ -5467,31 +5405,16 @@ static void rtl_set_rx_mode(struct net_device *dev)
 
 static void rtl_hw_start_8169(struct rtl8169_private *tp)
 {
-       if (tp->mac_version == RTL_GIGA_MAC_VER_05) {
-               RTL_W16(tp, CPlusCmd, RTL_R16(tp, CPlusCmd) | PCIMulRW);
+       if (tp->mac_version == RTL_GIGA_MAC_VER_05)
                pci_write_config_byte(tp->pci_dev, PCI_CACHE_LINE_SIZE, 0x08);
-       }
 
        RTL_W8(tp, Cfg9346, Cfg9346_Unlock);
-       if (tp->mac_version == RTL_GIGA_MAC_VER_01 ||
-           tp->mac_version == RTL_GIGA_MAC_VER_02 ||
-           tp->mac_version == RTL_GIGA_MAC_VER_03 ||
-           tp->mac_version == RTL_GIGA_MAC_VER_04)
-               RTL_W8(tp, ChipCmd, CmdTxEnb | CmdRxEnb);
-
-       rtl_init_rxcfg(tp);
 
        RTL_W8(tp, EarlyTxThres, NoEarlyTx);
 
        rtl_set_rx_max_size(tp);
 
-       if (tp->mac_version == RTL_GIGA_MAC_VER_01 ||
-           tp->mac_version == RTL_GIGA_MAC_VER_02 ||
-           tp->mac_version == RTL_GIGA_MAC_VER_03 ||
-           tp->mac_version == RTL_GIGA_MAC_VER_04)
-               rtl_set_rx_tx_config_registers(tp);
-
-       tp->cp_cmd |= rtl_rw_cpluscmd(tp) | PCIMulRW;
+       tp->cp_cmd |= PCIMulRW;
 
        if (tp->mac_version == RTL_GIGA_MAC_VER_02 ||
            tp->mac_version == RTL_GIGA_MAC_VER_03) {
@@ -5511,14 +5434,9 @@ static void rtl_hw_start_8169(struct rtl8169_private *tp)
        RTL_W16(tp, IntrMitigate, 0x0000);
 
        rtl_set_rx_tx_desc_registers(tp);
+       rtl_set_rx_tx_config_registers(tp);
 
-       if (tp->mac_version != RTL_GIGA_MAC_VER_01 &&
-           tp->mac_version != RTL_GIGA_MAC_VER_02 &&
-           tp->mac_version != RTL_GIGA_MAC_VER_03 &&
-           tp->mac_version != RTL_GIGA_MAC_VER_04) {
-               RTL_W8(tp, ChipCmd, CmdTxEnb | CmdRxEnb);
-               rtl_set_rx_tx_config_registers(tp);
-       }
+       RTL_W8(tp, ChipCmd, CmdTxEnb | CmdRxEnb);
 
        RTL_W8(tp, Cfg9346, Cfg9346_Lock);
 
@@ -5527,8 +5445,6 @@ static void rtl_hw_start_8169(struct rtl8169_private *tp)
 
        RTL_W32(tp, RxMissed, 0);
 
-       rtl_set_rx_mode(tp->dev);
-
        /* no early-rx interrupts */
        RTL_W16(tp, MultiIntr, RTL_R16(tp, MultiIntr) & 0xf000);
 }
@@ -5708,22 +5624,12 @@ static void rtl_pcie_state_l2l3_enable(struct rtl8169_private *tp, bool enable)
        RTL_W8(tp, Config3, data);
 }
 
-#define R8168_CPCMD_QUIRK_MASK (\
-       EnableBist | \
-       Mac_dbgo_oe | \
-       Force_half_dup | \
-       Force_rxflow_en | \
-       Force_txflow_en | \
-       Cxpl_dbg_sel | \
-       ASF | \
-       PktCntrDisable | \
-       Mac_dbgo_sel)
-
 static void rtl_hw_start_8168bb(struct rtl8169_private *tp)
 {
        RTL_W8(tp, Config3, RTL_R8(tp, Config3) & ~Beacon_en);
 
-       RTL_W16(tp, CPlusCmd, RTL_R16(tp, CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
+       tp->cp_cmd &= CPCMD_QUIRK_MASK;
+       RTL_W16(tp, CPlusCmd, tp->cp_cmd);
 
        if (tp->dev->mtu <= ETH_DATA_LEN) {
                rtl_tx_performance_tweak(tp, PCI_EXP_DEVCTL_READRQ_4096B |
@@ -5751,7 +5657,8 @@ static void __rtl_hw_start_8168cp(struct rtl8169_private *tp)
 
        rtl_disable_clock_request(tp);
 
-       RTL_W16(tp, CPlusCmd, RTL_R16(tp, CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
+       tp->cp_cmd &= CPCMD_QUIRK_MASK;
+       RTL_W16(tp, CPlusCmd, tp->cp_cmd);
 }
 
 static void rtl_hw_start_8168cp_1(struct rtl8169_private *tp)
@@ -5780,7 +5687,8 @@ static void rtl_hw_start_8168cp_2(struct rtl8169_private *tp)
        if (tp->dev->mtu <= ETH_DATA_LEN)
                rtl_tx_performance_tweak(tp, PCI_EXP_DEVCTL_READRQ_4096B);
 
-       RTL_W16(tp, CPlusCmd, RTL_R16(tp, CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
+       tp->cp_cmd &= CPCMD_QUIRK_MASK;
+       RTL_W16(tp, CPlusCmd, tp->cp_cmd);
 }
 
 static void rtl_hw_start_8168cp_3(struct rtl8169_private *tp)
@@ -5797,7 +5705,8 @@ static void rtl_hw_start_8168cp_3(struct rtl8169_private *tp)
        if (tp->dev->mtu <= ETH_DATA_LEN)
                rtl_tx_performance_tweak(tp, PCI_EXP_DEVCTL_READRQ_4096B);
 
-       RTL_W16(tp, CPlusCmd, RTL_R16(tp, CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
+       tp->cp_cmd &= CPCMD_QUIRK_MASK;
+       RTL_W16(tp, CPlusCmd, tp->cp_cmd);
 }
 
 static void rtl_hw_start_8168c_1(struct rtl8169_private *tp)
@@ -5854,7 +5763,8 @@ static void rtl_hw_start_8168d(struct rtl8169_private *tp)
        if (tp->dev->mtu <= ETH_DATA_LEN)
                rtl_tx_performance_tweak(tp, PCI_EXP_DEVCTL_READRQ_4096B);
 
-       RTL_W16(tp, CPlusCmd, RTL_R16(tp, CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
+       tp->cp_cmd &= CPCMD_QUIRK_MASK;
+       RTL_W16(tp, CPlusCmd, tp->cp_cmd);
 }
 
 static void rtl_hw_start_8168dp(struct rtl8169_private *tp)
@@ -6323,8 +6233,8 @@ static void rtl_hw_start_8168(struct rtl8169_private *tp)
 
        rtl_set_rx_max_size(tp);
 
-       tp->cp_cmd |= RTL_R16(tp, CPlusCmd) | PktCntrDisable | INTT_1;
-
+       tp->cp_cmd &= ~INTT_MASK;
+       tp->cp_cmd |= PktCntrDisable | INTT_1;
        RTL_W16(tp, CPlusCmd, tp->cp_cmd);
 
        RTL_W16(tp, IntrMitigate, 0x5151);
@@ -6449,22 +6359,9 @@ static void rtl_hw_start_8168(struct rtl8169_private *tp)
 
        RTL_W8(tp, ChipCmd, CmdTxEnb | CmdRxEnb);
 
-       rtl_set_rx_mode(tp->dev);
-
        RTL_W16(tp, MultiIntr, RTL_R16(tp, MultiIntr) & 0xf000);
 }
 
-#define R810X_CPCMD_QUIRK_MASK (\
-       EnableBist | \
-       Mac_dbgo_oe | \
-       Force_half_dup | \
-       Force_rxflow_en | \
-       Force_txflow_en | \
-       Cxpl_dbg_sel | \
-       ASF | \
-       PktCntrDisable | \
-       Mac_dbgo_sel)
-
 static void rtl_hw_start_8102e_1(struct rtl8169_private *tp)
 {
        static const struct ephy_info e_info_8102e_1[] = {
@@ -6604,7 +6501,7 @@ static void rtl_hw_start_8101(struct rtl8169_private *tp)
 
        rtl_set_rx_max_size(tp);
 
-       tp->cp_cmd &= ~R810X_CPCMD_QUIRK_MASK;
+       tp->cp_cmd &= CPCMD_QUIRK_MASK;
        RTL_W16(tp, CPlusCmd, tp->cp_cmd);
 
        rtl_set_rx_tx_desc_registers(tp);
@@ -6653,8 +6550,6 @@ static void rtl_hw_start_8101(struct rtl8169_private *tp)
 
        RTL_W8(tp, ChipCmd, CmdTxEnb | CmdRxEnb);
 
-       rtl_set_rx_mode(tp->dev);
-
        RTL_R8(tp, IntrMask);
 
        RTL_W16(tp, MultiIntr, RTL_R16(tp, MultiIntr) & 0xf000);
@@ -7353,7 +7248,7 @@ static int rtl_rx(struct net_device *dev, struct rtl8169_private *tp, u32 budget
                struct RxDesc *desc = tp->RxDescArray + entry;
                u32 status;
 
-               status = le32_to_cpu(desc->opts1) & tp->opts1_mask;
+               status = le32_to_cpu(desc->opts1);
                if (status & DescOwn)
                        break;
 
@@ -7371,14 +7266,16 @@ static int rtl_rx(struct net_device *dev, struct rtl8169_private *tp, u32 budget
                                dev->stats.rx_length_errors++;
                        if (status & RxCRC)
                                dev->stats.rx_crc_errors++;
-                       if (status & RxFOVF) {
+                       /* RxFOVF is a reserved bit on later chip versions */
+                       if (tp->mac_version == RTL_GIGA_MAC_VER_01 &&
+                           status & RxFOVF) {
                                rtl_schedule_task(tp, RTL_FLAG_TASK_RESET_PENDING);
                                dev->stats.rx_fifo_errors++;
-                       }
-                       if ((status & (RxRUNT | RxCRC)) &&
-                           !(status & (RxRWT | RxFOVF)) &&
-                           (dev->features & NETIF_F_RXALL))
+                       } else if (status & (RxRUNT | RxCRC) &&
+                                  !(status & RxRWT) &&
+                                  dev->features & NETIF_F_RXALL) {
                                goto process_pkt;
+                       }
                } else {
                        struct sk_buff *skb;
                        dma_addr_t addr;
@@ -7438,8 +7335,7 @@ release_descriptor:
 
 static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
 {
-       struct net_device *dev = dev_instance;
-       struct rtl8169_private *tp = netdev_priv(dev);
+       struct rtl8169_private *tp = dev_instance;
        int handled = 0;
        u16 status;
 
@@ -7601,7 +7497,7 @@ static int rtl8169_close(struct net_device *dev)
        pm_runtime_get_sync(&pdev->dev);
 
        /* Update counters before going down */
-       rtl8169_update_counters(dev);
+       rtl8169_update_counters(tp);
 
        rtl_lock_work(tp);
        clear_bit(RTL_FLAG_TASK_ENABLED, tp->wk.flags);
@@ -7611,7 +7507,7 @@ static int rtl8169_close(struct net_device *dev)
 
        cancel_work_sync(&tp->wk.work);
 
-       pci_free_irq(pdev, 0, dev);
+       pci_free_irq(pdev, 0, tp);
 
        dma_free_coherent(&pdev->dev, R8169_RX_RING_BYTES, tp->RxDescArray,
                          tp->RxPhyAddr);
@@ -7666,7 +7562,7 @@ static int rtl_open(struct net_device *dev)
 
        rtl_request_firmware(tp);
 
-       retval = pci_request_irq(pdev, 0, rtl8169_interrupt, NULL, dev,
+       retval = pci_request_irq(pdev, 0, rtl8169_interrupt, NULL, tp,
                                 dev->name);
        if (retval < 0)
                goto err_release_fw_2;
@@ -7679,13 +7575,11 @@ static int rtl_open(struct net_device *dev)
 
        rtl8169_init_phy(dev, tp);
 
-       __rtl8169_set_features(dev, dev->features);
-
        rtl_pll_power_up(tp);
 
        rtl_hw_start(tp);
 
-       if (!rtl8169_init_counter_offsets(dev))
+       if (!rtl8169_init_counter_offsets(tp))
                netif_warn(tp, hw, dev, "counter reset/update failed\n");
 
        netif_start_queue(dev);
@@ -7754,7 +7648,7 @@ rtl8169_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
         * from tally counters.
         */
        if (pm_runtime_active(&pdev->dev))
-               rtl8169_update_counters(dev);
+               rtl8169_update_counters(tp);
 
        /*
         * Subtract values fetched during initalization.
@@ -7850,7 +7744,7 @@ static int rtl8169_runtime_suspend(struct device *device)
 
        /* Update counters before going runtime suspend */
        rtl8169_rx_missed(dev);
-       rtl8169_update_counters(dev);
+       rtl8169_update_counters(tp);
 
        return 0;
 }
@@ -7991,7 +7885,6 @@ static const struct net_device_ops rtl_netdev_ops = {
 
 static const struct rtl_cfg_info {
        void (*hw_start)(struct rtl8169_private *tp);
-       unsigned int region;
        u16 event_slow;
        unsigned int has_gmii:1;
        const struct rtl_coalesce_info *coalesce_info;
@@ -7999,7 +7892,6 @@ static const struct rtl_cfg_info {
 } rtl_cfg_infos [] = {
        [RTL_CFG_0] = {
                .hw_start       = rtl_hw_start_8169,
-               .region         = 1,
                .event_slow     = SYSErr | LinkChg | RxOverflow | RxFIFOOver,
                .has_gmii       = 1,
                .coalesce_info  = rtl_coalesce_info_8169,
@@ -8007,7 +7899,6 @@ static const struct rtl_cfg_info {
        },
        [RTL_CFG_1] = {
                .hw_start       = rtl_hw_start_8168,
-               .region         = 2,
                .event_slow     = SYSErr | LinkChg | RxOverflow,
                .has_gmii       = 1,
                .coalesce_info  = rtl_coalesce_info_8168_8136,
@@ -8015,7 +7906,6 @@ static const struct rtl_cfg_info {
        },
        [RTL_CFG_2] = {
                .hw_start       = rtl_hw_start_8101,
-               .region         = 2,
                .event_slow     = SYSErr | LinkChg | RxOverflow | RxFIFOOver |
                                  PCSTimeout,
                .coalesce_info  = rtl_coalesce_info_8168_8136,
@@ -8115,11 +8005,10 @@ static void rtl_hw_initialize(struct rtl8169_private *tp)
 static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
        const struct rtl_cfg_info *cfg = rtl_cfg_infos + ent->driver_data;
-       const unsigned int region = cfg->region;
        struct rtl8169_private *tp;
        struct mii_if_info *mii;
        struct net_device *dev;
-       int chipset, i;
+       int chipset, region, i;
        int rc;
 
        if (netif_msg_drv(&debug)) {
@@ -8154,43 +8043,41 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        /* enable device (incl. PCI PM wakeup and hotplug setup) */
        rc = pcim_enable_device(pdev);
        if (rc < 0) {
-               netif_err(tp, probe, dev, "enable failure\n");
+               dev_err(&pdev->dev, "enable failure\n");
                return rc;
        }
 
        if (pcim_set_mwi(pdev) < 0)
-               netif_info(tp, probe, dev, "Mem-Wr-Inval unavailable\n");
+               dev_info(&pdev->dev, "Mem-Wr-Inval unavailable\n");
 
-       /* make sure PCI base addr 1 is MMIO */
-       if (!(pci_resource_flags(pdev, region) & IORESOURCE_MEM)) {
-               netif_err(tp, probe, dev,
-                         "region #%d not an MMIO resource, aborting\n",
-                         region);
+       /* use first MMIO region */
+       region = ffs(pci_select_bars(pdev, IORESOURCE_MEM)) - 1;
+       if (region < 0) {
+               dev_err(&pdev->dev, "no MMIO resource found\n");
                return -ENODEV;
        }
 
        /* check for weird/broken PCI region reporting */
        if (pci_resource_len(pdev, region) < R8169_REGS_SIZE) {
-               netif_err(tp, probe, dev,
-                         "Invalid PCI region size(s), aborting\n");
+               dev_err(&pdev->dev, "Invalid PCI region size(s), aborting\n");
                return -ENODEV;
        }
 
        rc = pcim_iomap_regions(pdev, BIT(region), MODULENAME);
        if (rc < 0) {
-               netif_err(tp, probe, dev, "cannot remap MMIO, aborting\n");
+               dev_err(&pdev->dev, "cannot remap MMIO, aborting\n");
                return rc;
        }
 
        tp->mmio_addr = pcim_iomap_table(pdev)[region];
 
        if (!pci_is_pcie(pdev))
-               netif_info(tp, probe, dev, "not PCI Express\n");
+               dev_info(&pdev->dev, "not PCI Express\n");
 
        /* Identify chip attached to board */
-       rtl8169_get_mac_version(tp, dev, cfg->default_ver);
+       rtl8169_get_mac_version(tp, cfg->default_ver);
 
-       tp->cp_cmd = 0;
+       tp->cp_cmd = RTL_R16(tp, CPlusCmd);
 
        if ((sizeof(dma_addr_t) > 4) &&
            (use_dac == 1 || (use_dac == -1 && pci_is_pcie(pdev) &&
@@ -8205,7 +8092,7 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        } else {
                rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
                if (rc < 0) {
-                       netif_err(tp, probe, dev, "DMA configuration failed\n");
+                       dev_err(&pdev->dev, "DMA configuration failed\n");
                        return rc;
                }
        }
@@ -8230,11 +8117,10 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        rtl8169_print_mac_version(tp);
 
        chipset = tp->mac_version;
-       tp->txd_version = rtl_chip_infos[chipset].txd_version;
 
        rc = rtl_alloc_irq(tp);
        if (rc < 0) {
-               netif_err(tp, probe, dev, "Can't allocate interrupt\n");
+               dev_err(&pdev->dev, "Can't allocate interrupt\n");
                return rc;
        }
 
@@ -8315,13 +8201,17 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
                /* Disallow toggling */
                dev->hw_features &= ~NETIF_F_HW_VLAN_CTAG_RX;
 
-       if (tp->txd_version == RTL_TD_0)
+       switch (rtl_chip_infos[chipset].txd_version) {
+       case RTL_TD_0:
                tp->tso_csum = rtl8169_tso_csum_v1;
-       else if (tp->txd_version == RTL_TD_1) {
+               break;
+       case RTL_TD_1:
                tp->tso_csum = rtl8169_tso_csum_v2;
                dev->hw_features |= NETIF_F_IPV6_CSUM | NETIF_F_TSO6;
-       } else
+               break;
+       default:
                WARN_ON_ONCE(1);
+       }
 
        dev->hw_features |= NETIF_F_RXALL;
        dev->hw_features |= NETIF_F_RXFCS;
@@ -8334,9 +8224,6 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        tp->event_slow = cfg->event_slow;
        tp->coalesce_info = cfg->coalesce_info;
 
-       tp->opts1_mask = (tp->mac_version != RTL_GIGA_MAC_VER_01) ?
-               ~(RxBOVF | RxFOVF) : ~0;
-
        timer_setup(&tp->timer, rtl8169_phy_timer, 0);
 
        tp->rtl_fw = RTL_FIRMWARE_UNKNOWN;
@@ -8353,15 +8240,15 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
        if (rc < 0)
                return rc;
 
-       netif_info(tp, probe, dev, "%s at 0x%p, %pM, XID %08x IRQ %d\n",
-                  rtl_chip_infos[chipset].name, tp->mmio_addr, dev->dev_addr,
-                  (u32)(RTL_R32(tp, TxConfig) & 0x9cf0f8ff),
+       netif_info(tp, probe, dev, "%s, %pM, XID %08x, IRQ %d\n",
+                  rtl_chip_infos[chipset].name, dev->dev_addr,
+                  (u32)(RTL_R32(tp, TxConfig) & 0xfcf0f8ff),
                   pci_irq_vector(pdev, 0));
        if (rtl_chip_infos[chipset].jumbo_max != JUMBO_1K) {
                netif_info(tp, probe, dev, "jumbo features [frames: %d bytes, "
                           "tx checksumming: %s]\n",
                           rtl_chip_infos[chipset].jumbo_max,
-                          rtl_chip_infos[chipset].jumbo_tx_csum ? "ok" : "ko");
+                         tp->mac_version <= RTL_GIGA_MAC_VER_06 ? "ok" : "ko");
        }
 
        if (r8168_check_dash(tp))