aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLihong Yang <lihong.yang@intel.com>2017-01-30 15:29:33 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2017-03-15 04:58:57 -0400
commit26f77e53cfee2b1b066071353be03988897e23c3 (patch)
treee9385abb9bd8403528809b1508bcd1b4db553125
parentc271dd6c391b535226cf1a81aaad9f33cb5899d3 (diff)
i40e: fix RSS queues only operating on PF0
This patch fixes the issue that RSS offloading only works on PF0 by using the direct register writing of the hash keys for the VFs instead of using the admin queue command to do so. Change-ID: Ia02cda7dbaa23def342e8786097a2c03db6f580b Signed-off-by: Lihong Yang <lihong.yang@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_main.c11
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c6
2 files changed, 5 insertions, 12 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index cb678ed7a2ad..e577ff8a9c76 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -8394,13 +8394,10 @@ static int i40e_config_rss_reg(struct i40e_vsi *vsi, const u8 *seed,
8394 8394
8395 if (vsi->type == I40E_VSI_MAIN) { 8395 if (vsi->type == I40E_VSI_MAIN) {
8396 for (i = 0; i <= I40E_PFQF_HKEY_MAX_INDEX; i++) 8396 for (i = 0; i <= I40E_PFQF_HKEY_MAX_INDEX; i++)
8397 i40e_write_rx_ctl(hw, I40E_PFQF_HKEY(i), 8397 wr32(hw, I40E_PFQF_HKEY(i), seed_dw[i]);
8398 seed_dw[i]);
8399 } else if (vsi->type == I40E_VSI_SRIOV) { 8398 } else if (vsi->type == I40E_VSI_SRIOV) {
8400 for (i = 0; i <= I40E_VFQF_HKEY1_MAX_INDEX; i++) 8399 for (i = 0; i <= I40E_VFQF_HKEY1_MAX_INDEX; i++)
8401 i40e_write_rx_ctl(hw, 8400 wr32(hw, I40E_VFQF_HKEY1(i, vf_id), seed_dw[i]);
8402 I40E_VFQF_HKEY1(i, vf_id),
8403 seed_dw[i]);
8404 } else { 8401 } else {
8405 dev_err(&pf->pdev->dev, "Cannot set RSS seed - invalid VSI type\n"); 8402 dev_err(&pf->pdev->dev, "Cannot set RSS seed - invalid VSI type\n");
8406 } 8403 }
@@ -8418,9 +8415,7 @@ static int i40e_config_rss_reg(struct i40e_vsi *vsi, const u8 *seed,
8418 if (lut_size != I40E_VF_HLUT_ARRAY_SIZE) 8415 if (lut_size != I40E_VF_HLUT_ARRAY_SIZE)
8419 return -EINVAL; 8416 return -EINVAL;
8420 for (i = 0; i <= I40E_VFQF_HLUT_MAX_INDEX; i++) 8417 for (i = 0; i <= I40E_VFQF_HLUT_MAX_INDEX; i++)
8421 i40e_write_rx_ctl(hw, 8418 wr32(hw, I40E_VFQF_HLUT1(i, vf_id), lut_dw[i]);
8422 I40E_VFQF_HLUT1(i, vf_id),
8423 lut_dw[i]);
8424 } else { 8419 } else {
8425 dev_err(&pf->pdev->dev, "Cannot set RSS LUT - invalid VSI type\n"); 8420 dev_err(&pf->pdev->dev, "Cannot set RSS LUT - invalid VSI type\n");
8426 } 8421 }
diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
index 25ee5af2d136..115a7286ab8f 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
@@ -702,10 +702,8 @@ static int i40e_alloc_vsi_res(struct i40e_vf *vf, enum i40e_vsi_type type)
702 dev_info(&pf->pdev->dev, 702 dev_info(&pf->pdev->dev,
703 "Could not allocate VF broadcast filter\n"); 703 "Could not allocate VF broadcast filter\n");
704 spin_unlock_bh(&vsi->mac_filter_hash_lock); 704 spin_unlock_bh(&vsi->mac_filter_hash_lock);
705 i40e_write_rx_ctl(&pf->hw, I40E_VFQF_HENA1(0, vf->vf_id), 705 wr32(&pf->hw, I40E_VFQF_HENA1(0, vf->vf_id), (u32)hena);
706 (u32)hena); 706 wr32(&pf->hw, I40E_VFQF_HENA1(1, vf->vf_id), (u32)(hena >> 32));
707 i40e_write_rx_ctl(&pf->hw, I40E_VFQF_HENA1(1, vf->vf_id),
708 (u32)(hena >> 32));
709 } 707 }
710 708
711 /* program mac filter */ 709 /* program mac filter */