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

Commit 0c8afaa8 authored by Sudarsana Reddy Kalluru's avatar Sudarsana Reddy Kalluru Committed by Greg Kroah-Hartman
Browse files

bnx2x: Send update-svid ramrod with retry/poll flags enabled



[ Upstream commit 9061193c4ee065d3240fde06767c2e06ec61decc ]

Driver sends update-SVID ramrod in the MFW notification path.
If there is a pending ramrod, driver doesn't retry the command
and storm firmware will never be updated with the SVID value.
The patch adds changes to send update-svid ramrod in process context with
retry/poll flags set.

Signed-off-by: default avatarSudarsana Reddy Kalluru <Sudarsana.Kalluru@cavium.com>
Signed-off-by: default avatarAriel Elior <ariel.elior@cavium.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent e7c8e00e
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -1278,6 +1278,7 @@ enum sp_rtnl_flag {
	BNX2X_SP_RTNL_TX_STOP,
	BNX2X_SP_RTNL_TX_STOP,
	BNX2X_SP_RTNL_GET_DRV_VERSION,
	BNX2X_SP_RTNL_GET_DRV_VERSION,
	BNX2X_SP_RTNL_CHANGE_UDP_PORT,
	BNX2X_SP_RTNL_CHANGE_UDP_PORT,
	BNX2X_SP_RTNL_UPDATE_SVID,
};
};


enum bnx2x_iov_flag {
enum bnx2x_iov_flag {
+9 −1
Original line number Original line Diff line number Diff line
@@ -2925,6 +2925,10 @@ static void bnx2x_handle_update_svid_cmd(struct bnx2x *bp)
	func_params.f_obj = &bp->func_obj;
	func_params.f_obj = &bp->func_obj;
	func_params.cmd = BNX2X_F_CMD_SWITCH_UPDATE;
	func_params.cmd = BNX2X_F_CMD_SWITCH_UPDATE;


	/* Prepare parameters for function state transitions */
	__set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags);
	__set_bit(RAMROD_RETRY, &func_params.ramrod_flags);

	if (IS_MF_UFP(bp) || IS_MF_BD(bp)) {
	if (IS_MF_UFP(bp) || IS_MF_BD(bp)) {
		int func = BP_ABS_FUNC(bp);
		int func = BP_ABS_FUNC(bp);
		u32 val;
		u32 val;
@@ -4301,7 +4305,8 @@ static void bnx2x_attn_int_deasserted3(struct bnx2x *bp, u32 attn)
				bnx2x_handle_eee_event(bp);
				bnx2x_handle_eee_event(bp);


			if (val & DRV_STATUS_OEM_UPDATE_SVID)
			if (val & DRV_STATUS_OEM_UPDATE_SVID)
				bnx2x_handle_update_svid_cmd(bp);
				bnx2x_schedule_sp_rtnl(bp,
					BNX2X_SP_RTNL_UPDATE_SVID, 0);


			if (bp->link_vars.periodic_flags &
			if (bp->link_vars.periodic_flags &
			    PERIODIC_FLAGS_LINK_EVENT) {
			    PERIODIC_FLAGS_LINK_EVENT) {
@@ -10369,6 +10374,9 @@ static void bnx2x_sp_rtnl_task(struct work_struct *work)
			       &bp->sp_rtnl_state))
			       &bp->sp_rtnl_state))
		bnx2x_update_mng_version(bp);
		bnx2x_update_mng_version(bp);


	if (test_and_clear_bit(BNX2X_SP_RTNL_UPDATE_SVID, &bp->sp_rtnl_state))
		bnx2x_handle_update_svid_cmd(bp);

	if (test_and_clear_bit(BNX2X_SP_RTNL_CHANGE_UDP_PORT,
	if (test_and_clear_bit(BNX2X_SP_RTNL_CHANGE_UDP_PORT,
			       &bp->sp_rtnl_state)) {
			       &bp->sp_rtnl_state)) {
		if (bnx2x_udp_port_update(bp)) {
		if (bnx2x_udp_port_update(bp)) {