ice: Fix state bits on LLDP mode switch
DCBX_CAP bits were not being adjusted when switching
between SW and FW controlled LLDP.
Adjust bits to correctly indicate which mode the
LLDP logic is in.
Fixes: b94b013eb6
("ice: Implement DCBNL support")
Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
Tested-by: Tony Brelinski <tonyx.brelinski@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
parent
a6aa7c8f99
commit
0d4907f65d
|
@ -454,9 +454,7 @@ struct ice_pf {
|
|||
struct ice_hw_port_stats stats_prev;
|
||||
struct ice_hw hw;
|
||||
u8 stat_prev_loaded:1; /* has previous stats been loaded */
|
||||
#ifdef CONFIG_DCB
|
||||
u16 dcbx_cap;
|
||||
#endif /* CONFIG_DCB */
|
||||
u32 tx_timeout_count;
|
||||
unsigned long tx_timeout_last_recovery;
|
||||
u32 tx_timeout_recovery_level;
|
||||
|
|
|
@ -159,6 +159,10 @@ static u8 ice_dcbnl_setdcbx(struct net_device *netdev, u8 mode)
|
|||
struct ice_pf *pf = ice_netdev_to_pf(netdev);
|
||||
struct ice_qos_cfg *qos_cfg;
|
||||
|
||||
/* if FW LLDP agent is running, DCBNL not allowed to change mode */
|
||||
if (test_bit(ICE_FLAG_FW_LLDP_AGENT, pf->flags))
|
||||
return ICE_DCB_NO_HW_CHG;
|
||||
|
||||
/* No support for LLD_MANAGED modes or CEE+IEEE */
|
||||
if ((mode & DCB_CAP_DCBX_LLD_MANAGED) ||
|
||||
((mode & DCB_CAP_DCBX_VER_IEEE) && (mode & DCB_CAP_DCBX_VER_CEE)) ||
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include "ice_fltr.h"
|
||||
#include "ice_lib.h"
|
||||
#include "ice_dcb_lib.h"
|
||||
#include <net/dcbnl.h>
|
||||
|
||||
struct ice_stats {
|
||||
char stat_string[ETH_GSTRING_LEN];
|
||||
|
@ -1238,6 +1239,9 @@ static int ice_set_priv_flags(struct net_device *netdev, u32 flags)
|
|||
status = ice_init_pf_dcb(pf, true);
|
||||
if (status)
|
||||
dev_warn(dev, "Fail to init DCB\n");
|
||||
|
||||
pf->dcbx_cap &= ~DCB_CAP_DCBX_LLD_MANAGED;
|
||||
pf->dcbx_cap |= DCB_CAP_DCBX_HOST;
|
||||
} else {
|
||||
enum ice_status status;
|
||||
bool dcbx_agent_status;
|
||||
|
@ -1280,6 +1284,9 @@ static int ice_set_priv_flags(struct net_device *netdev, u32 flags)
|
|||
if (status)
|
||||
dev_dbg(dev, "Fail to enable MIB change events\n");
|
||||
|
||||
pf->dcbx_cap &= ~DCB_CAP_DCBX_HOST;
|
||||
pf->dcbx_cap |= DCB_CAP_DCBX_LLD_MANAGED;
|
||||
|
||||
ice_nway_reset(netdev);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue