Commit 1ac978af authored by Catherine Sullivan's avatar Catherine Sullivan Committed by Jeff Kirsher

i40e: Add ablitity to enable/disable link from set_link_restart_an

The ability is already there in the fw and this will make it easy
to toggle link without calling set_phy_config when no other link
settings need to change.

Change-ID: I185567ae81776382ac145247e4eb1ee95f22382c
Signed-off-by: default avatarCatherine Sullivan <catherine.sullivan@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent c571ea05
...@@ -971,11 +971,13 @@ i40e_status i40e_aq_clear_pxe_mode(struct i40e_hw *hw, ...@@ -971,11 +971,13 @@ i40e_status i40e_aq_clear_pxe_mode(struct i40e_hw *hw,
/** /**
* i40e_aq_set_link_restart_an * i40e_aq_set_link_restart_an
* @hw: pointer to the hw struct * @hw: pointer to the hw struct
* @enable_link: if true: enable link, if false: disable link
* @cmd_details: pointer to command details structure or NULL * @cmd_details: pointer to command details structure or NULL
* *
* Sets up the link and restarts the Auto-Negotiation over the link. * Sets up the link and restarts the Auto-Negotiation over the link.
**/ **/
i40e_status i40e_aq_set_link_restart_an(struct i40e_hw *hw, i40e_status i40e_aq_set_link_restart_an(struct i40e_hw *hw,
bool enable_link,
struct i40e_asq_cmd_details *cmd_details) struct i40e_asq_cmd_details *cmd_details)
{ {
struct i40e_aq_desc desc; struct i40e_aq_desc desc;
...@@ -987,6 +989,10 @@ i40e_status i40e_aq_set_link_restart_an(struct i40e_hw *hw, ...@@ -987,6 +989,10 @@ i40e_status i40e_aq_set_link_restart_an(struct i40e_hw *hw,
i40e_aqc_opc_set_link_restart_an); i40e_aqc_opc_set_link_restart_an);
cmd->command = I40E_AQ_PHY_RESTART_AN; cmd->command = I40E_AQ_PHY_RESTART_AN;
if (enable_link)
cmd->command |= I40E_AQ_PHY_LINK_ENABLE;
else
cmd->command &= ~I40E_AQ_PHY_LINK_ENABLE;
status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details); status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details);
......
...@@ -1027,9 +1027,10 @@ static int i40e_nway_reset(struct net_device *netdev) ...@@ -1027,9 +1027,10 @@ static int i40e_nway_reset(struct net_device *netdev)
struct i40e_netdev_priv *np = netdev_priv(netdev); struct i40e_netdev_priv *np = netdev_priv(netdev);
struct i40e_pf *pf = np->vsi->back; struct i40e_pf *pf = np->vsi->back;
struct i40e_hw *hw = &pf->hw; struct i40e_hw *hw = &pf->hw;
bool link_up = hw->phy.link_info.link_info & I40E_AQ_LINK_UP;
i40e_status ret = 0; i40e_status ret = 0;
ret = i40e_aq_set_link_restart_an(hw, NULL); ret = i40e_aq_set_link_restart_an(hw, link_up, NULL);
if (ret) { if (ret) {
netdev_info(netdev, "link restart failed, aq_err=%d\n", netdev_info(netdev, "link restart failed, aq_err=%d\n",
pf->hw.aq.asq_last_status); pf->hw.aq.asq_last_status);
......
...@@ -77,6 +77,7 @@ i40e_status i40e_aq_set_default_vsi(struct i40e_hw *hw, u16 vsi_id, ...@@ -77,6 +77,7 @@ i40e_status i40e_aq_set_default_vsi(struct i40e_hw *hw, u16 vsi_id,
i40e_status i40e_aq_clear_pxe_mode(struct i40e_hw *hw, i40e_status i40e_aq_clear_pxe_mode(struct i40e_hw *hw,
struct i40e_asq_cmd_details *cmd_details); struct i40e_asq_cmd_details *cmd_details);
i40e_status i40e_aq_set_link_restart_an(struct i40e_hw *hw, i40e_status i40e_aq_set_link_restart_an(struct i40e_hw *hw,
bool enable_link,
struct i40e_asq_cmd_details *cmd_details); struct i40e_asq_cmd_details *cmd_details);
i40e_status i40e_aq_get_link_info(struct i40e_hw *hw, i40e_status i40e_aq_get_link_info(struct i40e_hw *hw,
bool enable_lse, struct i40e_link_status *link, bool enable_lse, struct i40e_link_status *link,
......
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