Commit cd1dfce2 authored by Yuval Mintz's avatar Yuval Mintz Committed by David S. Miller

bnx2x: fix 'Ethtool -A' when autoneg

When configuring pauses using 'ethtool -A', the requested values have
effect when used together with autoneg (up to this point, when configured
for autoneg, driver ignored requested pause configuration)
Signed-off-by: default avatarYuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: default avatarEilon Greenstein <eilong@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0370cf90
...@@ -144,7 +144,7 @@ u32 bnx2x_fw_command(struct bnx2x *bp, u32 command, u32 param); ...@@ -144,7 +144,7 @@ u32 bnx2x_fw_command(struct bnx2x *bp, u32 command, u32 param);
* @bp: driver handle * @bp: driver handle
* @load_mode: current mode * @load_mode: current mode
*/ */
u8 bnx2x_initial_phy_init(struct bnx2x *bp, int load_mode); int bnx2x_initial_phy_init(struct bnx2x *bp, int load_mode);
/** /**
* bnx2x_link_set - configure hw according to link parameters structure. * bnx2x_link_set - configure hw according to link parameters structure.
......
...@@ -2103,22 +2103,25 @@ void bnx2x_calc_fc_adv(struct bnx2x *bp) ...@@ -2103,22 +2103,25 @@ void bnx2x_calc_fc_adv(struct bnx2x *bp)
} }
} }
u8 bnx2x_initial_phy_init(struct bnx2x *bp, int load_mode) static void bnx2x_set_requested_fc(struct bnx2x *bp)
{ {
if (!BP_NOMCP(bp)) { /* Initialize link parameters structure variables
u8 rc; * It is recommended to turn off RX FC for jumbo frames
int cfx_idx = bnx2x_get_link_cfg_idx(bp); * for better performance
u16 req_line_speed = bp->link_params.req_line_speed[cfx_idx]; */
/* if (CHIP_IS_E1x(bp) && (bp->dev->mtu > 5000))
* Initialize link parameters structure variables bp->link_params.req_fc_auto_adv = BNX2X_FLOW_CTRL_TX;
* It is recommended to turn off RX FC for jumbo frames else
* for better performance bp->link_params.req_fc_auto_adv = BNX2X_FLOW_CTRL_BOTH;
*/ }
if (CHIP_IS_E1x(bp) && (bp->dev->mtu > 5000))
bp->link_params.req_fc_auto_adv = BNX2X_FLOW_CTRL_TX;
else
bp->link_params.req_fc_auto_adv = BNX2X_FLOW_CTRL_BOTH;
int bnx2x_initial_phy_init(struct bnx2x *bp, int load_mode)
{
int rc, cfx_idx = bnx2x_get_link_cfg_idx(bp);
u16 req_line_speed = bp->link_params.req_line_speed[cfx_idx];
if (!BP_NOMCP(bp)) {
bnx2x_set_requested_fc(bp);
bnx2x_acquire_phy_lock(bp); bnx2x_acquire_phy_lock(bp);
if (load_mode == LOAD_DIAG) { if (load_mode == LOAD_DIAG) {
...@@ -2147,11 +2150,11 @@ u8 bnx2x_initial_phy_init(struct bnx2x *bp, int load_mode) ...@@ -2147,11 +2150,11 @@ u8 bnx2x_initial_phy_init(struct bnx2x *bp, int load_mode)
bnx2x_calc_fc_adv(bp); bnx2x_calc_fc_adv(bp);
if (CHIP_REV_IS_SLOW(bp) && bp->link_vars.link_up) { if (bp->link_vars.link_up) {
bnx2x_stats_handle(bp, STATS_EVENT_LINK_UP); bnx2x_stats_handle(bp, STATS_EVENT_LINK_UP);
bnx2x_link_report(bp); bnx2x_link_report(bp);
} else }
queue_delayed_work(bnx2x_wq, &bp->period_task, 0); queue_delayed_work(bnx2x_wq, &bp->period_task, 0);
bp->link_params.req_line_speed[cfx_idx] = req_line_speed; bp->link_params.req_line_speed[cfx_idx] = req_line_speed;
return rc; return rc;
} }
...@@ -10315,11 +10318,13 @@ static void __devinit bnx2x_link_settings_requested(struct bnx2x *bp) ...@@ -10315,11 +10318,13 @@ static void __devinit bnx2x_link_settings_requested(struct bnx2x *bp)
bp->link_params.req_flow_ctrl[idx] = (link_config & bp->link_params.req_flow_ctrl[idx] = (link_config &
PORT_FEATURE_FLOW_CONTROL_MASK); PORT_FEATURE_FLOW_CONTROL_MASK);
if ((bp->link_params.req_flow_ctrl[idx] == if (bp->link_params.req_flow_ctrl[idx] ==
BNX2X_FLOW_CTRL_AUTO) && BNX2X_FLOW_CTRL_AUTO) {
!(bp->port.supported[idx] & SUPPORTED_Autoneg)) { if (!(bp->port.supported[idx] & SUPPORTED_Autoneg))
bp->link_params.req_flow_ctrl[idx] = bp->link_params.req_flow_ctrl[idx] =
BNX2X_FLOW_CTRL_NONE; BNX2X_FLOW_CTRL_NONE;
else
bnx2x_set_requested_fc(bp);
} }
BNX2X_DEV_INFO("req_line_speed %d req_duplex %d req_flow_ctrl 0x%x advertising 0x%x\n", BNX2X_DEV_INFO("req_line_speed %d req_duplex %d req_flow_ctrl 0x%x advertising 0x%x\n",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment