i40e: i40e: Change ethtool check from MAC to HW flag
authorDave Ertman <david.m.ertman@intel.com>
Mon, 22 Jan 2018 17:00:37 +0000 (12:00 -0500)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tue, 13 Feb 2018 19:40:10 +0000 (11:40 -0800)
The MAC, FW Version and NPAR check used to determine
if shutting off the FW LLDP engine is supported is not
using the usual feature check mechanism.

This patch fixes the problem by moving the feature check
to i40e_sw_init in order to set a flag in pf->hw_features
that ethtool will use for priv_flags disable operation.

Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e.h
drivers/net/ethernet/intel/i40e/i40e_ethtool.c
drivers/net/ethernet/intel/i40e/i40e_main.c

index ebe795a7f5f99ac7a0da2104bb1e65a52aa4fb1b..4cf99292fc2fb37724993344b66093a59195fe35 100644 (file)
@@ -507,6 +507,7 @@ struct i40e_pf {
 #define I40E_HW_STOP_FW_LLDP                   BIT(16)
 #define I40E_HW_PORT_ID_VALID                  BIT(17)
 #define I40E_HW_RESTART_AUTONEG                        BIT(18)
+#define I40E_HW_STOPPABLE_FW_LLDP              BIT(19)
 
        u64 flags;
 #define I40E_FLAG_RX_CSUM_ENABLED              BIT_ULL(0)
index 29a7412b2fa602246014c0e014103fe811f7d954..0dcbbda164c47789516cbc1402d5e7e0c8a845f2 100644 (file)
@@ -4426,17 +4426,9 @@ flags_complete:
         * unsupported FW versions.
         */
        if (changed_flags & I40E_FLAG_DISABLE_FW_LLDP) {
-               if (pf->hw.func_caps.npar_enable) {
+               if (!(pf->hw_features & I40E_HW_STOPPABLE_FW_LLDP)) {
                        dev_warn(&pf->pdev->dev,
-                                "Unable to change FW LLDP if NPAR active\n");
-                       return -EOPNOTSUPP;
-               }
-
-               if (pf->hw.aq.api_maj_ver < 1 ||
-                   (pf->hw.aq.api_maj_ver == 1 &&
-                    pf->hw.aq.api_min_ver < 7)) {
-                       dev_warn(&pf->pdev->dev,
-                                "FW ver does not support changing FW LLDP\n");
+                                "Device does not support changing FW LLDP\n");
                        return -EOPNOTSUPP;
                }
        }
index 8a6ebe7b42546b65d7a14a8b6fe1eb1c8a425ee7..101702af099f66ced542d00b78a764193dde2025 100644 (file)
@@ -11089,6 +11089,16 @@ static int i40e_sw_init(struct i40e_pf *pf)
                /* IWARP needs one extra vector for CQP just like MISC.*/
                pf->num_iwarp_msix = (int)num_online_cpus() + 1;
        }
+       /* Stopping the FW LLDP engine is only supported on the
+        * XL710 with a FW ver >= 1.7.  Also, stopping FW LLDP
+        * engine is not supported if NPAR is functioning on this
+        * part
+        */
+       if (pf->hw.mac.type == I40E_MAC_XL710 &&
+           !pf->hw.func_caps.npar_enable &&
+           (pf->hw.aq.api_maj_ver > 1 ||
+            (pf->hw.aq.api_maj_ver == 1 && pf->hw.aq.api_min_ver > 6)))
+               pf->hw_features |= I40E_HW_STOPPABLE_FW_LLDP;
 
 #ifdef CONFIG_PCI_IOV
        if (pf->hw.func_caps.num_vfs && pf->hw.partition_id == 1) {