aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShannon Nelson <shannon.nelson@intel.com>2014-06-03 21:23:23 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2014-06-24 21:19:14 -0400
commit6252c7e4ee48f016dd075168df9fabc7197f38e5 (patch)
treefb3731a7f96cd719ef999d319375e0e300161098
parent6c8ad1ba1650e6c22dcaa5fe288c6236c3b25ae5 (diff)
i40e: reapply LAA after reset
The LAA is lost on a reset, so be sure to replay it when rebuilding the switch after any reset. Change-ID: I6e643f9a59dfd899b6cbdf84d93b4bc9c37bb949 Signed-off-by: Shannon Nelson <shannon.nelson@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e.h1
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_main.c11
2 files changed, 10 insertions, 2 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h
index 07811dd6eb89..2ec6e8a11ee1 100644
--- a/drivers/net/ethernet/intel/i40e/i40e.h
+++ b/drivers/net/ethernet/intel/i40e/i40e.h
@@ -362,6 +362,7 @@ struct i40e_mac_filter {
362 bool is_vf; /* filter belongs to a VF */ 362 bool is_vf; /* filter belongs to a VF */
363 bool is_netdev; /* filter belongs to a netdev */ 363 bool is_netdev; /* filter belongs to a netdev */
364 bool changed; /* filter needs to be sync'd to the HW */ 364 bool changed; /* filter needs to be sync'd to the HW */
365 bool is_laa; /* filter is a Locally Administered Address */
365}; 366};
366 367
367struct i40e_veb { 368struct i40e_veb {
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 81cbea72722e..9276ca3f43f2 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -1344,8 +1344,8 @@ static int i40e_set_mac(struct net_device *netdev, void *p)
1344 } 1344 }
1345 } 1345 }
1346 1346
1347 if (!i40e_find_mac(vsi, addr->sa_data, false, true)) { 1347 f = i40e_find_mac(vsi, addr->sa_data, false, true);
1348 1348 if (!f) {
1349 /* In order to be sure to not drop any packets, add the 1349 /* In order to be sure to not drop any packets, add the
1350 * new address first then delete the old one. 1350 * new address first then delete the old one.
1351 */ 1351 */
@@ -1360,6 +1360,7 @@ static int i40e_set_mac(struct net_device *netdev, void *p)
1360 i40e_sync_vsi_filters(vsi); 1360 i40e_sync_vsi_filters(vsi);
1361 } 1361 }
1362 1362
1363 f->is_laa = true;
1363 if (!ether_addr_equal(netdev->dev_addr, addr->sa_data)) 1364 if (!ether_addr_equal(netdev->dev_addr, addr->sa_data))
1364 ether_addr_copy(netdev->dev_addr, addr->sa_data); 1365 ether_addr_copy(netdev->dev_addr, addr->sa_data);
1365 1366
@@ -7378,6 +7379,12 @@ static int i40e_add_vsi(struct i40e_vsi *vsi)
7378 list_for_each_entry_safe(f, ftmp, &vsi->mac_filter_list, list) { 7379 list_for_each_entry_safe(f, ftmp, &vsi->mac_filter_list, list) {
7379 f->changed = true; 7380 f->changed = true;
7380 f_count++; 7381 f_count++;
7382
7383 if (f->is_laa && vsi->type == I40E_VSI_MAIN) {
7384 i40e_aq_mac_address_write(&vsi->back->hw,
7385 I40E_AQC_WRITE_TYPE_LAA_WOL,
7386 f->macaddr, NULL);
7387 }
7381 } 7388 }
7382 if (f_count) { 7389 if (f_count) {
7383 vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED; 7390 vsi->flags |= I40E_VSI_FLAG_FILTER_CHANGED;