atl1c: update right threshold for TSO
authorHuang, Xiong <xiong@qca.qualcomm.com>
Wed, 18 Apr 2012 22:01:23 +0000 (22:01 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 Apr 2012 00:14:19 +0000 (20:14 -0400)
atl1c_configure_tx used a wrong value of MAX_TX_OFFLOAD_THRESH(9KB)
for TSO threshold.
the right value should be 7KB
Fast Ethernet controller doesn't support Jumbo frame.

Signed-off-by: xiong <xiong@qca.qualcomm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/atheros/atl1c/atl1c.h
drivers/net/ethernet/atheros/atl1c/atl1c_hw.h
drivers/net/ethernet/atheros/atl1c/atl1c_main.c

index 0a4bfab7a19a3f6e7fb4d5748212801f1ca98438..fa315519c071b64fa46e1153a6c3759d0200f001 100644 (file)
@@ -74,8 +74,6 @@
 
 #define AT_RX_BUF_SIZE         (ETH_FRAME_LEN + VLAN_HLEN + ETH_FCS_LEN)
 #define MAX_JUMBO_FRAME_SIZE   (6*1024)
-#define MAX_TSO_FRAME_SIZE      (7*1024)
-#define MAX_TX_OFFLOAD_THRESH  (9*1024)
 
 #define AT_MAX_RECEIVE_QUEUE    4
 #define AT_DEF_RECEIVE_QUEUE   1
index c1aa3ba7545b71bbd405572703973dc9b95461fa..c9c678213107ca5581a102e76dac78e8ee33a6c5 100644 (file)
@@ -500,6 +500,7 @@ int atl1c_phy_power_saving(struct atl1c_hw *hw);
 /* Jumbo packet Threshold for task offload */
 #define REG_TX_TSO_OFFLOAD_THRESH      0x1594 /* In 8-bytes */
 #define TX_TSO_OFFLOAD_THRESH_MASK     0x07FF
+#define MAX_TSO_FRAME_SIZE             (7*1024)
 
 #define        REG_TXF_WATER_MARK              0x1598 /* In 8-bytes */
 #define TXF_WATER_MARK_MASK            0x0FFF
index d2f89f026d70280521e062be67600e95b7767559..e8e9c104cfebff4a8186bb5e3ad57f3257b39999 100644 (file)
@@ -501,11 +501,16 @@ static int atl1c_set_features(struct net_device *netdev,
 static int atl1c_change_mtu(struct net_device *netdev, int new_mtu)
 {
        struct atl1c_adapter *adapter = netdev_priv(netdev);
+       struct atl1c_hw *hw = &adapter->hw;
        int old_mtu   = netdev->mtu;
        int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN;
 
-       if ((max_frame < ETH_ZLEN + ETH_FCS_LEN) ||
-                       (max_frame > MAX_JUMBO_FRAME_SIZE)) {
+       /* Fast Ethernet controller doesn't support jumbo packet */
+       if (((hw->nic_type == athr_l2c ||
+             hw->nic_type == athr_l2c_b ||
+             hw->nic_type == athr_l2c_b2) && new_mtu > ETH_DATA_LEN) ||
+             max_frame < ETH_ZLEN + ETH_FCS_LEN ||
+             max_frame > MAX_JUMBO_FRAME_SIZE) {
                if (netif_msg_link(adapter))
                        dev_warn(&adapter->pdev->dev, "invalid MTU setting\n");
                return -EINVAL;
@@ -1049,7 +1054,7 @@ static void atl1c_configure_tx(struct atl1c_adapter *adapter)
        u16 tx_offload_thresh;
        u32 txq_ctrl_data;
 
-       tx_offload_thresh = MAX_TX_OFFLOAD_THRESH;
+       tx_offload_thresh = MAX_TSO_FRAME_SIZE;
        AT_WRITE_REG(hw, REG_TX_TSO_OFFLOAD_THRESH,
                (tx_offload_thresh >> 3) & TX_TSO_OFFLOAD_THRESH_MASK);
        max_pay_load = pcie_get_readrq(adapter->pdev) >> 8;