aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
diff options
context:
space:
mode:
authorHuang, Xiong <xiong@qca.qualcomm.com>2012-04-17 15:32:36 -0400
committerDavid S. Miller <davem@davemloft.net>2012-04-18 15:35:31 -0400
commit59e26eff48745287d648ed4606fe2cc66a75991f (patch)
tree5445c42f791fc1d877c705592f57350d3271d914 /drivers/net/ethernet/atheros/atl1c/atl1c_main.c
parentc24588afc536a35c924d014f13b669b20ccf8553 (diff)
atl1c: restore max-read-request-size in Device Conrol Register
in some platforms, we found the max-read-request-size in Device Control Register is set to 0 by (BIOS?) during bootup, this will cause the performance(throughput) very bad. Restore it to a min-value. register definition of REG_DEVICE_CTRL is removed, using kernel API to access it as it's a standard pcie register. Signed-off-by: xiong <xiong@qca.qualcomm.com> Tested-by: Liu David <dwliu@qca.qualcomm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/atheros/atl1c/atl1c_main.c')
-rw-r--r--drivers/net/ethernet/atheros/atl1c/atl1c_main.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
index 2458e4c8b8d..02754ac1306 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
@@ -1045,19 +1045,23 @@ static void atl1c_configure_des_ring(struct atl1c_adapter *adapter)
1045static void atl1c_configure_tx(struct atl1c_adapter *adapter) 1045static void atl1c_configure_tx(struct atl1c_adapter *adapter)
1046{ 1046{
1047 struct atl1c_hw *hw = &adapter->hw; 1047 struct atl1c_hw *hw = &adapter->hw;
1048 u32 dev_ctrl_data; 1048 int max_pay_load;
1049 u32 max_pay_load;
1050 u16 tx_offload_thresh; 1049 u16 tx_offload_thresh;
1051 u32 txq_ctrl_data; 1050 u32 txq_ctrl_data;
1052 1051
1053 tx_offload_thresh = MAX_TX_OFFLOAD_THRESH; 1052 tx_offload_thresh = MAX_TX_OFFLOAD_THRESH;
1054 AT_WRITE_REG(hw, REG_TX_TSO_OFFLOAD_THRESH, 1053 AT_WRITE_REG(hw, REG_TX_TSO_OFFLOAD_THRESH,
1055 (tx_offload_thresh >> 3) & TX_TSO_OFFLOAD_THRESH_MASK); 1054 (tx_offload_thresh >> 3) & TX_TSO_OFFLOAD_THRESH_MASK);
1056 AT_READ_REG(hw, REG_DEVICE_CTRL, &dev_ctrl_data); 1055 max_pay_load = pcie_get_readrq(adapter->pdev) >> 8;
1057 max_pay_load = (dev_ctrl_data >> DEVICE_CTRL_MAX_RREQ_SZ_SHIFT) &
1058 DEVICE_CTRL_MAX_RREQ_SZ_MASK;
1059 hw->dmar_block = min_t(u32, max_pay_load, hw->dmar_block); 1056 hw->dmar_block = min_t(u32, max_pay_load, hw->dmar_block);
1060 1057 /*
1058 * if BIOS had changed the dam-read-max-length to an invalid value,
1059 * restore it to default value
1060 */
1061 if (hw->dmar_block < DEVICE_CTRL_MAXRRS_MIN) {
1062 pcie_set_readrq(adapter->pdev, 128 << DEVICE_CTRL_MAXRRS_MIN);
1063 hw->dmar_block = DEVICE_CTRL_MAXRRS_MIN;
1064 }
1061 txq_ctrl_data = 1065 txq_ctrl_data =
1062 hw->nic_type == athr_l2c_b || hw->nic_type == athr_l2c_b2 ? 1066 hw->nic_type == athr_l2c_b || hw->nic_type == athr_l2c_b2 ?
1063 L2CB_TXQ_CFGV : L1C_TXQ_CFGV; 1067 L2CB_TXQ_CFGV : L1C_TXQ_CFGV;