Commit 7b63435a authored by Dave Ertman's avatar Dave Ertman Committed by Jeff Kirsher

i40e: i40e: Change ethtool check from MAC to HW flag

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: default avatarDave Ertman <david.m.ertman@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 7363115e
...@@ -507,6 +507,7 @@ struct i40e_pf { ...@@ -507,6 +507,7 @@ struct i40e_pf {
#define I40E_HW_STOP_FW_LLDP BIT(16) #define I40E_HW_STOP_FW_LLDP BIT(16)
#define I40E_HW_PORT_ID_VALID BIT(17) #define I40E_HW_PORT_ID_VALID BIT(17)
#define I40E_HW_RESTART_AUTONEG BIT(18) #define I40E_HW_RESTART_AUTONEG BIT(18)
#define I40E_HW_STOPPABLE_FW_LLDP BIT(19)
u64 flags; u64 flags;
#define I40E_FLAG_RX_CSUM_ENABLED BIT_ULL(0) #define I40E_FLAG_RX_CSUM_ENABLED BIT_ULL(0)
......
...@@ -4426,17 +4426,9 @@ static int i40e_set_priv_flags(struct net_device *dev, u32 flags) ...@@ -4426,17 +4426,9 @@ static int i40e_set_priv_flags(struct net_device *dev, u32 flags)
* unsupported FW versions. * unsupported FW versions.
*/ */
if (changed_flags & I40E_FLAG_DISABLE_FW_LLDP) { 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, dev_warn(&pf->pdev->dev,
"Unable to change FW LLDP if NPAR active\n"); "Device does not support changing FW LLDP\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");
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
} }
......
...@@ -11089,6 +11089,16 @@ static int i40e_sw_init(struct i40e_pf *pf) ...@@ -11089,6 +11089,16 @@ static int i40e_sw_init(struct i40e_pf *pf)
/* IWARP needs one extra vector for CQP just like MISC.*/ /* IWARP needs one extra vector for CQP just like MISC.*/
pf->num_iwarp_msix = (int)num_online_cpus() + 1; 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 #ifdef CONFIG_PCI_IOV
if (pf->hw.func_caps.num_vfs && pf->hw.partition_id == 1) { if (pf->hw.func_caps.num_vfs && pf->hw.partition_id == 1) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment