bnxt_en: Refactor the initialization of the ethtool link settings.
Refactor this logic in bnxt_probe_phy() into a separate function bnxt_init_ethtool_link_settings(). It used to be that the settable link settings will never be changed without going through ethtool. So we only needed to do this once in bnxt_probe_phy(). Now, another function sharing the port may change it and we may need to re-initialize the ethtool settings again in run-time. Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
This commit is contained in:
Родитель
8a60efd1de
Коммит
8119e49b68
|
@ -10249,6 +10249,31 @@ static void bnxt_chk_missed_irq(struct bnxt *bp)
|
|||
|
||||
static void bnxt_cfg_ntp_filters(struct bnxt *);
|
||||
|
||||
static void bnxt_init_ethtool_link_settings(struct bnxt *bp)
|
||||
{
|
||||
struct bnxt_link_info *link_info = &bp->link_info;
|
||||
|
||||
if (BNXT_AUTO_MODE(link_info->auto_mode)) {
|
||||
link_info->autoneg = BNXT_AUTONEG_SPEED;
|
||||
if (bp->hwrm_spec_code >= 0x10201) {
|
||||
if (link_info->auto_pause_setting &
|
||||
PORT_PHY_CFG_REQ_AUTO_PAUSE_AUTONEG_PAUSE)
|
||||
link_info->autoneg |= BNXT_AUTONEG_FLOW_CTRL;
|
||||
} else {
|
||||
link_info->autoneg |= BNXT_AUTONEG_FLOW_CTRL;
|
||||
}
|
||||
link_info->advertising = link_info->auto_link_speeds;
|
||||
} else {
|
||||
link_info->req_link_speed = link_info->force_link_speed;
|
||||
link_info->req_duplex = link_info->duplex_setting;
|
||||
}
|
||||
if (link_info->autoneg & BNXT_AUTONEG_FLOW_CTRL)
|
||||
link_info->req_flow_ctrl =
|
||||
link_info->auto_pause_setting & BNXT_LINK_PAUSE_BOTH;
|
||||
else
|
||||
link_info->req_flow_ctrl = link_info->force_pause_setting;
|
||||
}
|
||||
|
||||
static void bnxt_sp_task(struct work_struct *work)
|
||||
{
|
||||
struct bnxt *bp = container_of(work, struct bnxt, sp_task);
|
||||
|
@ -11411,26 +11436,7 @@ static int bnxt_probe_phy(struct bnxt *bp, bool fw_dflt)
|
|||
if (!fw_dflt)
|
||||
return 0;
|
||||
|
||||
/*initialize the ethool setting copy with NVM settings */
|
||||
if (BNXT_AUTO_MODE(link_info->auto_mode)) {
|
||||
link_info->autoneg = BNXT_AUTONEG_SPEED;
|
||||
if (bp->hwrm_spec_code >= 0x10201) {
|
||||
if (link_info->auto_pause_setting &
|
||||
PORT_PHY_CFG_REQ_AUTO_PAUSE_AUTONEG_PAUSE)
|
||||
link_info->autoneg |= BNXT_AUTONEG_FLOW_CTRL;
|
||||
} else {
|
||||
link_info->autoneg |= BNXT_AUTONEG_FLOW_CTRL;
|
||||
}
|
||||
link_info->advertising = link_info->auto_link_speeds;
|
||||
} else {
|
||||
link_info->req_link_speed = link_info->force_link_speed;
|
||||
link_info->req_duplex = link_info->duplex_setting;
|
||||
}
|
||||
if (link_info->autoneg & BNXT_AUTONEG_FLOW_CTRL)
|
||||
link_info->req_flow_ctrl =
|
||||
link_info->auto_pause_setting & BNXT_LINK_PAUSE_BOTH;
|
||||
else
|
||||
link_info->req_flow_ctrl = link_info->force_pause_setting;
|
||||
bnxt_init_ethtool_link_settings(bp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче