This patch allows disabling FW LLDP agent on X722 devices.
It also changes a source of information for this feature from
pf->hw_features to pf->hw.flags which are set in i40e_init_adminq.
Signed-off-by: Patryk Małek <patryk.malek@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
 #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)
 
        u32 flags;
 #define I40E_FLAG_RX_CSUM_ENABLED              BIT(0)
 
                (struct i40e_aqc_set_dcb_parameters *)&desc.params.raw;
        i40e_status status;
 
+       if (!(hw->flags & I40E_HW_FLAG_FW_LLDP_STOPPABLE))
+               return I40E_ERR_DEVICE_NOT_SUPPORTED;
+
        i40e_fill_default_direct_cmd_desc(&desc,
                                          i40e_aqc_opc_set_dcb_parameters);
 
 
                return -EOPNOTSUPP;
 
        /* If the driver detected FW LLDP was disabled on init, this flag could
-        * be set, however we do not support _changing_ the flag if NPAR is
-        * enabled or FW API version < 1.7.  There are situations where older
-        * FW versions/NPAR enabled PFs could disable LLDP, however we _must_
-        * not allow the user to enable/disable LLDP with this flag on
-        * unsupported FW versions.
+        * be set, however we do not support _changing_ the flag:
+        * - on XL710 if NPAR is enabled or FW API version < 1.7
+        * - on X722 with FW API version < 1.6
+        * There are situations where older FW versions/NPAR enabled PFs could
+        * disable LLDP, however we _must_ not allow the user to enable/disable
+        * LLDP with this flag on unsupported FW versions.
         */
        if (changed_flags & I40E_FLAG_DISABLE_FW_LLDP) {
-               if (!(pf->hw_features & I40E_HW_STOPPABLE_FW_LLDP)) {
+               if (!(pf->hw.flags & I40E_HW_FLAG_FW_LLDP_STOPPABLE)) {
                        dev_warn(&pf->pdev->dev,
                                 "Device does not support changing FW LLDP\n");
                        return -EOPNOTSUPP;
 
                /* 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
+       /* Stopping FW LLDP engine is supported on XL710 and X722
+        * starting from FW versions determined in i40e_init_adminq.
+        * Stopping the FW LLDP engine is not supported on XL710
+        * if NPAR is functioning so unset this hw flag in this case.
         */
        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;
+           pf->hw.func_caps.npar_enable &&
+           (pf->hw.flags & I40E_HW_FLAG_FW_LLDP_STOPPABLE))
+               pf->hw.flags &= ~I40E_HW_FLAG_FW_LLDP_STOPPABLE;
 
 #ifdef CONFIG_PCI_IOV
        if (pf->hw.func_caps.num_vfs && pf->hw.partition_id == 1) {