atl1c: update right threshold for TSO

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>
This commit is contained in:
Huang, Xiong 2012-04-18 22:01:23 +00:00 committed by David S. Miller
parent 969a7ee2a8
commit c08b9b2a5b
3 changed files with 9 additions and 5 deletions

View File

@ -74,8 +74,6 @@
#define AT_RX_BUF_SIZE (ETH_FRAME_LEN + VLAN_HLEN + ETH_FCS_LEN) #define AT_RX_BUF_SIZE (ETH_FRAME_LEN + VLAN_HLEN + ETH_FCS_LEN)
#define MAX_JUMBO_FRAME_SIZE (6*1024) #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_MAX_RECEIVE_QUEUE 4
#define AT_DEF_RECEIVE_QUEUE 1 #define AT_DEF_RECEIVE_QUEUE 1

View File

@ -500,6 +500,7 @@ int atl1c_phy_power_saving(struct atl1c_hw *hw);
/* Jumbo packet Threshold for task offload */ /* Jumbo packet Threshold for task offload */
#define REG_TX_TSO_OFFLOAD_THRESH 0x1594 /* In 8-bytes */ #define REG_TX_TSO_OFFLOAD_THRESH 0x1594 /* In 8-bytes */
#define TX_TSO_OFFLOAD_THRESH_MASK 0x07FF #define TX_TSO_OFFLOAD_THRESH_MASK 0x07FF
#define MAX_TSO_FRAME_SIZE (7*1024)
#define REG_TXF_WATER_MARK 0x1598 /* In 8-bytes */ #define REG_TXF_WATER_MARK 0x1598 /* In 8-bytes */
#define TXF_WATER_MARK_MASK 0x0FFF #define TXF_WATER_MARK_MASK 0x0FFF

View 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) static int atl1c_change_mtu(struct net_device *netdev, int new_mtu)
{ {
struct atl1c_adapter *adapter = netdev_priv(netdev); struct atl1c_adapter *adapter = netdev_priv(netdev);
struct atl1c_hw *hw = &adapter->hw;
int old_mtu = netdev->mtu; int old_mtu = netdev->mtu;
int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN; int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN;
if ((max_frame < ETH_ZLEN + ETH_FCS_LEN) || /* Fast Ethernet controller doesn't support jumbo packet */
(max_frame > MAX_JUMBO_FRAME_SIZE)) { 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)) if (netif_msg_link(adapter))
dev_warn(&adapter->pdev->dev, "invalid MTU setting\n"); dev_warn(&adapter->pdev->dev, "invalid MTU setting\n");
return -EINVAL; return -EINVAL;
@ -1049,7 +1054,7 @@ static void atl1c_configure_tx(struct atl1c_adapter *adapter)
u16 tx_offload_thresh; u16 tx_offload_thresh;
u32 txq_ctrl_data; 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, AT_WRITE_REG(hw, REG_TX_TSO_OFFLOAD_THRESH,
(tx_offload_thresh >> 3) & TX_TSO_OFFLOAD_THRESH_MASK); (tx_offload_thresh >> 3) & TX_TSO_OFFLOAD_THRESH_MASK);
max_pay_load = pcie_get_readrq(adapter->pdev) >> 8; max_pay_load = pcie_get_readrq(adapter->pdev) >> 8;