Commit 241c8cf0 authored by Paul Greenwalt's avatar Paul Greenwalt Committed by Jeff Kirsher
Browse files

ice: configure software LLDP in ice_init_pf_dcb



Move software LLDP configuration when FW DCBX is disabled to
ice_init_pf_dcb, since that is where the FW DCBX state is determined.
Remove this software LLDP configuration from ice_vsi_setup and
ice_set_priv_flags. Software configuration includes redirecting Rx LLDP
packets up the stack, when FW DCBX is not running.

Signed-off-by: default avatarPaul Greenwalt <paul.greenwalt@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent c0a3665f
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -594,6 +594,8 @@ int ice_init_pf_dcb(struct ice_pf *pf, bool locked)
		 "DCB is enabled in the hardware, max number of TCs supported on this port are %d\n",
		 pf->hw.func_caps.common_cap.maxtc);
	if (err) {
		struct ice_vsi *pf_vsi;

		/* FW LLDP is disabled, activate SW DCBX/LLDP mode */
		dev_info(&pf->pdev->dev,
			 "FW LLDP is disabled, DCBx/LLDP in SW mode.\n");
@@ -606,6 +608,19 @@ int ice_init_pf_dcb(struct ice_pf *pf, bool locked)
			goto dcb_init_err;
		}

		/* If the FW DCBX engine is not running then Rx LLDP packets
		 * need to be redirected up the stack.
		 */
		pf_vsi = ice_get_main_vsi(pf);
		if (!pf_vsi) {
			dev_err(&pf->pdev->dev,
				"Failed to set local DCB config\n");
			err = -EIO;
			goto dcb_init_err;
		}

		ice_cfg_sw_lldp(pf_vsi, false, true);

		pf->dcbx_cap = DCB_CAP_DCBX_HOST | DCB_CAP_DCBX_VER_IEEE;
		return 0;
	}
+0 −5
Original line number Diff line number Diff line
@@ -1206,11 +1206,6 @@ static int ice_set_priv_flags(struct net_device *netdev, u32 flags)
			status = ice_init_pf_dcb(pf, true);
			if (status)
				dev_warn(&pf->pdev->dev, "Fail to init DCB\n");

			/* Forward LLDP packets to default VSI so that they
			 * are passed up the stack
			 */
			ice_cfg_sw_lldp(vsi, false, true);
		} else {
			enum ice_status status;
			bool dcbx_agent_status;
+4 −10
Original line number Diff line number Diff line
@@ -1881,22 +1881,16 @@ ice_vsi_setup(struct ice_pf *pf, struct ice_port_info *pi,
	 * out PAUSE or PFC frames. If enabled, FW can still send FC frames.
	 * The rule is added once for PF VSI in order to create appropriate
	 * recipe, since VSI/VSI list is ignored with drop action...
	 * Also add rules to handle LLDP Tx and Rx packets.  Tx LLDP packets
	 * need to be dropped so that VFs cannot send LLDP packets to reconfig
	 * DCB settings in the HW.  Also, if the FW DCBX engine is not running
	 * then Rx LLDP packets need to be redirected up the stack.
	 * Also add rules to handle LLDP Tx packets.  Tx LLDP packets need to
	 * be dropped so that VFs cannot send LLDP packets to reconfig DCB
	 * settings in the HW.
	 */
	if (!ice_is_safe_mode(pf)) {
	if (!ice_is_safe_mode(pf))
		if (vsi->type == ICE_VSI_PF) {
			ice_vsi_add_rem_eth_mac(vsi, true);

			/* Tx LLDP packets */
			ice_cfg_sw_lldp(vsi, true, true);

			/* Rx LLDP packets */
			if (!test_bit(ICE_FLAG_FW_LLDP_AGENT, pf->flags))
				ice_cfg_sw_lldp(vsi, false, true);
		}
		}

	return vsi;