aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/realtek
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/realtek')
-rw-r--r--drivers/net/ethernet/realtek/8139cp.c8
-rw-r--r--drivers/net/ethernet/realtek/8139too.c2
-rw-r--r--drivers/net/ethernet/realtek/atp.c2
-rw-r--r--drivers/net/ethernet/realtek/r8169.c286
4 files changed, 203 insertions, 95 deletions
diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c
index b62a32484f6a..7d1fb9ad1296 100644
--- a/drivers/net/ethernet/realtek/8139cp.c
+++ b/drivers/net/ethernet/realtek/8139cp.c
@@ -431,7 +431,7 @@ static inline void cp_rx_skb (struct cp_private *cp, struct sk_buff *skb,
431 cp->dev->stats.rx_bytes += skb->len; 431 cp->dev->stats.rx_bytes += skb->len;
432 432
433 if (opts2 & RxVlanTagged) 433 if (opts2 & RxVlanTagged)
434 __vlan_hwaccel_put_tag(skb, swab16(opts2 & 0xffff)); 434 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), swab16(opts2 & 0xffff));
435 435
436 napi_gro_receive(&cp->napi, skb); 436 napi_gro_receive(&cp->napi, skb);
437} 437}
@@ -1438,7 +1438,7 @@ static int cp_set_features(struct net_device *dev, netdev_features_t features)
1438 else 1438 else
1439 cp->cpcmd &= ~RxChkSum; 1439 cp->cpcmd &= ~RxChkSum;
1440 1440
1441 if (features & NETIF_F_HW_VLAN_RX) 1441 if (features & NETIF_F_HW_VLAN_CTAG_RX)
1442 cp->cpcmd |= RxVlanOn; 1442 cp->cpcmd |= RxVlanOn;
1443 else 1443 else
1444 cp->cpcmd &= ~RxVlanOn; 1444 cp->cpcmd &= ~RxVlanOn;
@@ -1955,14 +1955,14 @@ static int cp_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
1955 dev->ethtool_ops = &cp_ethtool_ops; 1955 dev->ethtool_ops = &cp_ethtool_ops;
1956 dev->watchdog_timeo = TX_TIMEOUT; 1956 dev->watchdog_timeo = TX_TIMEOUT;
1957 1957
1958 dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 1958 dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
1959 1959
1960 if (pci_using_dac) 1960 if (pci_using_dac)
1961 dev->features |= NETIF_F_HIGHDMA; 1961 dev->features |= NETIF_F_HIGHDMA;
1962 1962
1963 /* disabled by default until verified */ 1963 /* disabled by default until verified */
1964 dev->hw_features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO | 1964 dev->hw_features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
1965 NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 1965 NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
1966 dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO | 1966 dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
1967 NETIF_F_HIGHDMA; 1967 NETIF_F_HIGHDMA;
1968 1968
diff --git a/drivers/net/ethernet/realtek/8139too.c b/drivers/net/ethernet/realtek/8139too.c
index 1276ac71353a..3ccedeb8aba0 100644
--- a/drivers/net/ethernet/realtek/8139too.c
+++ b/drivers/net/ethernet/realtek/8139too.c
@@ -2041,8 +2041,6 @@ keep_pkt:
2041 2041
2042 netif_receive_skb (skb); 2042 netif_receive_skb (skb);
2043 } else { 2043 } else {
2044 if (net_ratelimit())
2045 netdev_warn(dev, "Memory squeeze, dropping packet\n");
2046 dev->stats.rx_dropped++; 2044 dev->stats.rx_dropped++;
2047 } 2045 }
2048 received++; 2046 received++;
diff --git a/drivers/net/ethernet/realtek/atp.c b/drivers/net/ethernet/realtek/atp.c
index 9f2d416de750..d77d60ea8202 100644
--- a/drivers/net/ethernet/realtek/atp.c
+++ b/drivers/net/ethernet/realtek/atp.c
@@ -782,8 +782,6 @@ static void net_rx(struct net_device *dev)
782 782
783 skb = netdev_alloc_skb(dev, pkt_len + 2); 783 skb = netdev_alloc_skb(dev, pkt_len + 2);
784 if (skb == NULL) { 784 if (skb == NULL) {
785 printk(KERN_ERR "%s: Memory squeeze, dropping packet.\n",
786 dev->name);
787 dev->stats.rx_dropped++; 785 dev->stats.rx_dropped++;
788 goto done; 786 goto done;
789 } 787 }
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
index 4ecbe64a758d..c6dac38fd9cc 100644
--- a/drivers/net/ethernet/realtek/r8169.c
+++ b/drivers/net/ethernet/realtek/r8169.c
@@ -47,7 +47,9 @@
47#define FIRMWARE_8402_1 "rtl_nic/rtl8402-1.fw" 47#define FIRMWARE_8402_1 "rtl_nic/rtl8402-1.fw"
48#define FIRMWARE_8411_1 "rtl_nic/rtl8411-1.fw" 48#define FIRMWARE_8411_1 "rtl_nic/rtl8411-1.fw"
49#define FIRMWARE_8106E_1 "rtl_nic/rtl8106e-1.fw" 49#define FIRMWARE_8106E_1 "rtl_nic/rtl8106e-1.fw"
50#define FIRMWARE_8168G_1 "rtl_nic/rtl8168g-1.fw" 50#define FIRMWARE_8106E_2 "rtl_nic/rtl8106e-2.fw"
51#define FIRMWARE_8168G_2 "rtl_nic/rtl8168g-2.fw"
52#define FIRMWARE_8168G_3 "rtl_nic/rtl8168g-3.fw"
51 53
52#ifdef RTL8169_DEBUG 54#ifdef RTL8169_DEBUG
53#define assert(expr) \ 55#define assert(expr) \
@@ -140,6 +142,8 @@ enum mac_version {
140 RTL_GIGA_MAC_VER_39, 142 RTL_GIGA_MAC_VER_39,
141 RTL_GIGA_MAC_VER_40, 143 RTL_GIGA_MAC_VER_40,
142 RTL_GIGA_MAC_VER_41, 144 RTL_GIGA_MAC_VER_41,
145 RTL_GIGA_MAC_VER_42,
146 RTL_GIGA_MAC_VER_43,
143 RTL_GIGA_MAC_NONE = 0xff, 147 RTL_GIGA_MAC_NONE = 0xff,
144}; 148};
145 149
@@ -262,10 +266,16 @@ static const struct {
262 _R("RTL8106e", RTL_TD_1, FIRMWARE_8106E_1, 266 _R("RTL8106e", RTL_TD_1, FIRMWARE_8106E_1,
263 JUMBO_1K, true), 267 JUMBO_1K, true),
264 [RTL_GIGA_MAC_VER_40] = 268 [RTL_GIGA_MAC_VER_40] =
265 _R("RTL8168g/8111g", RTL_TD_1, FIRMWARE_8168G_1, 269 _R("RTL8168g/8111g", RTL_TD_1, FIRMWARE_8168G_2,
266 JUMBO_9K, false), 270 JUMBO_9K, false),
267 [RTL_GIGA_MAC_VER_41] = 271 [RTL_GIGA_MAC_VER_41] =
268 _R("RTL8168g/8111g", RTL_TD_1, NULL, JUMBO_9K, false), 272 _R("RTL8168g/8111g", RTL_TD_1, NULL, JUMBO_9K, false),
273 [RTL_GIGA_MAC_VER_42] =
274 _R("RTL8168g/8111g", RTL_TD_1, FIRMWARE_8168G_3,
275 JUMBO_9K, false),
276 [RTL_GIGA_MAC_VER_43] =
277 _R("RTL8106e", RTL_TD_1, FIRMWARE_8106E_2,
278 JUMBO_1K, true),
269}; 279};
270#undef _R 280#undef _R
271 281
@@ -329,6 +339,7 @@ enum rtl_registers {
329#define RXCFG_FIFO_SHIFT 13 339#define RXCFG_FIFO_SHIFT 13
330 /* No threshold before first PCI xfer */ 340 /* No threshold before first PCI xfer */
331#define RX_FIFO_THRESH (7 << RXCFG_FIFO_SHIFT) 341#define RX_FIFO_THRESH (7 << RXCFG_FIFO_SHIFT)
342#define RX_EARLY_OFF (1 << 11)
332#define RXCFG_DMA_SHIFT 8 343#define RXCFG_DMA_SHIFT 8
333 /* Unlimited maximum PCI burst. */ 344 /* Unlimited maximum PCI burst. */
334#define RX_DMA_BURST (7 << RXCFG_DMA_SHIFT) 345#define RX_DMA_BURST (7 << RXCFG_DMA_SHIFT)
@@ -513,6 +524,7 @@ enum rtl_register_content {
513 PMEnable = (1 << 0), /* Power Management Enable */ 524 PMEnable = (1 << 0), /* Power Management Enable */
514 525
515 /* Config2 register p. 25 */ 526 /* Config2 register p. 25 */
527 ClkReqEn = (1 << 7), /* Clock Request Enable */
516 MSIEnable = (1 << 5), /* 8169 only. Reserved in the 8168. */ 528 MSIEnable = (1 << 5), /* 8169 only. Reserved in the 8168. */
517 PCI_Clock_66MHz = 0x01, 529 PCI_Clock_66MHz = 0x01,
518 PCI_Clock_33MHz = 0x00, 530 PCI_Clock_33MHz = 0x00,
@@ -533,6 +545,7 @@ enum rtl_register_content {
533 Spi_en = (1 << 3), 545 Spi_en = (1 << 3),
534 LanWake = (1 << 1), /* LanWake enable/disable */ 546 LanWake = (1 << 1), /* LanWake enable/disable */
535 PMEStatus = (1 << 0), /* PME status can be reset by PCI RST# */ 547 PMEStatus = (1 << 0), /* PME status can be reset by PCI RST# */
548 ASPM_en = (1 << 0), /* ASPM enable */
536 549
537 /* TBICSR p.28 */ 550 /* TBICSR p.28 */
538 TBIReset = 0x80000000, 551 TBIReset = 0x80000000,
@@ -814,7 +827,9 @@ MODULE_FIRMWARE(FIRMWARE_8168F_2);
814MODULE_FIRMWARE(FIRMWARE_8402_1); 827MODULE_FIRMWARE(FIRMWARE_8402_1);
815MODULE_FIRMWARE(FIRMWARE_8411_1); 828MODULE_FIRMWARE(FIRMWARE_8411_1);
816MODULE_FIRMWARE(FIRMWARE_8106E_1); 829MODULE_FIRMWARE(FIRMWARE_8106E_1);
817MODULE_FIRMWARE(FIRMWARE_8168G_1); 830MODULE_FIRMWARE(FIRMWARE_8106E_2);
831MODULE_FIRMWARE(FIRMWARE_8168G_2);
832MODULE_FIRMWARE(FIRMWARE_8168G_3);
818 833
819static void rtl_lock_work(struct rtl8169_private *tp) 834static void rtl_lock_work(struct rtl8169_private *tp)
820{ 835{
@@ -1024,14 +1039,6 @@ static u16 r8168_phy_ocp_read(struct rtl8169_private *tp, u32 reg)
1024 (RTL_R32(GPHY_OCP) & 0xffff) : ~0; 1039 (RTL_R32(GPHY_OCP) & 0xffff) : ~0;
1025} 1040}
1026 1041
1027static void rtl_w1w0_phy_ocp(struct rtl8169_private *tp, int reg, int p, int m)
1028{
1029 int val;
1030
1031 val = r8168_phy_ocp_read(tp, reg);
1032 r8168_phy_ocp_write(tp, reg, (val | p) & ~m);
1033}
1034
1035static void r8168_mac_ocp_write(struct rtl8169_private *tp, u32 reg, u32 data) 1042static void r8168_mac_ocp_write(struct rtl8169_private *tp, u32 reg, u32 data)
1036{ 1043{
1037 void __iomem *ioaddr = tp->mmio_addr; 1044 void __iomem *ioaddr = tp->mmio_addr;
@@ -1077,6 +1084,21 @@ static int r8168g_mdio_read(struct rtl8169_private *tp, int reg)
1077 return r8168_phy_ocp_read(tp, tp->ocp_base + reg * 2); 1084 return r8168_phy_ocp_read(tp, tp->ocp_base + reg * 2);
1078} 1085}
1079 1086
1087static void mac_mcu_write(struct rtl8169_private *tp, int reg, int value)
1088{
1089 if (reg == 0x1f) {
1090 tp->ocp_base = value << 4;
1091 return;
1092 }
1093
1094 r8168_mac_ocp_write(tp, tp->ocp_base + reg, value);
1095}
1096
1097static int mac_mcu_read(struct rtl8169_private *tp, int reg)
1098{
1099 return r8168_mac_ocp_read(tp, tp->ocp_base + reg);
1100}
1101
1080DECLARE_RTL_COND(rtl_phyar_cond) 1102DECLARE_RTL_COND(rtl_phyar_cond)
1081{ 1103{
1082 void __iomem *ioaddr = tp->mmio_addr; 1104 void __iomem *ioaddr = tp->mmio_addr;
@@ -1771,16 +1793,17 @@ static void __rtl8169_set_features(struct net_device *dev,
1771 netdev_features_t changed = features ^ dev->features; 1793 netdev_features_t changed = features ^ dev->features;
1772 void __iomem *ioaddr = tp->mmio_addr; 1794 void __iomem *ioaddr = tp->mmio_addr;
1773 1795
1774 if (!(changed & (NETIF_F_RXALL | NETIF_F_RXCSUM | NETIF_F_HW_VLAN_RX))) 1796 if (!(changed & (NETIF_F_RXALL | NETIF_F_RXCSUM |
1797 NETIF_F_HW_VLAN_CTAG_RX)))
1775 return; 1798 return;
1776 1799
1777 if (changed & (NETIF_F_RXCSUM | NETIF_F_HW_VLAN_RX)) { 1800 if (changed & (NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_RX)) {
1778 if (features & NETIF_F_RXCSUM) 1801 if (features & NETIF_F_RXCSUM)
1779 tp->cp_cmd |= RxChkSum; 1802 tp->cp_cmd |= RxChkSum;
1780 else 1803 else
1781 tp->cp_cmd &= ~RxChkSum; 1804 tp->cp_cmd &= ~RxChkSum;
1782 1805
1783 if (dev->features & NETIF_F_HW_VLAN_RX) 1806 if (dev->features & NETIF_F_HW_VLAN_CTAG_RX)
1784 tp->cp_cmd |= RxVlan; 1807 tp->cp_cmd |= RxVlan;
1785 else 1808 else
1786 tp->cp_cmd &= ~RxVlan; 1809 tp->cp_cmd &= ~RxVlan;
@@ -1820,7 +1843,7 @@ static void rtl8169_rx_vlan_tag(struct RxDesc *desc, struct sk_buff *skb)
1820 u32 opts2 = le32_to_cpu(desc->opts2); 1843 u32 opts2 = le32_to_cpu(desc->opts2);
1821 1844
1822 if (opts2 & RxVlanTag) 1845 if (opts2 & RxVlanTag)
1823 __vlan_hwaccel_put_tag(skb, swab16(opts2 & 0xffff)); 1846 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), swab16(opts2 & 0xffff));
1824} 1847}
1825 1848
1826static int rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd) 1849static int rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd)
@@ -2028,6 +2051,7 @@ static void rtl8169_get_mac_version(struct rtl8169_private *tp,
2028 int mac_version; 2051 int mac_version;
2029 } mac_info[] = { 2052 } mac_info[] = {
2030 /* 8168G family. */ 2053 /* 8168G family. */
2054 { 0x7cf00000, 0x50900000, RTL_GIGA_MAC_VER_42 },
2031 { 0x7cf00000, 0x4c100000, RTL_GIGA_MAC_VER_41 }, 2055 { 0x7cf00000, 0x4c100000, RTL_GIGA_MAC_VER_41 },
2032 { 0x7cf00000, 0x4c000000, RTL_GIGA_MAC_VER_40 }, 2056 { 0x7cf00000, 0x4c000000, RTL_GIGA_MAC_VER_40 },
2033 2057
@@ -2116,6 +2140,10 @@ static void rtl8169_get_mac_version(struct rtl8169_private *tp,
2116 netif_notice(tp, probe, dev, 2140 netif_notice(tp, probe, dev,
2117 "unknown MAC, using family default\n"); 2141 "unknown MAC, using family default\n");
2118 tp->mac_version = default_version; 2142 tp->mac_version = default_version;
2143 } else if (tp->mac_version == RTL_GIGA_MAC_VER_42) {
2144 tp->mac_version = tp->mii.supports_gmii ?
2145 RTL_GIGA_MAC_VER_42 :
2146 RTL_GIGA_MAC_VER_43;
2119 } 2147 }
2120} 2148}
2121 2149
@@ -2142,9 +2170,7 @@ static void rtl_writephy_batch(struct rtl8169_private *tp,
2142#define PHY_DATA_OR 0x10000000 2170#define PHY_DATA_OR 0x10000000
2143#define PHY_DATA_AND 0x20000000 2171#define PHY_DATA_AND 0x20000000
2144#define PHY_BJMPN 0x30000000 2172#define PHY_BJMPN 0x30000000
2145#define PHY_READ_EFUSE 0x40000000 2173#define PHY_MDIO_CHG 0x40000000
2146#define PHY_READ_MAC_BYTE 0x50000000
2147#define PHY_WRITE_MAC_BYTE 0x60000000
2148#define PHY_CLEAR_READCOUNT 0x70000000 2174#define PHY_CLEAR_READCOUNT 0x70000000
2149#define PHY_WRITE 0x80000000 2175#define PHY_WRITE 0x80000000
2150#define PHY_READCOUNT_EQ_SKIP 0x90000000 2176#define PHY_READCOUNT_EQ_SKIP 0x90000000
@@ -2153,7 +2179,6 @@ static void rtl_writephy_batch(struct rtl8169_private *tp,
2153#define PHY_WRITE_PREVIOUS 0xc0000000 2179#define PHY_WRITE_PREVIOUS 0xc0000000
2154#define PHY_SKIPN 0xd0000000 2180#define PHY_SKIPN 0xd0000000
2155#define PHY_DELAY_MS 0xe0000000 2181#define PHY_DELAY_MS 0xe0000000
2156#define PHY_WRITE_ERI_WORD 0xf0000000
2157 2182
2158struct fw_info { 2183struct fw_info {
2159 u32 magic; 2184 u32 magic;
@@ -2230,7 +2255,7 @@ static bool rtl_fw_data_ok(struct rtl8169_private *tp, struct net_device *dev,
2230 case PHY_READ: 2255 case PHY_READ:
2231 case PHY_DATA_OR: 2256 case PHY_DATA_OR:
2232 case PHY_DATA_AND: 2257 case PHY_DATA_AND:
2233 case PHY_READ_EFUSE: 2258 case PHY_MDIO_CHG:
2234 case PHY_CLEAR_READCOUNT: 2259 case PHY_CLEAR_READCOUNT:
2235 case PHY_WRITE: 2260 case PHY_WRITE:
2236 case PHY_WRITE_PREVIOUS: 2261 case PHY_WRITE_PREVIOUS:
@@ -2261,9 +2286,6 @@ static bool rtl_fw_data_ok(struct rtl8169_private *tp, struct net_device *dev,
2261 } 2286 }
2262 break; 2287 break;
2263 2288
2264 case PHY_READ_MAC_BYTE:
2265 case PHY_WRITE_MAC_BYTE:
2266 case PHY_WRITE_ERI_WORD:
2267 default: 2289 default:
2268 netif_err(tp, ifup, tp->dev, 2290 netif_err(tp, ifup, tp->dev,
2269 "Invalid action 0x%08x\n", action); 2291 "Invalid action 0x%08x\n", action);
@@ -2294,10 +2316,13 @@ out:
2294static void rtl_phy_write_fw(struct rtl8169_private *tp, struct rtl_fw *rtl_fw) 2316static void rtl_phy_write_fw(struct rtl8169_private *tp, struct rtl_fw *rtl_fw)
2295{ 2317{
2296 struct rtl_fw_phy_action *pa = &rtl_fw->phy_action; 2318 struct rtl_fw_phy_action *pa = &rtl_fw->phy_action;
2319 struct mdio_ops org, *ops = &tp->mdio_ops;
2297 u32 predata, count; 2320 u32 predata, count;
2298 size_t index; 2321 size_t index;
2299 2322
2300 predata = count = 0; 2323 predata = count = 0;
2324 org.write = ops->write;
2325 org.read = ops->read;
2301 2326
2302 for (index = 0; index < pa->size; ) { 2327 for (index = 0; index < pa->size; ) {
2303 u32 action = le32_to_cpu(pa->code[index]); 2328 u32 action = le32_to_cpu(pa->code[index]);
@@ -2324,8 +2349,15 @@ static void rtl_phy_write_fw(struct rtl8169_private *tp, struct rtl_fw *rtl_fw)
2324 case PHY_BJMPN: 2349 case PHY_BJMPN:
2325 index -= regno; 2350 index -= regno;
2326 break; 2351 break;
2327 case PHY_READ_EFUSE: 2352 case PHY_MDIO_CHG:
2328 predata = rtl8168d_efuse_read(tp, regno); 2353 if (data == 0) {
2354 ops->write = org.write;
2355 ops->read = org.read;
2356 } else if (data == 1) {
2357 ops->write = mac_mcu_write;
2358 ops->read = mac_mcu_read;
2359 }
2360
2329 index++; 2361 index++;
2330 break; 2362 break;
2331 case PHY_CLEAR_READCOUNT: 2363 case PHY_CLEAR_READCOUNT:
@@ -2361,13 +2393,13 @@ static void rtl_phy_write_fw(struct rtl8169_private *tp, struct rtl_fw *rtl_fw)
2361 index++; 2393 index++;
2362 break; 2394 break;
2363 2395
2364 case PHY_READ_MAC_BYTE:
2365 case PHY_WRITE_MAC_BYTE:
2366 case PHY_WRITE_ERI_WORD:
2367 default: 2396 default:
2368 BUG(); 2397 BUG();
2369 } 2398 }
2370 } 2399 }
2400
2401 ops->write = org.write;
2402 ops->read = org.read;
2371} 2403}
2372 2404
2373static void rtl_release_firmware(struct rtl8169_private *tp) 2405static void rtl_release_firmware(struct rtl8169_private *tp)
@@ -3368,51 +3400,68 @@ static void rtl8411_hw_phy_config(struct rtl8169_private *tp)
3368 3400
3369static void rtl8168g_1_hw_phy_config(struct rtl8169_private *tp) 3401static void rtl8168g_1_hw_phy_config(struct rtl8169_private *tp)
3370{ 3402{
3371 static const u16 mac_ocp_patch[] = { 3403 rtl_apply_firmware(tp);
3372 0xe008, 0xe01b, 0xe01d, 0xe01f,
3373 0xe021, 0xe023, 0xe025, 0xe027,
3374 0x49d2, 0xf10d, 0x766c, 0x49e2,
3375 0xf00a, 0x1ec0, 0x8ee1, 0xc60a,
3376
3377 0x77c0, 0x4870, 0x9fc0, 0x1ea0,
3378 0xc707, 0x8ee1, 0x9d6c, 0xc603,
3379 0xbe00, 0xb416, 0x0076, 0xe86c,
3380 0xc602, 0xbe00, 0x0000, 0xc602,
3381
3382 0xbe00, 0x0000, 0xc602, 0xbe00,
3383 0x0000, 0xc602, 0xbe00, 0x0000,
3384 0xc602, 0xbe00, 0x0000, 0xc602,
3385 0xbe00, 0x0000, 0xc602, 0xbe00,
3386
3387 0x0000, 0x0000, 0x0000, 0x0000
3388 };
3389 u32 i;
3390 3404
3391 /* Patch code for GPHY reset */ 3405 rtl_writephy(tp, 0x1f, 0x0a46);
3392 for (i = 0; i < ARRAY_SIZE(mac_ocp_patch); i++) 3406 if (rtl_readphy(tp, 0x10) & 0x0100) {
3393 r8168_mac_ocp_write(tp, 0xf800 + 2*i, mac_ocp_patch[i]); 3407 rtl_writephy(tp, 0x1f, 0x0bcc);
3394 r8168_mac_ocp_write(tp, 0xfc26, 0x8000); 3408 rtl_w1w0_phy(tp, 0x12, 0x0000, 0x8000);
3395 r8168_mac_ocp_write(tp, 0xfc28, 0x0075); 3409 } else {
3410 rtl_writephy(tp, 0x1f, 0x0bcc);
3411 rtl_w1w0_phy(tp, 0x12, 0x8000, 0x0000);
3412 }
3396 3413
3397 rtl_apply_firmware(tp); 3414 rtl_writephy(tp, 0x1f, 0x0a46);
3415 if (rtl_readphy(tp, 0x13) & 0x0100) {
3416 rtl_writephy(tp, 0x1f, 0x0c41);
3417 rtl_w1w0_phy(tp, 0x15, 0x0002, 0x0000);
3418 } else {
3419 rtl_writephy(tp, 0x1f, 0x0c41);
3420 rtl_w1w0_phy(tp, 0x15, 0x0000, 0x0002);
3421 }
3398 3422
3399 if (r8168_phy_ocp_read(tp, 0xa460) & 0x0100) 3423 /* Enable PHY auto speed down */
3400 rtl_w1w0_phy_ocp(tp, 0xbcc4, 0x0000, 0x8000); 3424 rtl_writephy(tp, 0x1f, 0x0a44);
3401 else 3425 rtl_w1w0_phy(tp, 0x11, 0x000c, 0x0000);
3402 rtl_w1w0_phy_ocp(tp, 0xbcc4, 0x8000, 0x0000); 3426
3427 rtl_writephy(tp, 0x1f, 0x0bcc);
3428 rtl_w1w0_phy(tp, 0x14, 0x0100, 0x0000);
3429 rtl_writephy(tp, 0x1f, 0x0a44);
3430 rtl_w1w0_phy(tp, 0x11, 0x00c0, 0x0000);
3431 rtl_writephy(tp, 0x1f, 0x0a43);
3432 rtl_writephy(tp, 0x13, 0x8084);
3433 rtl_w1w0_phy(tp, 0x14, 0x0000, 0x6000);
3434 rtl_w1w0_phy(tp, 0x10, 0x1003, 0x0000);
3435
3436 /* EEE auto-fallback function */
3437 rtl_writephy(tp, 0x1f, 0x0a4b);
3438 rtl_w1w0_phy(tp, 0x11, 0x0004, 0x0000);
3439
3440 /* Enable UC LPF tune function */
3441 rtl_writephy(tp, 0x1f, 0x0a43);
3442 rtl_writephy(tp, 0x13, 0x8012);
3443 rtl_w1w0_phy(tp, 0x14, 0x8000, 0x0000);
3403 3444
3404 if (r8168_phy_ocp_read(tp, 0xa466) & 0x0100) 3445 rtl_writephy(tp, 0x1f, 0x0c42);
3405 rtl_w1w0_phy_ocp(tp, 0xc41a, 0x0002, 0x0000); 3446 rtl_w1w0_phy(tp, 0x11, 0x4000, 0x2000);
3406 else
3407 rtl_w1w0_phy_ocp(tp, 0xbcc4, 0x0000, 0x0002);
3408 3447
3409 rtl_w1w0_phy_ocp(tp, 0xa442, 0x000c, 0x0000); 3448 /* Improve SWR Efficiency */
3410 rtl_w1w0_phy_ocp(tp, 0xa4b2, 0x0004, 0x0000); 3449 rtl_writephy(tp, 0x1f, 0x0bcd);
3450 rtl_writephy(tp, 0x14, 0x5065);
3451 rtl_writephy(tp, 0x14, 0xd065);
3452 rtl_writephy(tp, 0x1f, 0x0bc8);
3453 rtl_writephy(tp, 0x11, 0x5655);
3454 rtl_writephy(tp, 0x1f, 0x0bcd);
3455 rtl_writephy(tp, 0x14, 0x1065);
3456 rtl_writephy(tp, 0x14, 0x9065);
3457 rtl_writephy(tp, 0x14, 0x1065);
3411 3458
3412 r8168_phy_ocp_write(tp, 0xa436, 0x8012); 3459 rtl_writephy(tp, 0x1f, 0x0000);
3413 rtl_w1w0_phy_ocp(tp, 0xa438, 0x8000, 0x0000); 3460}
3414 3461
3415 rtl_w1w0_phy_ocp(tp, 0xc422, 0x4000, 0x2000); 3462static void rtl8168g_2_hw_phy_config(struct rtl8169_private *tp)
3463{
3464 rtl_apply_firmware(tp);
3416} 3465}
3417 3466
3418static void rtl8102e_hw_phy_config(struct rtl8169_private *tp) 3467static void rtl8102e_hw_phy_config(struct rtl8169_private *tp)
@@ -3600,6 +3649,10 @@ static void rtl_hw_phy_config(struct net_device *dev)
3600 case RTL_GIGA_MAC_VER_40: 3649 case RTL_GIGA_MAC_VER_40:
3601 rtl8168g_1_hw_phy_config(tp); 3650 rtl8168g_1_hw_phy_config(tp);
3602 break; 3651 break;
3652 case RTL_GIGA_MAC_VER_42:
3653 case RTL_GIGA_MAC_VER_43:
3654 rtl8168g_2_hw_phy_config(tp);
3655 break;
3603 3656
3604 case RTL_GIGA_MAC_VER_41: 3657 case RTL_GIGA_MAC_VER_41:
3605 default: 3658 default:
@@ -3808,6 +3861,8 @@ static void rtl_init_mdio_ops(struct rtl8169_private *tp)
3808 break; 3861 break;
3809 case RTL_GIGA_MAC_VER_40: 3862 case RTL_GIGA_MAC_VER_40:
3810 case RTL_GIGA_MAC_VER_41: 3863 case RTL_GIGA_MAC_VER_41:
3864 case RTL_GIGA_MAC_VER_42:
3865 case RTL_GIGA_MAC_VER_43:
3811 ops->write = r8168g_mdio_write; 3866 ops->write = r8168g_mdio_write;
3812 ops->read = r8168g_mdio_read; 3867 ops->read = r8168g_mdio_read;
3813 break; 3868 break;
@@ -3859,6 +3914,8 @@ static void rtl_wol_suspend_quirk(struct rtl8169_private *tp)
3859 case RTL_GIGA_MAC_VER_39: 3914 case RTL_GIGA_MAC_VER_39:
3860 case RTL_GIGA_MAC_VER_40: 3915 case RTL_GIGA_MAC_VER_40:
3861 case RTL_GIGA_MAC_VER_41: 3916 case RTL_GIGA_MAC_VER_41:
3917 case RTL_GIGA_MAC_VER_42:
3918 case RTL_GIGA_MAC_VER_43:
3862 RTL_W32(RxConfig, RTL_R32(RxConfig) | 3919 RTL_W32(RxConfig, RTL_R32(RxConfig) |
3863 AcceptBroadcast | AcceptMulticast | AcceptMyPhys); 3920 AcceptBroadcast | AcceptMulticast | AcceptMyPhys);
3864 break; 3921 break;
@@ -3966,6 +4023,8 @@ static void r8168_phy_power_down(struct rtl8169_private *tp)
3966 switch (tp->mac_version) { 4023 switch (tp->mac_version) {
3967 case RTL_GIGA_MAC_VER_32: 4024 case RTL_GIGA_MAC_VER_32:
3968 case RTL_GIGA_MAC_VER_33: 4025 case RTL_GIGA_MAC_VER_33:
4026 case RTL_GIGA_MAC_VER_40:
4027 case RTL_GIGA_MAC_VER_41:
3969 rtl_writephy(tp, MII_BMCR, BMCR_ANENABLE | BMCR_PDOWN); 4028 rtl_writephy(tp, MII_BMCR, BMCR_ANENABLE | BMCR_PDOWN);
3970 break; 4029 break;
3971 4030
@@ -4027,6 +4086,11 @@ static void r8168_pll_power_down(struct rtl8169_private *tp)
4027 case RTL_GIGA_MAC_VER_33: 4086 case RTL_GIGA_MAC_VER_33:
4028 RTL_W8(PMCH, RTL_R8(PMCH) & ~0x80); 4087 RTL_W8(PMCH, RTL_R8(PMCH) & ~0x80);
4029 break; 4088 break;
4089 case RTL_GIGA_MAC_VER_40:
4090 case RTL_GIGA_MAC_VER_41:
4091 rtl_w1w0_eri(tp, 0x1a8, ERIAR_MASK_1111, 0x00000000,
4092 0xfc000000, ERIAR_EXGMAC);
4093 break;
4030 } 4094 }
4031} 4095}
4032 4096
@@ -4044,6 +4108,11 @@ static void r8168_pll_power_up(struct rtl8169_private *tp)
4044 case RTL_GIGA_MAC_VER_33: 4108 case RTL_GIGA_MAC_VER_33:
4045 RTL_W8(PMCH, RTL_R8(PMCH) | 0x80); 4109 RTL_W8(PMCH, RTL_R8(PMCH) | 0x80);
4046 break; 4110 break;
4111 case RTL_GIGA_MAC_VER_40:
4112 case RTL_GIGA_MAC_VER_41:
4113 rtl_w1w0_eri(tp, 0x1a8, ERIAR_MASK_1111, 0xfc000000,
4114 0x00000000, ERIAR_EXGMAC);
4115 break;
4047 } 4116 }
4048 4117
4049 r8168_phy_power_up(tp); 4118 r8168_phy_power_up(tp);
@@ -4080,6 +4149,7 @@ static void rtl_init_pll_power_ops(struct rtl8169_private *tp)
4080 case RTL_GIGA_MAC_VER_30: 4149 case RTL_GIGA_MAC_VER_30:
4081 case RTL_GIGA_MAC_VER_37: 4150 case RTL_GIGA_MAC_VER_37:
4082 case RTL_GIGA_MAC_VER_39: 4151 case RTL_GIGA_MAC_VER_39:
4152 case RTL_GIGA_MAC_VER_43:
4083 ops->down = r810x_pll_power_down; 4153 ops->down = r810x_pll_power_down;
4084 ops->up = r810x_pll_power_up; 4154 ops->up = r810x_pll_power_up;
4085 break; 4155 break;
@@ -4107,6 +4177,7 @@ static void rtl_init_pll_power_ops(struct rtl8169_private *tp)
4107 case RTL_GIGA_MAC_VER_38: 4177 case RTL_GIGA_MAC_VER_38:
4108 case RTL_GIGA_MAC_VER_40: 4178 case RTL_GIGA_MAC_VER_40:
4109 case RTL_GIGA_MAC_VER_41: 4179 case RTL_GIGA_MAC_VER_41:
4180 case RTL_GIGA_MAC_VER_42:
4110 ops->down = r8168_pll_power_down; 4181 ops->down = r8168_pll_power_down;
4111 ops->up = r8168_pll_power_up; 4182 ops->up = r8168_pll_power_up;
4112 break; 4183 break;
@@ -4149,6 +4220,12 @@ static void rtl_init_rxcfg(struct rtl8169_private *tp)
4149 case RTL_GIGA_MAC_VER_34: 4220 case RTL_GIGA_MAC_VER_34:
4150 RTL_W32(RxConfig, RX128_INT_EN | RX_MULTI_EN | RX_DMA_BURST); 4221 RTL_W32(RxConfig, RX128_INT_EN | RX_MULTI_EN | RX_DMA_BURST);
4151 break; 4222 break;
4223 case RTL_GIGA_MAC_VER_40:
4224 case RTL_GIGA_MAC_VER_41:
4225 case RTL_GIGA_MAC_VER_42:
4226 case RTL_GIGA_MAC_VER_43:
4227 RTL_W32(RxConfig, RX128_INT_EN | RX_DMA_BURST | RX_EARLY_OFF);
4228 break;
4152 default: 4229 default:
4153 RTL_W32(RxConfig, RX128_INT_EN | RX_DMA_BURST); 4230 RTL_W32(RxConfig, RX128_INT_EN | RX_DMA_BURST);
4154 break; 4231 break;
@@ -4305,6 +4382,8 @@ static void rtl_init_jumbo_ops(struct rtl8169_private *tp)
4305 */ 4382 */
4306 case RTL_GIGA_MAC_VER_40: 4383 case RTL_GIGA_MAC_VER_40:
4307 case RTL_GIGA_MAC_VER_41: 4384 case RTL_GIGA_MAC_VER_41:
4385 case RTL_GIGA_MAC_VER_42:
4386 case RTL_GIGA_MAC_VER_43:
4308 default: 4387 default:
4309 ops->disable = NULL; 4388 ops->disable = NULL;
4310 ops->enable = NULL; 4389 ops->enable = NULL;
@@ -4412,6 +4491,8 @@ static void rtl8169_hw_reset(struct rtl8169_private *tp)
4412 tp->mac_version == RTL_GIGA_MAC_VER_37 || 4491 tp->mac_version == RTL_GIGA_MAC_VER_37 ||
4413 tp->mac_version == RTL_GIGA_MAC_VER_40 || 4492 tp->mac_version == RTL_GIGA_MAC_VER_40 ||
4414 tp->mac_version == RTL_GIGA_MAC_VER_41 || 4493 tp->mac_version == RTL_GIGA_MAC_VER_41 ||
4494 tp->mac_version == RTL_GIGA_MAC_VER_42 ||
4495 tp->mac_version == RTL_GIGA_MAC_VER_43 ||
4415 tp->mac_version == RTL_GIGA_MAC_VER_38) { 4496 tp->mac_version == RTL_GIGA_MAC_VER_38) {
4416 RTL_W8(ChipCmd, RTL_R8(ChipCmd) | StopReq); 4497 RTL_W8(ChipCmd, RTL_R8(ChipCmd) | StopReq);
4417 rtl_udelay_loop_wait_high(tp, &rtl_txcfg_empty_cond, 100, 666); 4498 rtl_udelay_loop_wait_high(tp, &rtl_txcfg_empty_cond, 100, 666);
@@ -5127,6 +5208,8 @@ static void rtl_hw_start_8168g_1(struct rtl8169_private *tp)
5127 void __iomem *ioaddr = tp->mmio_addr; 5208 void __iomem *ioaddr = tp->mmio_addr;
5128 struct pci_dev *pdev = tp->pci_dev; 5209 struct pci_dev *pdev = tp->pci_dev;
5129 5210
5211 RTL_W32(TxConfig, RTL_R32(TxConfig) | TXCFG_AUTO_FIFO);
5212
5130 rtl_eri_write(tp, 0xc8, ERIAR_MASK_0101, 0x080002, ERIAR_EXGMAC); 5213 rtl_eri_write(tp, 0xc8, ERIAR_MASK_0101, 0x080002, ERIAR_EXGMAC);
5131 rtl_eri_write(tp, 0xcc, ERIAR_MASK_0001, 0x38, ERIAR_EXGMAC); 5214 rtl_eri_write(tp, 0xcc, ERIAR_MASK_0001, 0x38, ERIAR_EXGMAC);
5132 rtl_eri_write(tp, 0xd0, ERIAR_MASK_0001, 0x48, ERIAR_EXGMAC); 5215 rtl_eri_write(tp, 0xd0, ERIAR_MASK_0001, 0x48, ERIAR_EXGMAC);
@@ -5138,6 +5221,7 @@ static void rtl_hw_start_8168g_1(struct rtl8169_private *tp)
5138 5221
5139 rtl_w1w0_eri(tp, 0xdc, ERIAR_MASK_0001, 0x00, 0x01, ERIAR_EXGMAC); 5222 rtl_w1w0_eri(tp, 0xdc, ERIAR_MASK_0001, 0x00, 0x01, ERIAR_EXGMAC);
5140 rtl_w1w0_eri(tp, 0xdc, ERIAR_MASK_0001, 0x01, 0x00, ERIAR_EXGMAC); 5223 rtl_w1w0_eri(tp, 0xdc, ERIAR_MASK_0001, 0x01, 0x00, ERIAR_EXGMAC);
5224 rtl_eri_write(tp, 0x2f8, ERIAR_MASK_0011, 0x1d8f, ERIAR_EXGMAC);
5141 5225
5142 RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb); 5226 RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
5143 RTL_W32(MISC, RTL_R32(MISC) & ~RXDV_GATED_EN); 5227 RTL_W32(MISC, RTL_R32(MISC) & ~RXDV_GATED_EN);
@@ -5149,7 +5233,26 @@ static void rtl_hw_start_8168g_1(struct rtl8169_private *tp)
5149 /* Adjust EEE LED frequency */ 5233 /* Adjust EEE LED frequency */
5150 RTL_W8(EEE_LED, RTL_R8(EEE_LED) & ~0x07); 5234 RTL_W8(EEE_LED, RTL_R8(EEE_LED) & ~0x07);
5151 5235
5152 rtl_w1w0_eri(tp, 0x2fc, ERIAR_MASK_0001, 0x01, 0x02, ERIAR_EXGMAC); 5236 rtl_w1w0_eri(tp, 0x2fc, ERIAR_MASK_0001, 0x01, 0x06, ERIAR_EXGMAC);
5237 rtl_w1w0_eri(tp, 0x1b0, ERIAR_MASK_0011, 0x0000, 0x1000, ERIAR_EXGMAC);
5238}
5239
5240static void rtl_hw_start_8168g_2(struct rtl8169_private *tp)
5241{
5242 void __iomem *ioaddr = tp->mmio_addr;
5243 static const struct ephy_info e_info_8168g_2[] = {
5244 { 0x00, 0x0000, 0x0008 },
5245 { 0x0c, 0x3df0, 0x0200 },
5246 { 0x19, 0xffff, 0xfc00 },
5247 { 0x1e, 0xffff, 0x20eb }
5248 };
5249
5250 rtl_hw_start_8168g_1(tp);
5251
5252 /* disable aspm and clock request before access ephy */
5253 RTL_W8(Config2, RTL_R8(Config2) & ~ClkReqEn);
5254 RTL_W8(Config5, RTL_R8(Config5) & ~ASPM_en);
5255 rtl_ephy_init(tp, e_info_8168g_2, ARRAY_SIZE(e_info_8168g_2));
5153} 5256}
5154 5257
5155static void rtl_hw_start_8168(struct net_device *dev) 5258static void rtl_hw_start_8168(struct net_device *dev)
@@ -5177,10 +5280,7 @@ static void rtl_hw_start_8168(struct net_device *dev)
5177 5280
5178 rtl_set_rx_tx_desc_registers(tp, ioaddr); 5281 rtl_set_rx_tx_desc_registers(tp, ioaddr);
5179 5282
5180 rtl_set_rx_mode(dev); 5283 rtl_set_rx_tx_config_registers(tp);
5181
5182 RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) |
5183 (InterFrameGap << TxInterFrameGapShift));
5184 5284
5185 RTL_R8(IntrMask); 5285 RTL_R8(IntrMask);
5186 5286
@@ -5257,6 +5357,9 @@ static void rtl_hw_start_8168(struct net_device *dev)
5257 case RTL_GIGA_MAC_VER_41: 5357 case RTL_GIGA_MAC_VER_41:
5258 rtl_hw_start_8168g_1(tp); 5358 rtl_hw_start_8168g_1(tp);
5259 break; 5359 break;
5360 case RTL_GIGA_MAC_VER_42:
5361 rtl_hw_start_8168g_2(tp);
5362 break;
5260 5363
5261 default: 5364 default:
5262 printk(KERN_ERR PFX "%s: unknown chipset (mac_version = %d).\n", 5365 printk(KERN_ERR PFX "%s: unknown chipset (mac_version = %d).\n",
@@ -5264,9 +5367,11 @@ static void rtl_hw_start_8168(struct net_device *dev)
5264 break; 5367 break;
5265 } 5368 }
5266 5369
5370 RTL_W8(Cfg9346, Cfg9346_Lock);
5371
5267 RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb); 5372 RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
5268 5373
5269 RTL_W8(Cfg9346, Cfg9346_Lock); 5374 rtl_set_rx_mode(dev);
5270 5375
5271 RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xF000); 5376 RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xF000);
5272} 5377}
@@ -5424,6 +5529,17 @@ static void rtl_hw_start_8101(struct net_device *dev)
5424 5529
5425 RTL_W8(Cfg9346, Cfg9346_Unlock); 5530 RTL_W8(Cfg9346, Cfg9346_Unlock);
5426 5531
5532 RTL_W8(MaxTxPacketSize, TxPacketMax);
5533
5534 rtl_set_rx_max_size(ioaddr, rx_buf_sz);
5535
5536 tp->cp_cmd &= ~R810X_CPCMD_QUIRK_MASK;
5537 RTL_W16(CPlusCmd, tp->cp_cmd);
5538
5539 rtl_set_rx_tx_desc_registers(tp, ioaddr);
5540
5541 rtl_set_rx_tx_config_registers(tp);
5542
5427 switch (tp->mac_version) { 5543 switch (tp->mac_version) {
5428 case RTL_GIGA_MAC_VER_07: 5544 case RTL_GIGA_MAC_VER_07:
5429 rtl_hw_start_8102e_1(tp); 5545 rtl_hw_start_8102e_1(tp);
@@ -5451,28 +5567,21 @@ static void rtl_hw_start_8101(struct net_device *dev)
5451 case RTL_GIGA_MAC_VER_39: 5567 case RTL_GIGA_MAC_VER_39:
5452 rtl_hw_start_8106(tp); 5568 rtl_hw_start_8106(tp);
5453 break; 5569 break;
5570 case RTL_GIGA_MAC_VER_43:
5571 rtl_hw_start_8168g_2(tp);
5572 break;
5454 } 5573 }
5455 5574
5456 RTL_W8(Cfg9346, Cfg9346_Lock); 5575 RTL_W8(Cfg9346, Cfg9346_Lock);
5457 5576
5458 RTL_W8(MaxTxPacketSize, TxPacketMax);
5459
5460 rtl_set_rx_max_size(ioaddr, rx_buf_sz);
5461
5462 tp->cp_cmd &= ~R810X_CPCMD_QUIRK_MASK;
5463 RTL_W16(CPlusCmd, tp->cp_cmd);
5464
5465 RTL_W16(IntrMitigate, 0x0000); 5577 RTL_W16(IntrMitigate, 0x0000);
5466 5578
5467 rtl_set_rx_tx_desc_registers(tp, ioaddr);
5468
5469 RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb); 5579 RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
5470 rtl_set_rx_tx_config_registers(tp);
5471
5472 RTL_R8(IntrMask);
5473 5580
5474 rtl_set_rx_mode(dev); 5581 rtl_set_rx_mode(dev);
5475 5582
5583 RTL_R8(IntrMask);
5584
5476 RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xf000); 5585 RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xf000);
5477} 5586}
5478 5587
@@ -6744,6 +6853,8 @@ static void rtl_hw_initialize(struct rtl8169_private *tp)
6744 switch (tp->mac_version) { 6853 switch (tp->mac_version) {
6745 case RTL_GIGA_MAC_VER_40: 6854 case RTL_GIGA_MAC_VER_40:
6746 case RTL_GIGA_MAC_VER_41: 6855 case RTL_GIGA_MAC_VER_41:
6856 case RTL_GIGA_MAC_VER_42:
6857 case RTL_GIGA_MAC_VER_43:
6747 rtl_hw_init_8168g(tp); 6858 rtl_hw_init_8168g(tp);
6748 break; 6859 break;
6749 6860
@@ -6926,16 +7037,17 @@ rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
6926 /* don't enable SG, IP_CSUM and TSO by default - it might not work 7037 /* don't enable SG, IP_CSUM and TSO by default - it might not work
6927 * properly for all devices */ 7038 * properly for all devices */
6928 dev->features |= NETIF_F_RXCSUM | 7039 dev->features |= NETIF_F_RXCSUM |
6929 NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 7040 NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
6930 7041
6931 dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO | 7042 dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
6932 NETIF_F_RXCSUM | NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; 7043 NETIF_F_RXCSUM | NETIF_F_HW_VLAN_CTAG_TX |
7044 NETIF_F_HW_VLAN_CTAG_RX;
6933 dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO | 7045 dev->vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
6934 NETIF_F_HIGHDMA; 7046 NETIF_F_HIGHDMA;
6935 7047
6936 if (tp->mac_version == RTL_GIGA_MAC_VER_05) 7048 if (tp->mac_version == RTL_GIGA_MAC_VER_05)
6937 /* 8110SCd requires hardware Rx VLAN - disallow toggling */ 7049 /* 8110SCd requires hardware Rx VLAN - disallow toggling */
6938 dev->hw_features &= ~NETIF_F_HW_VLAN_RX; 7050 dev->hw_features &= ~NETIF_F_HW_VLAN_CTAG_RX;
6939 7051
6940 dev->hw_features |= NETIF_F_RXALL; 7052 dev->hw_features |= NETIF_F_RXALL;
6941 dev->hw_features |= NETIF_F_RXFCS; 7053 dev->hw_features |= NETIF_F_RXFCS;