| From foo@baz Mon Apr 9 17:09:24 CEST 2018 |
| From: "sudarsana.kalluru@cavium.com" <sudarsana.kalluru@cavium.com> |
| Date: Thu, 4 May 2017 08:15:04 -0700 |
| Subject: qed: Fix overriding of supported autoneg value. |
| |
| From: "sudarsana.kalluru@cavium.com" <sudarsana.kalluru@cavium.com> |
| |
| |
| [ Upstream commit 34f9199ce7b7e5c641b96e928bd60e086bf7f278 ] |
| |
| Driver currently uses advertised-autoneg value to populate the |
| supported-autoneg field. When advertised field is updated, user gets |
| the same value for supported field. Supported-autoneg value need to be |
| populated from the link capabilities value returned by the MFW. |
| |
| Signed-off-by: Sudarsana Reddy Kalluru <Sudarsana.Kalluru@cavium.com> |
| Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/qlogic/qed/qed_dev.c | 3 +++ |
| drivers/net/ethernet/qlogic/qed/qed_main.c | 6 +++++- |
| drivers/net/ethernet/qlogic/qed/qed_mcp.h | 1 + |
| 3 files changed, 9 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/net/ethernet/qlogic/qed/qed_dev.c |
| +++ b/drivers/net/ethernet/qlogic/qed/qed_dev.c |
| @@ -1628,6 +1628,9 @@ static int qed_hw_get_nvm_info(struct qe |
| DP_NOTICE(p_hwfn, "Unknown Speed in 0x%08x\n", link_temp); |
| } |
| |
| + p_hwfn->mcp_info->link_capabilities.default_speed_autoneg = |
| + link->speed.autoneg; |
| + |
| link_temp &= NVM_CFG1_PORT_DRV_FLOW_CONTROL_MASK; |
| link_temp >>= NVM_CFG1_PORT_DRV_FLOW_CONTROL_OFFSET; |
| link->pause.autoneg = !!(link_temp & |
| --- a/drivers/net/ethernet/qlogic/qed/qed_main.c |
| +++ b/drivers/net/ethernet/qlogic/qed/qed_main.c |
| @@ -1240,7 +1240,7 @@ static void qed_fill_link(struct qed_hwf |
| |
| /* TODO - at the moment assume supported and advertised speed equal */ |
| if_link->supported_caps = QED_LM_FIBRE_BIT; |
| - if (params.speed.autoneg) |
| + if (link_caps.default_speed_autoneg) |
| if_link->supported_caps |= QED_LM_Autoneg_BIT; |
| if (params.pause.autoneg || |
| (params.pause.forced_rx && params.pause.forced_tx)) |
| @@ -1250,6 +1250,10 @@ static void qed_fill_link(struct qed_hwf |
| if_link->supported_caps |= QED_LM_Pause_BIT; |
| |
| if_link->advertised_caps = if_link->supported_caps; |
| + if (params.speed.autoneg) |
| + if_link->advertised_caps |= QED_LM_Autoneg_BIT; |
| + else |
| + if_link->advertised_caps &= ~QED_LM_Autoneg_BIT; |
| if (params.speed.advertised_speeds & |
| NVM_CFG1_PORT_DRV_SPEED_CAPABILITY_MASK_1G) |
| if_link->advertised_caps |= QED_LM_1000baseT_Half_BIT | |
| --- a/drivers/net/ethernet/qlogic/qed/qed_mcp.h |
| +++ b/drivers/net/ethernet/qlogic/qed/qed_mcp.h |
| @@ -35,6 +35,7 @@ struct qed_mcp_link_params { |
| |
| struct qed_mcp_link_capabilities { |
| u32 speed_capabilities; |
| + bool default_speed_autoneg; |
| }; |
| |
| struct qed_mcp_link_state { |