Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0216da94 authored by Sudarsana Reddy Kalluru's avatar Sudarsana Reddy Kalluru Committed by David S. Miller
Browse files

qed: Do not add VLAN 0 tag to untagged frames in multi-function mode.



In certain multi-function switch dependent modes, firmware adds vlan tag 0
to the untagged frames. This leads to double tagging for the traffic
if the dcbx is enabled, which is not the desired behavior. To avoid this,
driver needs to set "dcb_dont_add_vlan0" flag.

Fixes: cac6f691 ("qed: Add support for Unified Fabric Port")
Signed-off-by: default avatarSudarsana Reddy Kalluru <Sudarsana.Kalluru@cavium.com>
Signed-off-by: default avatarTomer Tayar <Tomer.Tayar@cavium.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 50fdf601
Loading
Loading
Loading
Loading
+8 −1
Original line number Original line Diff line number Diff line
@@ -190,6 +190,7 @@ qed_dcbx_dp_protocol(struct qed_hwfn *p_hwfn, struct qed_dcbx_results *p_data)


static void
static void
qed_dcbx_set_params(struct qed_dcbx_results *p_data,
qed_dcbx_set_params(struct qed_dcbx_results *p_data,
		    struct qed_hwfn *p_hwfn,
		    struct qed_hw_info *p_info,
		    struct qed_hw_info *p_info,
		    bool enable,
		    bool enable,
		    u8 prio,
		    u8 prio,
@@ -206,6 +207,11 @@ qed_dcbx_set_params(struct qed_dcbx_results *p_data,
	else
	else
		p_data->arr[type].update = DONT_UPDATE_DCB_DSCP;
		p_data->arr[type].update = DONT_UPDATE_DCB_DSCP;


	/* Do not add vlan tag 0 when DCB is enabled and port in UFP/OV mode */
	if ((test_bit(QED_MF_8021Q_TAGGING, &p_hwfn->cdev->mf_bits) ||
	     test_bit(QED_MF_8021AD_TAGGING, &p_hwfn->cdev->mf_bits)))
		p_data->arr[type].dont_add_vlan0 = true;

	/* QM reconf data */
	/* QM reconf data */
	if (p_info->personality == personality)
	if (p_info->personality == personality)
		qed_hw_info_set_offload_tc(p_info, tc);
		qed_hw_info_set_offload_tc(p_info, tc);
@@ -231,7 +237,7 @@ qed_dcbx_update_app_info(struct qed_dcbx_results *p_data,


		personality = qed_dcbx_app_update[i].personality;
		personality = qed_dcbx_app_update[i].personality;


		qed_dcbx_set_params(p_data, p_info, enable,
		qed_dcbx_set_params(p_data, p_hwfn, p_info, enable,
				    prio, tc, type, personality);
				    prio, tc, type, personality);
	}
	}
}
}
@@ -954,6 +960,7 @@ static void qed_dcbx_update_protocol_data(struct protocol_dcb_data *p_data,
	p_data->dcb_enable_flag = p_src->arr[type].enable;
	p_data->dcb_enable_flag = p_src->arr[type].enable;
	p_data->dcb_priority = p_src->arr[type].priority;
	p_data->dcb_priority = p_src->arr[type].priority;
	p_data->dcb_tc = p_src->arr[type].tc;
	p_data->dcb_tc = p_src->arr[type].tc;
	p_data->dcb_dont_add_vlan0 = p_src->arr[type].dont_add_vlan0;
}
}


/* Set pf update ramrod command params */
/* Set pf update ramrod command params */
+1 −0
Original line number Original line Diff line number Diff line
@@ -55,6 +55,7 @@ struct qed_dcbx_app_data {
	u8 update;		/* Update indication */
	u8 update;		/* Update indication */
	u8 priority;		/* Priority */
	u8 priority;		/* Priority */
	u8 tc;			/* Traffic Class */
	u8 tc;			/* Traffic Class */
	bool dont_add_vlan0;	/* Do not insert a vlan tag with id 0 */
};
};


#define QED_DCBX_VERSION_DISABLED       0
#define QED_DCBX_VERSION_DISABLED       0