diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom')
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 7 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c | 18 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 7 | ||||
| -rw-r--r-- | drivers/net/ethernet/broadcom/tg3.c | 7 | 
4 files changed, 27 insertions, 12 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c index 4046f97378c..57619dd4a92 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c @@ -2614,6 +2614,9 @@ int bnx2x_nic_load(struct bnx2x *bp, int load_mode)  			}  		} +		/* initialize FW coalescing state machines in RAM */ +		bnx2x_update_coalesce(bp); +  		/* setup the leading queue */  		rc = bnx2x_setup_leading(bp);  		if (rc) { @@ -4580,11 +4583,11 @@ static void storm_memset_hc_disable(struct bnx2x *bp, u8 port,  	u32 enable_flag = disable ? 0 : (1 << HC_INDEX_DATA_HC_ENABLED_SHIFT);  	u32 addr = BAR_CSTRORM_INTMEM +  		   CSTORM_STATUS_BLOCK_DATA_FLAGS_OFFSET(fw_sb_id, sb_index); -	u16 flags = REG_RD16(bp, addr); +	u8 flags = REG_RD8(bp, addr);  	/* clear and set */  	flags &= ~HC_INDEX_DATA_HC_ENABLED;  	flags |= enable_flag; -	REG_WR16(bp, addr, flags); +	REG_WR8(bp, addr, flags);  	DP(NETIF_MSG_IFUP,  	   "port %x fw_sb_id %d sb_index %d disable %d\n",  	   port, fw_sb_id, sb_index, disable); diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c index 77ebae0ac64..0283f343b0d 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c @@ -13437,13 +13437,7 @@ static void bnx2x_check_kr2_wa(struct link_params *params,  {  	struct bnx2x *bp = params->bp;  	u16 base_page, next_page, not_kr2_device, lane; -	int sigdet = bnx2x_warpcore_get_sigdet(phy, params); - -	if (!sigdet) { -		if (!(vars->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) -			bnx2x_kr2_recovery(params, vars, phy); -		return; -	} +	int sigdet;  	/* Once KR2 was disabled, wait 5 seconds before checking KR2 recovery  	 * since some switches tend to reinit the AN process and clear the @@ -13454,6 +13448,16 @@ static void bnx2x_check_kr2_wa(struct link_params *params,  		vars->check_kr2_recovery_cnt--;  		return;  	} + +	sigdet = bnx2x_warpcore_get_sigdet(phy, params); +	if (!sigdet) { +		if (!(vars->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) { +			bnx2x_kr2_recovery(params, vars, phy); +			DP(NETIF_MSG_LINK, "No sigdet\n"); +		} +		return; +	} +  	lane = bnx2x_get_warpcore_lane(phy, params);  	CL22_WR_OVER_CL45(bp, phy, MDIO_REG_BANK_AER_BLOCK,  			  MDIO_AER_BLOCK_AER_REG, lane); diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c index e81a747ea8c..c50696b396f 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c @@ -4947,7 +4947,7 @@ static void bnx2x_after_function_update(struct bnx2x *bp)  				  q);  	} -	if (!NO_FCOE(bp)) { +	if (!NO_FCOE(bp) && CNIC_ENABLED(bp)) {  		fp = &bp->fp[FCOE_IDX(bp)];  		queue_params.q_obj = &bnx2x_sp_obj(bp, fp).q_obj; @@ -9878,6 +9878,10 @@ static int bnx2x_prev_unload_common(struct bnx2x *bp)  				REG_RD(bp, NIG_REG_NIG_INT_STS_CLR_0);  			}  		} +		if (!CHIP_IS_E1x(bp)) +			/* block FW from writing to host */ +			REG_WR(bp, PGLUE_B_REG_INTERNAL_PFID_ENABLE_MASTER, 0); +  		/* wait until BRB is empty */  		tmp_reg = REG_RD(bp, BRB1_REG_NUM_OF_FULL_BLOCKS);  		while (timer_count) { @@ -13354,6 +13358,7 @@ static int bnx2x_unregister_cnic(struct net_device *dev)  	RCU_INIT_POINTER(bp->cnic_ops, NULL);  	mutex_unlock(&bp->cnic_mutex);  	synchronize_rcu(); +	bp->cnic_enabled = false;  	kfree(bp->cnic_kwq);  	bp->cnic_kwq = NULL; diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index 67d2663b397..17a972734ba 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c @@ -14604,8 +14604,11 @@ static void tg3_read_vpd(struct tg3 *tp)  		if (j + len > block_end)  			goto partno; -		memcpy(tp->fw_ver, &vpd_data[j], len); -		strncat(tp->fw_ver, " bc ", vpdlen - len - 1); +		if (len >= sizeof(tp->fw_ver)) +			len = sizeof(tp->fw_ver) - 1; +		memset(tp->fw_ver, 0, sizeof(tp->fw_ver)); +		snprintf(tp->fw_ver, sizeof(tp->fw_ver), "%.*s bc ", len, +			 &vpd_data[j]);  	}  partno:  |