Lines Matching refs:link_info

2359 static u16 bnxt_get_force_speed(struct bnxt_link_info *link_info)
2361 struct bnxt *bp = container_of(link_info, struct bnxt, link_info);
2364 return link_info->force_link_speed2;
2365 if (link_info->req_signal_mode == BNXT_SIG_MODE_PAM4)
2366 return link_info->force_pam4_link_speed;
2367 return link_info->force_link_speed;
2370 static void bnxt_set_force_speed(struct bnxt_link_info *link_info)
2372 struct bnxt *bp = container_of(link_info, struct bnxt, link_info);
2375 link_info->req_link_speed = link_info->force_link_speed2;
2376 link_info->req_signal_mode = BNXT_SIG_MODE_NRZ;
2377 switch (link_info->req_link_speed) {
2382 link_info->req_signal_mode = BNXT_SIG_MODE_PAM4;
2387 link_info->req_signal_mode = BNXT_SIG_MODE_PAM4_112;
2390 link_info->req_signal_mode = BNXT_SIG_MODE_NRZ;
2394 link_info->req_link_speed = link_info->force_link_speed;
2395 link_info->req_signal_mode = BNXT_SIG_MODE_NRZ;
2396 if (link_info->force_pam4_link_speed) {
2397 link_info->req_link_speed = link_info->force_pam4_link_speed;
2398 link_info->req_signal_mode = BNXT_SIG_MODE_PAM4;
2402 static void bnxt_set_auto_speed(struct bnxt_link_info *link_info)
2404 struct bnxt *bp = container_of(link_info, struct bnxt, link_info);
2407 link_info->advertising = link_info->auto_link_speeds2;
2410 link_info->advertising = link_info->auto_link_speeds;
2411 link_info->advertising_pam4 = link_info->auto_pam4_link_speeds;
2414 static bool bnxt_force_speed_updated(struct bnxt_link_info *link_info)
2416 struct bnxt *bp = container_of(link_info, struct bnxt, link_info);
2419 if (link_info->req_link_speed != link_info->force_link_speed2)
2423 if (link_info->req_signal_mode == BNXT_SIG_MODE_NRZ &&
2424 link_info->req_link_speed != link_info->force_link_speed)
2426 if (link_info->req_signal_mode == BNXT_SIG_MODE_PAM4 &&
2427 link_info->req_link_speed != link_info->force_pam4_link_speed)
2432 static bool bnxt_auto_speed_updated(struct bnxt_link_info *link_info)
2434 struct bnxt *bp = container_of(link_info, struct bnxt, link_info);
2437 if (link_info->advertising != link_info->auto_link_speeds2)
2441 if (link_info->advertising != link_info->auto_link_speeds ||
2442 link_info->advertising_pam4 != link_info->auto_pam4_link_speeds)
2568 struct bnxt_link_info *link_info = &bp->link_info;
2574 if (!(link_info->autoneg & BNXT_AUTONEG_SPEED) &&
2576 u16 fw_speed = bnxt_get_force_speed(link_info);
10883 static char *bnxt_report_fec(struct bnxt_link_info *link_info)
10885 u8 active_fec = link_info->active_fec_sig_mode &
10917 speed = bnxt_fw_to_ethtool_speed(bp->link_info.link_speed);
10922 if (bp->link_info.duplex == BNXT_LINK_DUPLEX_FULL)
10926 if (bp->link_info.pause == BNXT_LINK_PAUSE_BOTH)
10928 else if (bp->link_info.pause == BNXT_LINK_PAUSE_TX)
10930 else if (bp->link_info.pause == BNXT_LINK_PAUSE_RX)
10934 if (bp->link_info.phy_qcfg_resp.option_flags &
10936 u8 sig_mode = bp->link_info.active_fec_sig_mode &
10958 fec = bp->link_info.fec_cfg;
10962 bnxt_report_fec(&bp->link_info));
10983 struct bnxt_link_info *link_info = &bp->link_info;
11014 link_info->phy_state = BNXT_PHY_STATE_DISABLED;
11016 } else if (link_info->phy_state == BNXT_PHY_STATE_DISABLED) {
11017 link_info->phy_state = BNXT_PHY_STATE_ENABLED;
11020 link_info->support_auto_speeds = 0;
11021 link_info->support_pam4_auto_speeds = 0;
11022 link_info->support_auto_speeds2 = 0;
11026 link_info->support_auto_speeds =
11029 link_info->support_pam4_auto_speeds =
11032 link_info->support_auto_speeds2 =
11049 static bool bnxt_support_speed_dropped(struct bnxt_link_info *link_info)
11051 struct bnxt *bp = container_of(link_info, struct bnxt, link_info);
11054 * holds the link_lock mutex, so we can modify link_info settings.
11057 if (bnxt_support_dropped(link_info->advertising,
11058 link_info->support_auto_speeds2)) {
11059 link_info->advertising = link_info->support_auto_speeds2;
11064 if (bnxt_support_dropped(link_info->advertising,
11065 link_info->support_auto_speeds)) {
11066 link_info->advertising = link_info->support_auto_speeds;
11069 if (bnxt_support_dropped(link_info->advertising_pam4,
11070 link_info->support_pam4_auto_speeds)) {
11071 link_info->advertising_pam4 = link_info->support_pam4_auto_speeds;
11079 struct bnxt_link_info *link_info = &bp->link_info;
11082 u8 link_state = link_info->link_state;
11101 memcpy(&link_info->phy_qcfg_resp, resp, sizeof(*resp));
11102 link_info->phy_link_status = resp->link;
11103 link_info->duplex = resp->duplex_cfg;
11105 link_info->duplex = resp->duplex_state;
11106 link_info->pause = resp->pause;
11107 link_info->auto_mode = resp->auto_mode;
11108 link_info->auto_pause_setting = resp->auto_pause;
11109 link_info->lp_pause = resp->link_partner_adv_pause;
11110 link_info->force_pause_setting = resp->force_pause;
11111 link_info->duplex_setting = resp->duplex_cfg;
11112 if (link_info->phy_link_status == BNXT_LINK_LINK) {
11113 link_info->link_speed = le16_to_cpu(resp->link_speed);
11115 link_info->active_lanes = resp->active_lanes;
11117 link_info->link_speed = 0;
11118 link_info->active_lanes = 0;
11120 link_info->force_link_speed = le16_to_cpu(resp->force_link_speed);
11121 link_info->force_pam4_link_speed =
11123 link_info->force_link_speed2 = le16_to_cpu(resp->force_link_speeds2);
11124 link_info->support_speeds = le16_to_cpu(resp->support_speeds);
11125 link_info->support_pam4_speeds = le16_to_cpu(resp->support_pam4_speeds);
11126 link_info->support_speeds2 = le16_to_cpu(resp->support_speeds2);
11127 link_info->auto_link_speeds = le16_to_cpu(resp->auto_link_speed_mask);
11128 link_info->auto_pam4_link_speeds =
11130 link_info->auto_link_speeds2 = le16_to_cpu(resp->auto_link_speeds2);
11131 link_info->lp_auto_link_speeds =
11133 link_info->lp_auto_pam4_link_speeds =
11135 link_info->preemphasis = le32_to_cpu(resp->preemphasis);
11136 link_info->phy_ver[0] = resp->phy_maj;
11137 link_info->phy_ver[1] = resp->phy_min;
11138 link_info->phy_ver[2] = resp->phy_bld;
11139 link_info->media_type = resp->media_type;
11140 link_info->phy_type = resp->phy_type;
11141 link_info->transceiver = resp->xcvr_pkg_type;
11142 link_info->phy_addr = resp->eee_config_phy_addr &
11144 link_info->module_status = resp->module_status;
11180 link_info->fec_cfg = PORT_PHY_QCFG_RESP_FEC_CFG_FEC_NONE_SUPPORTED;
11182 link_info->fec_cfg = le16_to_cpu(resp->fec_cfg);
11183 link_info->active_fec_sig_mode = resp->active_fec_signal_mode;
11187 if (link_info->phy_link_status == BNXT_LINK_LINK)
11188 link_info->link_state = BNXT_LINK_STATE_UP;
11190 link_info->link_state = BNXT_LINK_STATE_DOWN;
11191 if (link_state != link_info->link_state)
11195 link_info->link_state = BNXT_LINK_STATE_DOWN;
11202 support_changed = bnxt_support_speed_dropped(link_info);
11203 if (support_changed && (link_info->autoneg & BNXT_AUTONEG_SPEED))
11210 struct bnxt_link_info *link_info = &bp->link_info;
11211 struct hwrm_port_phy_qcfg_output *resp = &link_info->phy_qcfg_resp;
11217 module_status = link_info->module_status;
11238 if (bp->link_info.autoneg & BNXT_AUTONEG_FLOW_CTRL) {
11242 if (bp->link_info.req_flow_ctrl & BNXT_LINK_PAUSE_RX)
11244 if (bp->link_info.req_flow_ctrl & BNXT_LINK_PAUSE_TX)
11249 if (bp->link_info.req_flow_ctrl & BNXT_LINK_PAUSE_RX)
11251 if (bp->link_info.req_flow_ctrl & BNXT_LINK_PAUSE_TX)
11265 if (bp->link_info.autoneg & BNXT_AUTONEG_SPEED) {
11270 req->auto_link_speeds2_mask = cpu_to_le16(bp->link_info.advertising);
11271 } else if (bp->link_info.advertising) {
11273 req->auto_link_speed_mask = cpu_to_le16(bp->link_info.advertising);
11275 if (bp->link_info.advertising_pam4) {
11279 cpu_to_le16(bp->link_info.advertising_pam4);
11286 req->force_link_speeds2 = cpu_to_le16(bp->link_info.req_link_speed);
11289 (u32)bp->link_info.req_link_speed);
11290 } else if (bp->link_info.req_signal_mode == BNXT_SIG_MODE_PAM4) {
11291 req->force_pam4_link_speed = cpu_to_le16(bp->link_info.req_link_speed);
11294 req->force_link_speed = cpu_to_le16(bp->link_info.req_link_speed);
11313 if ((bp->link_info.autoneg & BNXT_AUTONEG_FLOW_CTRL) ||
11314 bp->link_info.force_link_chng)
11318 if (!rc && !(bp->link_info.autoneg & BNXT_AUTONEG_FLOW_CTRL)) {
11323 bp->link_info.pause =
11324 bp->link_info.force_pause_setting = bp->link_info.req_flow_ctrl;
11325 bp->link_info.auto_pause_setting = 0;
11326 if (!bp->link_info.force_link_chng)
11329 bp->link_info.force_link_chng = false;
11400 bp->link_info.link_state = BNXT_LINK_STATE_UNKNOWN;
11703 struct bnxt_link_info *link_info = &bp->link_info;
11712 _bnxt_fw_to_linkmode(advertising, link_info->advertising);
11714 if (!(link_info->autoneg & BNXT_AUTONEG_SPEED)) {
11733 struct bnxt_link_info *link_info = &bp->link_info;
11744 if ((link_info->autoneg & BNXT_AUTONEG_FLOW_CTRL) &&
11745 (link_info->auto_pause_setting & BNXT_LINK_PAUSE_BOTH) !=
11746 link_info->req_flow_ctrl)
11748 if (!(link_info->autoneg & BNXT_AUTONEG_FLOW_CTRL) &&
11749 link_info->force_pause_setting != link_info->req_flow_ctrl)
11751 if (!(link_info->autoneg & BNXT_AUTONEG_SPEED)) {
11752 if (BNXT_AUTO_MODE(link_info->auto_mode))
11754 if (bnxt_force_speed_updated(link_info))
11756 if (link_info->req_duplex != link_info->duplex_setting)
11759 if (link_info->auto_mode == BNXT_LINK_AUTO_NONE)
11761 if (bnxt_auto_speed_updated(link_info))
11956 bp->link_info.phy_retry = true;
11957 bp->link_info.phy_retry_expires =
12274 mdio->phy_id = bp->link_info.phy_addr;
13161 if (bp->link_info.phy_retry) {
13162 if (time_after(jiffies, bp->link_info.phy_retry_expires)) {
13163 bp->link_info.phy_retry = false;
13467 struct bnxt_link_info *link_info = &bp->link_info;
13469 if (BNXT_AUTO_MODE(link_info->auto_mode)) {
13470 link_info->autoneg = BNXT_AUTONEG_SPEED;
13472 if (link_info->auto_pause_setting &
13474 link_info->autoneg |= BNXT_AUTONEG_FLOW_CTRL;
13476 link_info->autoneg |= BNXT_AUTONEG_FLOW_CTRL;
13478 bnxt_set_auto_speed(link_info);
13480 bnxt_set_force_speed(link_info);
13481 link_info->req_duplex = link_info->duplex_setting;
13483 if (link_info->autoneg & BNXT_AUTONEG_FLOW_CTRL)
13484 link_info->req_flow_ctrl =
13485 link_info->auto_pause_setting & BNXT_LINK_PAUSE_BOTH;
13487 link_info->req_flow_ctrl = link_info->force_pause_setting;
13568 bp->link_info.phy_retry = false;
14873 struct bnxt_link_info *link_info = &bp->link_info;
14901 if (link_info->auto_link_speeds && !link_info->support_auto_speeds)
14902 link_info->support_auto_speeds = link_info->support_speeds;