|
@@ -2333,8 +2333,14 @@ static void bnx2x_calc_vn_weight_sum(struct bnx2x *bp)
|
|
|
}
|
|
|
|
|
|
/* ... only if all min rates are zeros - disable fairness */
|
|
|
- if (all_zero)
|
|
|
- bp->vn_weight_sum = 0;
|
|
|
+ if (all_zero) {
|
|
|
+ bp->cmng.flags.cmng_enables &=
|
|
|
+ ~CMNG_FLAGS_PER_PORT_FAIRNESS_VN;
|
|
|
+ DP(NETIF_MSG_IFUP, "All MIN values are zeroes"
|
|
|
+ " fairness will be disabled\n");
|
|
|
+ } else
|
|
|
+ bp->cmng.flags.cmng_enables |=
|
|
|
+ CMNG_FLAGS_PER_PORT_FAIRNESS_VN;
|
|
|
}
|
|
|
|
|
|
static void bnx2x_init_vn_minmax(struct bnx2x *bp, int func)
|
|
@@ -2353,17 +2359,14 @@ static void bnx2x_init_vn_minmax(struct bnx2x *bp, int func)
|
|
|
} else {
|
|
|
vn_min_rate = ((vn_cfg & FUNC_MF_CFG_MIN_BW_MASK) >>
|
|
|
FUNC_MF_CFG_MIN_BW_SHIFT) * 100;
|
|
|
- /* If fairness is enabled (not all min rates are zeroes) and
|
|
|
- if current min rate is zero - set it to 1.
|
|
|
- This is a requirement of the algorithm. */
|
|
|
- if (bp->vn_weight_sum && (vn_min_rate == 0))
|
|
|
+ /* If min rate is zero - set it to 1 */
|
|
|
+ if (!vn_min_rate)
|
|
|
vn_min_rate = DEF_MIN_RATE;
|
|
|
vn_max_rate = ((vn_cfg & FUNC_MF_CFG_MAX_BW_MASK) >>
|
|
|
FUNC_MF_CFG_MAX_BW_SHIFT) * 100;
|
|
|
}
|
|
|
-
|
|
|
DP(NETIF_MSG_IFUP,
|
|
|
- "func %d: vn_min_rate=%d vn_max_rate=%d vn_weight_sum=%d\n",
|
|
|
+ "func %d: vn_min_rate %d vn_max_rate %d vn_weight_sum %d\n",
|
|
|
func, vn_min_rate, vn_max_rate, bp->vn_weight_sum);
|
|
|
|
|
|
memset(&m_rs_vn, 0, sizeof(struct rate_shaping_vars_per_vn));
|
|
@@ -2490,7 +2493,6 @@ static void bnx2x__link_status_update(struct bnx2x *bp)
|
|
|
else
|
|
|
bnx2x_stats_handle(bp, STATS_EVENT_STOP);
|
|
|
|
|
|
- bp->mf_config = SHMEM_RD(bp, mf_cfg.func_mf_config[func].config);
|
|
|
bnx2x_calc_vn_weight_sum(bp);
|
|
|
|
|
|
/* indicate link status */
|
|
@@ -2634,10 +2636,7 @@ static void bnx2x_update_min_max(struct bnx2x *bp)
|
|
|
|
|
|
static void bnx2x_dcc_event(struct bnx2x *bp, u32 dcc_event)
|
|
|
{
|
|
|
- int func = BP_FUNC(bp);
|
|
|
-
|
|
|
DP(BNX2X_MSG_MCP, "dcc_event 0x%x\n", dcc_event);
|
|
|
- bp->mf_config = SHMEM_RD(bp, mf_cfg.func_mf_config[func].config);
|
|
|
|
|
|
if (dcc_event & DRV_STATUS_DCC_DISABLE_ENABLE_PF) {
|
|
|
|
|
@@ -3067,6 +3066,8 @@ static inline void bnx2x_attn_int_deasserted3(struct bnx2x *bp, u32 attn)
|
|
|
int func = BP_FUNC(bp);
|
|
|
|
|
|
REG_WR(bp, MISC_REG_AEU_GENERAL_ATTN_12 + func*4, 0);
|
|
|
+ bp->mf_config = SHMEM_RD(bp,
|
|
|
+ mf_cfg.func_mf_config[func].config);
|
|
|
val = SHMEM_RD(bp, func_mb[func].drv_status);
|
|
|
if (val & DRV_STATUS_DCC_EVENT_MASK)
|
|
|
bnx2x_dcc_event(bp,
|
|
@@ -5559,20 +5560,18 @@ static void bnx2x_init_internal_func(struct bnx2x *bp)
|
|
|
bp->link_vars.line_speed = SPEED_10000;
|
|
|
bnx2x_init_port_minmax(bp);
|
|
|
|
|
|
+ if (!BP_NOMCP(bp))
|
|
|
+ bp->mf_config =
|
|
|
+ SHMEM_RD(bp, mf_cfg.func_mf_config[func].config);
|
|
|
bnx2x_calc_vn_weight_sum(bp);
|
|
|
|
|
|
for (vn = VN_0; vn < E1HVN_MAX; vn++)
|
|
|
bnx2x_init_vn_minmax(bp, 2*vn + port);
|
|
|
|
|
|
/* Enable rate shaping and fairness */
|
|
|
- bp->cmng.flags.cmng_enables =
|
|
|
+ bp->cmng.flags.cmng_enables |=
|
|
|
CMNG_FLAGS_PER_PORT_RATE_SHAPING_VN;
|
|
|
- if (bp->vn_weight_sum)
|
|
|
- bp->cmng.flags.cmng_enables |=
|
|
|
- CMNG_FLAGS_PER_PORT_FAIRNESS_VN;
|
|
|
- else
|
|
|
- DP(NETIF_MSG_IFUP, "All MIN values are zeroes"
|
|
|
- " fairness will be disabled\n");
|
|
|
+
|
|
|
} else {
|
|
|
/* rate shaping and fairness are disabled */
|
|
|
DP(NETIF_MSG_IFUP,
|
|
@@ -9038,17 +9037,18 @@ static int bnx2x_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
|
|
|
if (netif_carrier_ok(dev)) {
|
|
|
cmd->speed = bp->link_vars.line_speed;
|
|
|
cmd->duplex = bp->link_vars.duplex;
|
|
|
- } else {
|
|
|
- cmd->speed = bp->link_params.req_line_speed;
|
|
|
- cmd->duplex = bp->link_params.req_duplex;
|
|
|
- }
|
|
|
- if (IS_E1HMF(bp)) {
|
|
|
- u16 vn_max_rate;
|
|
|
+ if (IS_E1HMF(bp)) {
|
|
|
+ u16 vn_max_rate;
|
|
|
|
|
|
- vn_max_rate = ((bp->mf_config & FUNC_MF_CFG_MAX_BW_MASK) >>
|
|
|
+ vn_max_rate =
|
|
|
+ ((bp->mf_config & FUNC_MF_CFG_MAX_BW_MASK) >>
|
|
|
FUNC_MF_CFG_MAX_BW_SHIFT) * 100;
|
|
|
- if (vn_max_rate < cmd->speed)
|
|
|
- cmd->speed = vn_max_rate;
|
|
|
+ if (vn_max_rate < cmd->speed)
|
|
|
+ cmd->speed = vn_max_rate;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ cmd->speed = -1;
|
|
|
+ cmd->duplex = -1;
|
|
|
}
|
|
|
|
|
|
if (bp->link_params.switch_cfg == SWITCH_CFG_10G) {
|