75
75
#define R8169_TX_RING_BYTES (NUM_TX_DESC * sizeof(struct TxDesc))
76
76
#define R8169_RX_RING_BYTES (NUM_RX_DESC * sizeof(struct RxDesc))
77
77
78
+ #define OCP_STD_PHY_BASE 0xa400
79
+
78
80
#define RTL_CFG_NO_GBIT 1
79
81
80
82
/* write/read MMIO register */
@@ -847,8 +849,6 @@ static void r8168_mac_ocp_modify(struct rtl8169_private *tp, u32 reg, u16 mask,
847
849
r8168_mac_ocp_write (tp , reg , (data & ~mask ) | set );
848
850
}
849
851
850
- #define OCP_STD_PHY_BASE 0xa400
851
-
852
852
static void r8168g_mdio_write (struct rtl8169_private * tp , int reg , int value )
853
853
{
854
854
if (reg == 0x1f ) {
@@ -2397,6 +2397,8 @@ static void rtl_pll_power_up(struct rtl8169_private *tp)
2397
2397
2398
2398
static void rtl_init_rxcfg (struct rtl8169_private * tp )
2399
2399
{
2400
+ u32 vlan ;
2401
+
2400
2402
switch (tp -> mac_version ) {
2401
2403
case RTL_GIGA_MAC_VER_02 ... RTL_GIGA_MAC_VER_06 :
2402
2404
case RTL_GIGA_MAC_VER_10 ... RTL_GIGA_MAC_VER_17 :
@@ -2411,8 +2413,9 @@ static void rtl_init_rxcfg(struct rtl8169_private *tp)
2411
2413
RTL_W32 (tp , RxConfig , RX128_INT_EN | RX_MULTI_EN | RX_DMA_BURST | RX_EARLY_OFF );
2412
2414
break ;
2413
2415
case RTL_GIGA_MAC_VER_60 ... RTL_GIGA_MAC_VER_61 :
2414
- RTL_W32 (tp , RxConfig , RX_FETCH_DFLT_8125 | RX_VLAN_8125 |
2415
- RX_DMA_BURST );
2416
+ /* VLAN flags are controlled by NETIF_F_HW_VLAN_CTAG_RX */
2417
+ vlan = RTL_R32 (tp , RxConfig ) & RX_VLAN_8125 ;
2418
+ RTL_W32 (tp , RxConfig , vlan | RX_FETCH_DFLT_8125 | RX_DMA_BURST );
2416
2419
break ;
2417
2420
default :
2418
2421
RTL_W32 (tp , RxConfig , RX128_INT_EN | RX_DMA_BURST );
@@ -4124,25 +4127,20 @@ static bool rtl8169_tso_csum_v2(struct rtl8169_private *tp,
4124
4127
struct sk_buff * skb , u32 * opts )
4125
4128
{
4126
4129
u32 transport_offset = (u32 )skb_transport_offset (skb );
4127
- u32 mss = skb_shinfo (skb )-> gso_size ;
4130
+ struct skb_shared_info * shinfo = skb_shinfo (skb );
4131
+ u32 mss = shinfo -> gso_size ;
4128
4132
4129
4133
if (mss ) {
4130
- switch (vlan_get_protocol (skb )) {
4131
- case htons (ETH_P_IP ):
4134
+ if (shinfo -> gso_type & SKB_GSO_TCPV4 ) {
4132
4135
opts [0 ] |= TD1_GTSENV4 ;
4133
- break ;
4134
-
4135
- case htons (ETH_P_IPV6 ):
4136
+ } else if (shinfo -> gso_type & SKB_GSO_TCPV6 ) {
4136
4137
if (skb_cow_head (skb , 0 ))
4137
4138
return false;
4138
4139
4139
4140
tcp_v6_gso_csum_prep (skb );
4140
4141
opts [0 ] |= TD1_GTSENV6 ;
4141
- break ;
4142
-
4143
- default :
4142
+ } else {
4144
4143
WARN_ON_ONCE (1 );
4145
- break ;
4146
4144
}
4147
4145
4148
4146
opts [0 ] |= transport_offset << GTTCPHO_SHIFT ;
@@ -4308,6 +4306,37 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
4308
4306
return NETDEV_TX_BUSY ;
4309
4307
}
4310
4308
4309
+ static unsigned int rtl_last_frag_len (struct sk_buff * skb )
4310
+ {
4311
+ struct skb_shared_info * info = skb_shinfo (skb );
4312
+ unsigned int nr_frags = info -> nr_frags ;
4313
+
4314
+ if (!nr_frags )
4315
+ return UINT_MAX ;
4316
+
4317
+ return skb_frag_size (info -> frags + nr_frags - 1 );
4318
+ }
4319
+
4320
+ /* Workaround for hw issues with TSO on RTL8168evl */
4321
+ static netdev_features_t rtl8168evl_fix_tso (struct sk_buff * skb ,
4322
+ netdev_features_t features )
4323
+ {
4324
+ /* IPv4 header has options field */
4325
+ if (vlan_get_protocol (skb ) == htons (ETH_P_IP ) &&
4326
+ ip_hdrlen (skb ) > sizeof (struct iphdr ))
4327
+ features &= ~NETIF_F_ALL_TSO ;
4328
+
4329
+ /* IPv4 TCP header has options field */
4330
+ else if (skb_shinfo (skb )-> gso_type & SKB_GSO_TCPV4 &&
4331
+ tcp_hdrlen (skb ) > sizeof (struct tcphdr ))
4332
+ features &= ~NETIF_F_ALL_TSO ;
4333
+
4334
+ else if (rtl_last_frag_len (skb ) <= 6 )
4335
+ features &= ~NETIF_F_ALL_TSO ;
4336
+
4337
+ return features ;
4338
+ }
4339
+
4311
4340
static netdev_features_t rtl8169_features_check (struct sk_buff * skb ,
4312
4341
struct net_device * dev ,
4313
4342
netdev_features_t features )
@@ -4316,6 +4345,9 @@ static netdev_features_t rtl8169_features_check(struct sk_buff *skb,
4316
4345
struct rtl8169_private * tp = netdev_priv (dev );
4317
4346
4318
4347
if (skb_is_gso (skb )) {
4348
+ if (tp -> mac_version == RTL_GIGA_MAC_VER_34 )
4349
+ features = rtl8168evl_fix_tso (skb , features );
4350
+
4319
4351
if (transport_offset > GTTCPHO_MAX &&
4320
4352
rtl_chip_supports_csum_v2 (tp ))
4321
4353
features &= ~NETIF_F_ALL_TSO ;
@@ -5189,8 +5221,6 @@ static int r8169_mdio_register(struct rtl8169_private *tp)
5189
5221
5190
5222
static void rtl_hw_init_8168g (struct rtl8169_private * tp )
5191
5223
{
5192
- tp -> ocp_base = OCP_STD_PHY_BASE ;
5193
-
5194
5224
RTL_W32 (tp , MISC , RTL_R32 (tp , MISC ) | RXDV_GATED_EN );
5195
5225
5196
5226
if (!rtl_udelay_loop_wait_high (tp , & rtl_txcfg_empty_cond , 100 , 42 ))
@@ -5215,8 +5245,6 @@ static void rtl_hw_init_8168g(struct rtl8169_private *tp)
5215
5245
5216
5246
static void rtl_hw_init_8125 (struct rtl8169_private * tp )
5217
5247
{
5218
- tp -> ocp_base = OCP_STD_PHY_BASE ;
5219
-
5220
5248
RTL_W32 (tp , MISC , RTL_R32 (tp , MISC ) | RXDV_GATED_EN );
5221
5249
5222
5250
if (!rtl_udelay_loop_wait_high (tp , & rtl_rxtx_empty_cond , 100 , 42 ))
@@ -5353,6 +5381,7 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
5353
5381
tp -> msg_enable = netif_msg_init (debug .msg_enable , R8169_MSG_DEFAULT );
5354
5382
tp -> supports_gmii = ent -> driver_data == RTL_CFG_NO_GBIT ? 0 : 1 ;
5355
5383
tp -> eee_adv = -1 ;
5384
+ tp -> ocp_base = OCP_STD_PHY_BASE ;
5356
5385
5357
5386
/* Get the *optional* external "ether_clk" used on some boards */
5358
5387
rc = rtl_get_ether_clk (tp );
@@ -5443,14 +5472,9 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
5443
5472
5444
5473
dev -> hw_features = NETIF_F_IP_CSUM | NETIF_F_RXCSUM |
5445
5474
NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX ;
5446
- dev -> vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
5447
- NETIF_F_HIGHDMA ;
5475
+ dev -> vlan_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO ;
5448
5476
dev -> priv_flags |= IFF_LIVE_ADDR_CHANGE ;
5449
5477
5450
- tp -> cp_cmd |= RxChkSum ;
5451
- /* RTL8125 uses register RxConfig for VLAN offloading config */
5452
- if (!rtl_is_8125 (tp ))
5453
- tp -> cp_cmd |= RxVlan ;
5454
5478
/*
5455
5479
* Pretend we are using VLANs; This bypasses a nasty bug where
5456
5480
* Interrupts stop flowing on high load on 8110SCd controllers.
@@ -5482,6 +5506,9 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
5482
5506
dev -> hw_features |= NETIF_F_RXALL ;
5483
5507
dev -> hw_features |= NETIF_F_RXFCS ;
5484
5508
5509
+ /* configure chip for default features */
5510
+ rtl8169_set_features (dev , dev -> features );
5511
+
5485
5512
jumbo_max = rtl_jumbo_max (tp );
5486
5513
if (jumbo_max )
5487
5514
dev -> max_mtu = jumbo_max ;
0 commit comments