|
@@ -4790,6 +4790,21 @@ int bnxt_hwrm_set_link_setting(struct bnxt *bp, bool set_pause, bool set_eee)
|
|
return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
|
return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int bnxt_hwrm_shutdown_link(struct bnxt *bp)
|
|
|
|
+{
|
|
|
|
+ struct hwrm_port_phy_cfg_input req = {0};
|
|
|
|
+
|
|
|
|
+ if (BNXT_VF(bp))
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
|
|
+ if (pci_num_vf(bp->pdev))
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
|
|
+ bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_PORT_PHY_CFG, -1, -1);
|
|
|
|
+ req.flags = cpu_to_le32(PORT_PHY_CFG_REQ_FLAGS_FORCE_LINK_DOWN);
|
|
|
|
+ return hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT);
|
|
|
|
+}
|
|
|
|
+
|
|
static bool bnxt_eee_config_ok(struct bnxt *bp)
|
|
static bool bnxt_eee_config_ok(struct bnxt *bp)
|
|
{
|
|
{
|
|
struct ethtool_eee *eee = &bp->eee;
|
|
struct ethtool_eee *eee = &bp->eee;
|
|
@@ -5044,6 +5059,7 @@ static int bnxt_close(struct net_device *dev)
|
|
struct bnxt *bp = netdev_priv(dev);
|
|
struct bnxt *bp = netdev_priv(dev);
|
|
|
|
|
|
bnxt_close_nic(bp, true, true);
|
|
bnxt_close_nic(bp, true, true);
|
|
|
|
+ bnxt_hwrm_shutdown_link(bp);
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|