Lines Matching refs:ppd
1075 static void set_partition_keys(struct hfi1_pportdata *ppd);
1077 static const char *link_state_reason_name(struct hfi1_pportdata *ppd,
1084 static void update_statusp(struct hfi1_pportdata *ppd, u32 state);
1085 static int wait_phys_link_offline_substates(struct hfi1_pportdata *ppd,
1087 static int wait_logical_linkstate(struct hfi1_pportdata *ppd, u32 state,
1089 static void log_state_transition(struct hfi1_pportdata *ppd, u32 state);
1090 static void log_physical_state(struct hfi1_pportdata *ppd, u32 state);
1091 static int wait_physical_linkstate(struct hfi1_pportdata *ppd, u32 state,
1093 static int wait_phys_link_out_of_offline(struct hfi1_pportdata *ppd,
1102 static void clear_full_mgmt_pkey(struct hfi1_pportdata *ppd);
1105 static void update_xmit_counters(struct hfi1_pportdata *ppd, u16 link_width);
1517 struct hfi1_pportdata *ppd = context; in port_access_u32_csr() local
1521 return read_write_csr(ppd->dd, entry->csr, mode, data); in port_access_u32_csr()
1527 struct hfi1_pportdata *ppd = context; in port_access_u64_csr() local
1539 val = read_write_csr(ppd->dd, csr, mode, data); in port_access_u64_csr()
1567 struct hfi1_pportdata *ppd = context; in access_sw_link_dn_cnt() local
1571 return read_write_sw(ppd->dd, &ppd->link_downed, mode, data); in access_sw_link_dn_cnt()
1577 struct hfi1_pportdata *ppd = context; in access_sw_link_up_cnt() local
1581 return read_write_sw(ppd->dd, &ppd->link_up, mode, data); in access_sw_link_up_cnt()
1588 struct hfi1_pportdata *ppd = (struct hfi1_pportdata *)context; in access_sw_unknown_frame_cnt() local
1592 return read_write_sw(ppd->dd, &ppd->unknown_frame_count, mode, data); in access_sw_unknown_frame_cnt()
1598 struct hfi1_pportdata *ppd = (struct hfi1_pportdata *)context; in access_sw_xmit_discards() local
1603 counter = &ppd->port_xmit_discards; in access_sw_xmit_discards()
1605 counter = &ppd->port_xmit_discards_vl[vl]; in access_sw_xmit_discards()
1609 return read_write_sw(ppd->dd, counter, mode, data); in access_sw_xmit_discards()
1616 struct hfi1_pportdata *ppd = context; in access_xmit_constraint_errs() local
1621 return read_write_sw(ppd->dd, &ppd->port_xmit_constraint_errors, in access_xmit_constraint_errs()
1628 struct hfi1_pportdata *ppd = context; in access_rcv_constraint_errs() local
1633 return read_write_sw(ppd->dd, &ppd->port_rcv_constraint_errors, in access_rcv_constraint_errs()
4095 struct hfi1_pportdata *ppd = (struct hfi1_pportdata *)context; \
4096 return read_write_cpu(ppd->dd, &ppd->ibport_data.rvp.z_ ##cntr, \
4097 ppd->ibport_data.rvp.cntr, vl, \
4109 struct hfi1_pportdata *ppd = (struct hfi1_pportdata *)context; \
4114 return read_write_sw(ppd->dd, &ppd->ibport_data.rvp.n_ ##cntr, \
5592 struct hfi1_pportdata *ppd = dd->pport; in update_rcverr_timer() local
5596 ppd->port_error_action & OPA_PI_MASK_EX_BUFFER_OVERRUN) { in update_rcverr_timer()
5599 ppd, OPA_LINKDOWN_REASON_EXCESSIVE_BUFFER_OVERRUN, 0, in update_rcverr_timer()
5601 queue_work(ppd->link_wq, &ppd->link_bounce_work); in update_rcverr_timer()
5696 static inline void __count_port_discards(struct hfi1_pportdata *ppd) in __count_port_discards() argument
5698 incr_cntr64(&ppd->port_xmit_discards); in __count_port_discards()
5718 struct hfi1_pportdata *ppd = dd->pport; in handle_send_egress_err_info() local
5758 __count_port_discards(ppd); in handle_send_egress_err_info()
5760 incr_cntr64(&ppd->port_xmit_discards_vl[vl]); in handle_send_egress_err_info()
5762 incr_cntr64(&ppd->port_xmit_discards_vl in handle_send_egress_err_info()
6114 struct hfi1_pportdata *ppd = dd->pport; in handle_qsfp_int() local
6119 if (!qsfp_mod_present(ppd)) { in handle_qsfp_int()
6123 ppd->driver_link_ready = 0; in handle_qsfp_int()
6129 spin_lock_irqsave(&ppd->qsfp_info.qsfp_lock, flags); in handle_qsfp_int()
6134 ppd->qsfp_info.cache_valid = 0; in handle_qsfp_int()
6135 ppd->qsfp_info.reset_needed = 0; in handle_qsfp_int()
6136 ppd->qsfp_info.limiting_active = 0; in handle_qsfp_int()
6137 spin_unlock_irqrestore(&ppd->qsfp_info.qsfp_lock, in handle_qsfp_int()
6143 if ((ppd->offline_disabled_reason > in handle_qsfp_int()
6146 (ppd->offline_disabled_reason == in handle_qsfp_int()
6148 ppd->offline_disabled_reason = in handle_qsfp_int()
6152 if (ppd->host_link_state == HLS_DN_POLL) { in handle_qsfp_int()
6159 queue_work(ppd->link_wq, &ppd->link_down_work); in handle_qsfp_int()
6165 spin_lock_irqsave(&ppd->qsfp_info.qsfp_lock, flags); in handle_qsfp_int()
6166 ppd->qsfp_info.cache_valid = 0; in handle_qsfp_int()
6167 ppd->qsfp_info.cache_refresh_required = 1; in handle_qsfp_int()
6168 spin_unlock_irqrestore(&ppd->qsfp_info.qsfp_lock, in handle_qsfp_int()
6179 ppd->offline_disabled_reason = in handle_qsfp_int()
6187 spin_lock_irqsave(&ppd->qsfp_info.qsfp_lock, flags); in handle_qsfp_int()
6188 ppd->qsfp_info.check_interrupt_flags = 1; in handle_qsfp_int()
6189 spin_unlock_irqrestore(&ppd->qsfp_info.qsfp_lock, flags); in handle_qsfp_int()
6193 if (qsfp_mod_present(ppd)) in handle_qsfp_int()
6194 queue_work(ppd->link_wq, &ppd->qsfp_info.qsfp_work); in handle_qsfp_int()
6258 struct hfi1_pportdata *ppd = dd->pport; in acquire_lcb_access() local
6268 mutex_lock(&ppd->hls_lock); in acquire_lcb_access()
6270 while (!mutex_trylock(&ppd->hls_lock)) in acquire_lcb_access()
6275 if (ppd->host_link_state & HLS_DOWN) { in acquire_lcb_access()
6277 __func__, link_state_name(ppd->host_link_state)); in acquire_lcb_access()
6294 mutex_unlock(&ppd->hls_lock); in acquire_lcb_access()
6375 static void handle_8051_request(struct hfi1_pportdata *ppd) in handle_8051_request() argument
6377 struct hfi1_devdata *dd = ppd->dd; in handle_8051_request()
6506 static void set_linkup_defaults(struct hfi1_pportdata *ppd) in set_linkup_defaults() argument
6508 ppd->sm_trap_qp = 0x0; in set_linkup_defaults()
6509 ppd->sa_qp = 0x1; in set_linkup_defaults()
6698 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, in handle_sma_message() local
6700 struct hfi1_devdata *dd = ppd->dd; in handle_sma_message()
6723 if (ppd->host_link_state & (HLS_UP_INIT | HLS_UP_ARMED)) in handle_sma_message()
6724 ppd->neighbor_normal = 1; in handle_sma_message()
6733 if (ppd->host_link_state == HLS_UP_ARMED && in handle_sma_message()
6734 ppd->is_active_optimize_enabled) { in handle_sma_message()
6735 ppd->neighbor_normal = 1; in handle_sma_message()
6736 ret = set_link_state(ppd, HLS_UP_ACTIVE); in handle_sma_message()
6778 void start_freeze_handling(struct hfi1_pportdata *ppd, int flags) in start_freeze_handling() argument
6780 struct hfi1_devdata *dd = ppd->dd; in start_freeze_handling()
6804 hfi1_set_uevent_bits(ppd, _HFI1_EVENT_FROZEN_BIT); in start_freeze_handling()
6812 queue_work(ppd->hfi1_wq, &ppd->freeze_work); in start_freeze_handling()
6911 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, in handle_freeze() local
6913 struct hfi1_devdata *dd = ppd->dd; in handle_freeze()
6984 static void update_xmit_counters(struct hfi1_pportdata *ppd, u16 link_width) in update_xmit_counters() argument
6991 link_speed = get_link_speed(ppd->link_speed_active); in update_xmit_counters()
6998 get_xmit_wait_counters(ppd, tx_width, link_speed, i); in update_xmit_counters()
7008 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, in handle_link_up() local
7010 struct hfi1_devdata *dd = ppd->dd; in handle_link_up()
7012 set_link_state(ppd, HLS_UP_INIT); in handle_link_up()
7024 set_linkup_defaults(ppd); in handle_link_up()
7036 if ((ppd->link_speed_active & ppd->link_speed_enabled) == 0) { in handle_link_up()
7040 ppd->link_speed_active, ppd->link_speed_enabled); in handle_link_up()
7041 set_link_down_reason(ppd, OPA_LINKDOWN_REASON_SPEED_POLICY, 0, in handle_link_up()
7043 set_link_state(ppd, HLS_DN_OFFLINE); in handle_link_up()
7044 start_link(ppd); in handle_link_up()
7052 static void reset_neighbor_info(struct hfi1_pportdata *ppd) in reset_neighbor_info() argument
7054 ppd->neighbor_guid = 0; in reset_neighbor_info()
7055 ppd->neighbor_port_number = 0; in reset_neighbor_info()
7056 ppd->neighbor_type = 0; in reset_neighbor_info()
7057 ppd->neighbor_fm_security = 0; in reset_neighbor_info()
7138 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, in handle_link_down() local
7143 if ((ppd->host_link_state & in handle_link_down()
7145 ppd->port_type == PORT_TYPE_FIXED) in handle_link_down()
7146 ppd->offline_disabled_reason = in handle_link_down()
7150 was_up = !!(ppd->host_link_state & HLS_UP); in handle_link_down()
7151 set_link_state(ppd, HLS_DN_OFFLINE); in handle_link_down()
7152 xchg(&ppd->is_link_down_queued, 0); in handle_link_down()
7157 read_link_down_reason(ppd->dd, &link_down_reason); in handle_link_down()
7161 dd_dev_info(ppd->dd, "%sUnexpected link down\n", in handle_link_down()
7169 read_planned_down_reason_code(ppd->dd, &neigh_reason); in handle_link_down()
7170 dd_dev_info(ppd->dd, in handle_link_down()
7176 dd_dev_info(ppd->dd, in handle_link_down()
7181 dd_dev_info(ppd->dd, "%sUnknown reason 0x%x\n", in handle_link_down()
7197 set_link_down_reason(ppd, lcl_reason, neigh_reason, 0); in handle_link_down()
7200 if (was_up && ppd->local_link_down_reason.sma == 0 && in handle_link_down()
7201 ppd->neigh_link_down_reason.sma == 0) { in handle_link_down()
7202 ppd->local_link_down_reason.sma = in handle_link_down()
7203 ppd->local_link_down_reason.latest; in handle_link_down()
7204 ppd->neigh_link_down_reason.sma = in handle_link_down()
7205 ppd->neigh_link_down_reason.latest; in handle_link_down()
7208 reset_neighbor_info(ppd); in handle_link_down()
7211 clear_rcvctrl(ppd->dd, RCV_CTRL_RCV_PORT_ENABLE_SMASK); in handle_link_down()
7217 if (ppd->port_type == PORT_TYPE_QSFP && !qsfp_mod_present(ppd)) in handle_link_down()
7218 dc_shutdown(ppd->dd); in handle_link_down()
7220 start_link(ppd); in handle_link_down()
7225 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, in handle_link_bounce() local
7231 if (ppd->host_link_state & HLS_UP) { in handle_link_bounce()
7232 set_link_state(ppd, HLS_DN_OFFLINE); in handle_link_bounce()
7233 start_link(ppd); in handle_link_bounce()
7235 dd_dev_info(ppd->dd, "%s: link not up (%s), nothing to do\n", in handle_link_bounce()
7236 __func__, link_state_name(ppd->host_link_state)); in handle_link_bounce()
7294 static void clear_full_mgmt_pkey(struct hfi1_pportdata *ppd) in clear_full_mgmt_pkey() argument
7296 if (ppd->pkeys[2] != 0) { in clear_full_mgmt_pkey()
7297 ppd->pkeys[2] = 0; in clear_full_mgmt_pkey()
7298 (void)hfi1_set_ib_cfg(ppd, HFI1_IB_CFG_PKEYS, 0); in clear_full_mgmt_pkey()
7299 hfi1_event_pkey_change(ppd->dd, ppd->port); in clear_full_mgmt_pkey()
7437 void get_linkup_link_widths(struct hfi1_pportdata *ppd) in get_linkup_link_widths() argument
7442 get_linkup_widths(ppd->dd, &tx_width, &rx_width); in get_linkup_link_widths()
7445 ppd->link_width_active = tx_width; in get_linkup_link_widths()
7447 ppd->link_width_downgrade_tx_active = ppd->link_width_active; in get_linkup_link_widths()
7448 ppd->link_width_downgrade_rx_active = ppd->link_width_active; in get_linkup_link_widths()
7450 ppd->link_width_downgrade_enabled = ppd->link_width_downgrade_supported; in get_linkup_link_widths()
7452 ppd->current_egress_rate = active_egress_rate(ppd); in get_linkup_link_widths()
7462 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, in handle_verify_cap() local
7464 struct hfi1_devdata *dd = ppd->dd; in handle_verify_cap()
7481 set_link_state(ppd, HLS_VERIFY_CAP); in handle_verify_cap()
7526 crc_mask = ppd->port_crc_mode_enabled & partner_supported_crc; in handle_verify_cap()
7552 ppd->link_speed_active = 0; /* invalid value */ in handle_verify_cap()
7557 ppd->link_speed_active = OPA_LINK_SPEED_12_5G; in handle_verify_cap()
7560 ppd->link_speed_active = OPA_LINK_SPEED_25G; in handle_verify_cap()
7565 u8 rate = remote_tx_rate & ppd->local_tx_rate; in handle_verify_cap()
7568 ppd->link_speed_active = OPA_LINK_SPEED_25G; in handle_verify_cap()
7570 ppd->link_speed_active = OPA_LINK_SPEED_12_5G; in handle_verify_cap()
7572 if (ppd->link_speed_active == 0) { in handle_verify_cap()
7575 ppd->link_speed_active = OPA_LINK_SPEED_25G; in handle_verify_cap()
7585 ppd->port_ltp_crc_mode = cap_to_port_ltp(link_crc_mask) << 8; in handle_verify_cap()
7587 ppd->port_ltp_crc_mode |= in handle_verify_cap()
7588 cap_to_port_ltp(ppd->port_crc_mode_enabled) << 4; in handle_verify_cap()
7590 ppd->port_ltp_crc_mode |= lcb_to_port_ltp(crc_val); in handle_verify_cap()
7620 set_link_state(ppd, HLS_GOING_UP); in handle_verify_cap()
7638 bool apply_link_downgrade_policy(struct hfi1_pportdata *ppd, in apply_link_downgrade_policy() argument
7650 mutex_lock(&ppd->hls_lock); in apply_link_downgrade_policy()
7652 if (ppd->host_link_state & HLS_DOWN) { in apply_link_downgrade_policy()
7654 if (ppd->host_link_state & HLS_GOING_UP) { in apply_link_downgrade_policy()
7656 mutex_unlock(&ppd->hls_lock); in apply_link_downgrade_policy()
7660 dd_dev_err(ppd->dd, in apply_link_downgrade_policy()
7667 lwde = ppd->link_width_downgrade_enabled; in apply_link_downgrade_policy()
7670 get_link_widths(ppd->dd, &tx, &rx); in apply_link_downgrade_policy()
7671 ppd->link_width_downgrade_tx_active = tx; in apply_link_downgrade_policy()
7672 ppd->link_width_downgrade_rx_active = rx; in apply_link_downgrade_policy()
7675 if (ppd->link_width_downgrade_tx_active == 0 || in apply_link_downgrade_policy()
7676 ppd->link_width_downgrade_rx_active == 0) { in apply_link_downgrade_policy()
7678 dd_dev_err(ppd->dd, "Link downgrade is really a link down, ignoring\n"); in apply_link_downgrade_policy()
7684 if ((ppd->link_width_active != in apply_link_downgrade_policy()
7685 ppd->link_width_downgrade_tx_active) || in apply_link_downgrade_policy()
7686 (ppd->link_width_active != in apply_link_downgrade_policy()
7687 ppd->link_width_downgrade_rx_active)) { in apply_link_downgrade_policy()
7688 dd_dev_err(ppd->dd, in apply_link_downgrade_policy()
7690 dd_dev_err(ppd->dd, in apply_link_downgrade_policy()
7692 ppd->link_width_active, in apply_link_downgrade_policy()
7693 ppd->link_width_downgrade_tx_active, in apply_link_downgrade_policy()
7694 ppd->link_width_downgrade_rx_active); in apply_link_downgrade_policy()
7698 } else if ((lwde & ppd->link_width_downgrade_tx_active) == 0 || in apply_link_downgrade_policy()
7699 (lwde & ppd->link_width_downgrade_rx_active) == 0) { in apply_link_downgrade_policy()
7701 dd_dev_err(ppd->dd, in apply_link_downgrade_policy()
7703 dd_dev_err(ppd->dd, in apply_link_downgrade_policy()
7705 lwde, ppd->link_width_downgrade_tx_active, in apply_link_downgrade_policy()
7706 ppd->link_width_downgrade_rx_active); in apply_link_downgrade_policy()
7712 mutex_unlock(&ppd->hls_lock); in apply_link_downgrade_policy()
7715 set_link_down_reason(ppd, OPA_LINKDOWN_REASON_WIDTH_POLICY, 0, in apply_link_downgrade_policy()
7717 set_link_state(ppd, HLS_DN_OFFLINE); in apply_link_downgrade_policy()
7718 start_link(ppd); in apply_link_downgrade_policy()
7731 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, in handle_link_downgrade() local
7734 dd_dev_info(ppd->dd, "8051: Link width downgrade\n"); in handle_link_downgrade()
7735 if (apply_link_downgrade_policy(ppd, true)) in handle_link_downgrade()
7736 update_xmit_counters(ppd, ppd->link_width_downgrade_tx_active); in handle_link_downgrade()
7771 struct hfi1_pportdata *ppd = dd->pport; in handle_8051_interrupt() local
7797 if (ppd->host_link_state in handle_8051_interrupt()
7810 ppd->unknown_frame_count++; in handle_8051_interrupt()
7836 queue_work(ppd->link_wq, &ppd->sma_message_work); in handle_8051_interrupt()
7841 queue_work(ppd->link_wq, &ppd->link_up_work); in handle_8051_interrupt()
7845 handle_8051_request(ppd); in handle_8051_interrupt()
7849 queue_work(ppd->link_wq, &ppd->link_vc_work); in handle_8051_interrupt()
7864 queue_work(ppd->link_wq, &ppd->link_downgrade_work); in handle_8051_interrupt()
7902 if ((ppd->host_link_state & in handle_8051_interrupt()
7904 ppd->link_enabled == 0) { in handle_8051_interrupt()
7906 __func__, ppd->host_link_state, in handle_8051_interrupt()
7907 ppd->link_enabled); in handle_8051_interrupt()
7909 if (xchg(&ppd->is_link_down_queued, 1) == 1) in handle_8051_interrupt()
7914 queue_work(ppd->link_wq, &ppd->link_down_work); in handle_8051_interrupt()
7969 struct hfi1_pportdata *ppd = dd->pport; in handle_dcc_err() local
7984 struct hfi1_pportdata *ppd = dd->pport; in handle_dcc_err() local
7986 if (ppd->link_downed < (u32)UINT_MAX) in handle_dcc_err()
7987 ppd->link_downed++; in handle_dcc_err()
8012 if (ppd->port_error_action & in handle_dcc_err()
8031 do_bounce = ppd->port_error_action & in handle_dcc_err()
8083 do_bounce = ppd->port_error_action & in handle_dcc_err()
8121 set_link_down_reason(ppd, lcl_reason, 0, lcl_reason); in handle_dcc_err()
8122 queue_work(ppd->link_wq, &ppd->link_bounce_work); in handle_dcc_err()
8684 struct hfi1_pportdata *ppd = dd->pport; in read_lcb_csr() local
8687 if (ppd->host_link_state & HLS_UP) in read_lcb_csr()
8690 if (ppd->host_link_state & (HLS_GOING_UP | HLS_GOING_OFFLINE)) { in read_lcb_csr()
8733 struct hfi1_pportdata *ppd = dd->pport; in write_lcb_csr() local
8736 if (ppd->host_link_state & HLS_UP) in write_lcb_csr()
8739 if (ppd->host_link_state & (HLS_GOING_UP | HLS_GOING_OFFLINE)) in write_lcb_csr()
9382 static int set_local_link_attributes(struct hfi1_pportdata *ppd) in set_local_link_attributes() argument
9384 struct hfi1_devdata *dd = ppd->dd; in set_local_link_attributes()
9395 &rx_polarity_inversion, &ppd->local_tx_rate); in set_local_link_attributes()
9401 if (ppd->link_speed_enabled & OPA_LINK_SPEED_25G) in set_local_link_attributes()
9402 ppd->local_tx_rate = 1; in set_local_link_attributes()
9404 ppd->local_tx_rate = 0; in set_local_link_attributes()
9407 ppd->local_tx_rate = 0; in set_local_link_attributes()
9408 if (ppd->link_speed_enabled & OPA_LINK_SPEED_25G) in set_local_link_attributes()
9409 ppd->local_tx_rate |= 2; in set_local_link_attributes()
9410 if (ppd->link_speed_enabled & OPA_LINK_SPEED_12_5G) in set_local_link_attributes()
9411 ppd->local_tx_rate |= 1; in set_local_link_attributes()
9416 rx_polarity_inversion, ppd->local_tx_rate); in set_local_link_attributes()
9439 ppd->port_crc_mode_enabled); in set_local_link_attributes()
9460 ppd->link_width_enabled)); in set_local_link_attributes()
9481 int start_link(struct hfi1_pportdata *ppd) in start_link() argument
9487 tune_serdes(ppd); in start_link()
9489 if (!ppd->driver_link_ready) { in start_link()
9490 dd_dev_info(ppd->dd, in start_link()
9501 clear_full_mgmt_pkey(ppd); in start_link()
9503 return set_link_state(ppd, HLS_DN_POLL); in start_link()
9506 static void wait_for_qsfp_init(struct hfi1_pportdata *ppd) in wait_for_qsfp_init() argument
9508 struct hfi1_devdata *dd = ppd->dd; in wait_for_qsfp_init()
9540 static void set_qsfp_int_n(struct hfi1_pportdata *ppd, u8 enable) in set_qsfp_int_n() argument
9542 struct hfi1_devdata *dd = ppd->dd; in set_qsfp_int_n()
9560 int reset_qsfp(struct hfi1_pportdata *ppd) in reset_qsfp() argument
9562 struct hfi1_devdata *dd = ppd->dd; in reset_qsfp()
9566 set_qsfp_int_n(ppd, 0); in reset_qsfp()
9583 wait_for_qsfp_init(ppd); in reset_qsfp()
9589 set_qsfp_int_n(ppd, 1); in reset_qsfp()
9596 return set_qsfp_tx(ppd, 0); in reset_qsfp()
9599 static int handle_qsfp_error_conditions(struct hfi1_pportdata *ppd, in handle_qsfp_error_conditions() argument
9602 struct hfi1_devdata *dd = ppd->dd; in handle_qsfp_error_conditions()
9617 if (ppd->host_link_state & HLS_DOWN) in handle_qsfp_error_conditions()
9702 struct hfi1_pportdata *ppd; in qsfp_event() local
9706 ppd = qd->ppd; in qsfp_event()
9707 dd = ppd->dd; in qsfp_event()
9710 if (!qsfp_mod_present(ppd)) in qsfp_event()
9713 if (ppd->host_link_state == HLS_DN_DISABLE) { in qsfp_event()
9714 dd_dev_info(ppd->dd, in qsfp_event()
9727 set_qsfp_int_n(ppd, 0); in qsfp_event()
9729 wait_for_qsfp_init(ppd); in qsfp_event()
9735 set_qsfp_int_n(ppd, 1); in qsfp_event()
9737 start_link(ppd); in qsfp_event()
9743 if (one_qsfp_read(ppd, dd->hfi1_id, 6, in qsfp_event()
9752 ppd, qsfp_interrupt_status); in qsfp_event()
9753 spin_lock_irqsave(&ppd->qsfp_info.qsfp_lock, flags); in qsfp_event()
9754 ppd->qsfp_info.check_interrupt_flags = 0; in qsfp_event()
9755 spin_unlock_irqrestore(&ppd->qsfp_info.qsfp_lock, in qsfp_event()
9763 struct hfi1_pportdata *ppd = dd->pport; in init_qsfp_int() local
9773 set_qsfp_int_n(ppd, 0); in init_qsfp_int()
9776 if (qsfp_mod_present(ppd)) in init_qsfp_int()
9814 static int test_qsfp_read(struct hfi1_pportdata *ppd) in test_qsfp_read() argument
9823 if (ppd->port_type != PORT_TYPE_QSFP || !qsfp_mod_present(ppd)) in test_qsfp_read()
9827 ret = one_qsfp_read(ppd, ppd->dd->hfi1_id, 2, &status, 1); in test_qsfp_read()
9849 static void try_start_link(struct hfi1_pportdata *ppd) in try_start_link() argument
9851 if (test_qsfp_read(ppd)) { in try_start_link()
9853 if (ppd->qsfp_retry_count >= MAX_QSFP_RETRIES) { in try_start_link()
9854 dd_dev_err(ppd->dd, "QSFP not responding, giving up\n"); in try_start_link()
9857 dd_dev_info(ppd->dd, in try_start_link()
9859 (int)ppd->qsfp_retry_count); in try_start_link()
9860 ppd->qsfp_retry_count++; in try_start_link()
9861 queue_delayed_work(ppd->link_wq, &ppd->start_link_work, in try_start_link()
9865 ppd->qsfp_retry_count = 0; in try_start_link()
9867 start_link(ppd); in try_start_link()
9875 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, in handle_start_link() local
9877 try_start_link(ppd); in handle_start_link()
9880 int bringup_serdes(struct hfi1_pportdata *ppd) in bringup_serdes() argument
9882 struct hfi1_devdata *dd = ppd->dd; in bringup_serdes()
9889 guid = ppd->guids[HFI1_PORT_GUID_INDEX]; in bringup_serdes()
9892 guid = dd->base_guid + ppd->port - 1; in bringup_serdes()
9893 ppd->guids[HFI1_PORT_GUID_INDEX] = guid; in bringup_serdes()
9897 ppd->linkinit_reason = OPA_LINKINIT_REASON_LINKUP; in bringup_serdes()
9908 get_port_type(ppd); in bringup_serdes()
9909 if (ppd->port_type == PORT_TYPE_QSFP) { in bringup_serdes()
9910 set_qsfp_int_n(ppd, 0); in bringup_serdes()
9911 wait_for_qsfp_init(ppd); in bringup_serdes()
9912 set_qsfp_int_n(ppd, 1); in bringup_serdes()
9915 try_start_link(ppd); in bringup_serdes()
9919 void hfi1_quiet_serdes(struct hfi1_pportdata *ppd) in hfi1_quiet_serdes() argument
9921 struct hfi1_devdata *dd = ppd->dd; in hfi1_quiet_serdes()
9930 ppd->driver_link_ready = 0; in hfi1_quiet_serdes()
9931 ppd->link_enabled = 0; in hfi1_quiet_serdes()
9933 ppd->qsfp_retry_count = MAX_QSFP_RETRIES; /* prevent more retries */ in hfi1_quiet_serdes()
9934 flush_delayed_work(&ppd->start_link_work); in hfi1_quiet_serdes()
9935 cancel_delayed_work_sync(&ppd->start_link_work); in hfi1_quiet_serdes()
9937 ppd->offline_disabled_reason = in hfi1_quiet_serdes()
9939 set_link_down_reason(ppd, OPA_LINKDOWN_REASON_REBOOT, 0, in hfi1_quiet_serdes()
9941 set_link_state(ppd, HLS_DN_OFFLINE); in hfi1_quiet_serdes()
9945 cancel_work_sync(&ppd->freeze_work); in hfi1_quiet_serdes()
9950 struct hfi1_pportdata *ppd; in init_cpu_counters() local
9953 ppd = (struct hfi1_pportdata *)(dd + 1); in init_cpu_counters()
9954 for (i = 0; i < dd->num_pports; i++, ppd++) { in init_cpu_counters()
9955 ppd->ibport_data.rvp.rc_acks = NULL; in init_cpu_counters()
9956 ppd->ibport_data.rvp.rc_qacks = NULL; in init_cpu_counters()
9957 ppd->ibport_data.rvp.rc_acks = alloc_percpu(u64); in init_cpu_counters()
9958 ppd->ibport_data.rvp.rc_qacks = alloc_percpu(u64); in init_cpu_counters()
9959 ppd->ibport_data.rvp.rc_delayed_comp = alloc_percpu(u64); in init_cpu_counters()
9960 if (!ppd->ibport_data.rvp.rc_acks || in init_cpu_counters()
9961 !ppd->ibport_data.rvp.rc_delayed_comp || in init_cpu_counters()
9962 !ppd->ibport_data.rvp.rc_qacks) in init_cpu_counters()
10057 int hfi1_get_ib_cfg(struct hfi1_pportdata *ppd, int which) in hfi1_get_ib_cfg() argument
10059 struct hfi1_devdata *dd = ppd->dd; in hfi1_get_ib_cfg()
10064 val = ppd->link_width_enabled; in hfi1_get_ib_cfg()
10067 val = ppd->link_width_active; in hfi1_get_ib_cfg()
10070 val = ppd->link_speed_enabled; in hfi1_get_ib_cfg()
10073 val = ppd->link_speed_active; in hfi1_get_ib_cfg()
10082 val = ppd->actual_vls_operational; in hfi1_get_ib_cfg()
10091 val = ppd->overrun_threshold; in hfi1_get_ib_cfg()
10094 val = ppd->phy_error_threshold; in hfi1_get_ib_cfg()
10156 static void set_send_length(struct hfi1_pportdata *ppd) in set_send_length() argument
10158 struct hfi1_devdata *dd = ppd->dd; in set_send_length()
10167 for (i = 0; i < ppd->vls_supported; i++) { in set_send_length()
10183 for (i = 0; i < ppd->vls_supported; i++) { in set_send_length()
10202 len1 = read_csr(ppd->dd, DCC_CFG_PORT_CONFIG); in set_send_length()
10206 write_csr(ppd->dd, DCC_CFG_PORT_CONFIG, len1); in set_send_length()
10209 static void set_lidlmc(struct hfi1_pportdata *ppd) in set_lidlmc() argument
10213 struct hfi1_devdata *dd = ppd->dd; in set_lidlmc()
10214 u32 mask = ~((1U << ppd->lmc) - 1); in set_lidlmc()
10215 u64 c1 = read_csr(ppd->dd, DCC_CFG_PORT_CONFIG1); in set_lidlmc()
10222 lid = (ppd->lid >= be16_to_cpu(IB_MULTICAST_LID_BASE)) ? 0 : ppd->lid; in set_lidlmc()
10229 write_csr(ppd->dd, DCC_CFG_PORT_CONFIG1, c1); in set_lidlmc()
10306 static const char *state_complete_reason_code_string(struct hfi1_pportdata *ppd, in state_complete_reason_code_string() argument
10320 static void decode_state_complete(struct hfi1_pportdata *ppd, u32 frame, in decode_state_complete() argument
10323 struct hfi1_devdata *dd = ppd->dd; in decode_state_complete()
10349 reason, state_complete_reason_code_string(ppd, reason)); in decode_state_complete()
10358 static void check_lni_states(struct hfi1_pportdata *ppd) in check_lni_states() argument
10363 read_last_local_state(ppd->dd, &last_local_state); in check_lni_states()
10364 read_last_remote_state(ppd->dd, &last_remote_state); in check_lni_states()
10374 decode_state_complete(ppd, last_local_state, "transmitted"); in check_lni_states()
10375 decode_state_complete(ppd, last_remote_state, "received"); in check_lni_states()
10401 static void force_logical_link_state_down(struct hfi1_pportdata *ppd) in force_logical_link_state_down() argument
10403 struct hfi1_devdata *dd = ppd->dd; in force_logical_link_state_down()
10432 dd_dev_info(ppd->dd, "logical state forced to LINK_DOWN\n"); in force_logical_link_state_down()
10443 static int goto_offline(struct hfi1_pportdata *ppd, u8 rem_reason) in goto_offline() argument
10445 struct hfi1_devdata *dd = ppd->dd; in goto_offline()
10452 previous_state = ppd->host_link_state; in goto_offline()
10453 ppd->host_link_state = HLS_GOING_OFFLINE; in goto_offline()
10464 if (ppd->offline_disabled_reason == in goto_offline()
10466 ppd->offline_disabled_reason = in goto_offline()
10469 offline_state_ret = wait_phys_link_offline_substates(ppd, 10000); in goto_offline()
10474 if (ppd->port_type == PORT_TYPE_QSFP && in goto_offline()
10475 ppd->qsfp_info.limiting_active && in goto_offline()
10476 qsfp_mod_present(ppd)) { in goto_offline()
10481 set_qsfp_tx(ppd, 0); in goto_offline()
10495 ret = wait_physical_linkstate(ppd, PLS_OFFLINE, 30000); in goto_offline()
10508 ret = wait_logical_linkstate(ppd, IB_PORT_DOWN, 1000); in goto_offline()
10510 force_logical_link_state_down(ppd); in goto_offline()
10512 ppd->host_link_state = HLS_LINK_COOLDOWN; /* LCB access allowed */ in goto_offline()
10513 update_statusp(ppd, IB_PORT_DOWN); in goto_offline()
10529 ppd->host_link_state = HLS_DN_OFFLINE; in goto_offline()
10539 ppd->host_link_state = HLS_DN_OFFLINE; in goto_offline()
10546 check_lni_states(ppd); in goto_offline()
10549 ppd->qsfp_info.reset_needed = 0; in goto_offline()
10553 ppd->link_width_active = 0; in goto_offline()
10554 ppd->link_width_downgrade_tx_active = 0; in goto_offline()
10555 ppd->link_width_downgrade_rx_active = 0; in goto_offline()
10556 ppd->current_egress_rate = 0; in goto_offline()
10584 static const char *link_state_reason_name(struct hfi1_pportdata *ppd, u32 state) in link_state_reason_name() argument
10587 switch (ppd->linkinit_reason) { in link_state_reason_name()
10610 u32 driver_pstate(struct hfi1_pportdata *ppd) in driver_pstate() argument
10612 switch (ppd->host_link_state) { in driver_pstate()
10633 dd_dev_err(ppd->dd, "invalid host_link_state 0x%x\n", in driver_pstate()
10634 ppd->host_link_state); in driver_pstate()
10644 u32 driver_lstate(struct hfi1_pportdata *ppd) in driver_lstate() argument
10646 if (ppd->host_link_state && (ppd->host_link_state & HLS_DOWN)) in driver_lstate()
10649 switch (ppd->host_link_state & HLS_UP) { in driver_lstate()
10657 dd_dev_err(ppd->dd, "invalid host_link_state 0x%x\n", in driver_lstate()
10658 ppd->host_link_state); in driver_lstate()
10663 void set_link_down_reason(struct hfi1_pportdata *ppd, u8 lcl_reason, in set_link_down_reason() argument
10666 if (ppd->local_link_down_reason.latest == 0 && in set_link_down_reason()
10667 ppd->neigh_link_down_reason.latest == 0) { in set_link_down_reason()
10668 ppd->local_link_down_reason.latest = lcl_reason; in set_link_down_reason()
10669 ppd->neigh_link_down_reason.latest = neigh_reason; in set_link_down_reason()
10670 ppd->remote_link_down_reason = rem_reason; in set_link_down_reason()
10681 static inline bool data_vls_operational(struct hfi1_pportdata *ppd) in data_vls_operational() argument
10686 if (!ppd->actual_vls_operational) in data_vls_operational()
10689 for (i = 0; i < ppd->vls_supported; i++) { in data_vls_operational()
10690 reg = read_csr(ppd->dd, SEND_CM_CREDIT_VL + (8 * i)); in data_vls_operational()
10691 if ((reg && !ppd->dd->vld[i].mtu) || in data_vls_operational()
10692 (!reg && ppd->dd->vld[i].mtu)) in data_vls_operational()
10707 int set_link_state(struct hfi1_pportdata *ppd, u32 state) in set_link_state() argument
10709 struct hfi1_devdata *dd = ppd->dd; in set_link_state()
10714 mutex_lock(&ppd->hls_lock); in set_link_state()
10721 poll_bounce = ppd->host_link_state == HLS_DN_POLL && in set_link_state()
10725 link_state_name(ppd->host_link_state), in set_link_state()
10728 link_state_reason_name(ppd, state)); in set_link_state()
10736 ppd->is_sm_config_started = 0; in set_link_state()
10742 if (ppd->host_link_state == state && !poll_bounce) in set_link_state()
10747 if (ppd->host_link_state == HLS_DN_POLL && in set_link_state()
10757 } else if (ppd->host_link_state != HLS_GOING_UP) { in set_link_state()
10766 ret = wait_physical_linkstate(ppd, PLS_LINKUP, 1000); in set_link_state()
10774 ret = wait_logical_linkstate(ppd, IB_PORT_INIT, 1000); in set_link_state()
10783 if (ppd->linkinit_reason >= OPA_LINKINIT_REASON_CLEAR) in set_link_state()
10784 ppd->linkinit_reason = in set_link_state()
10798 update_xmit_counters(ppd, ppd->link_width_active); in set_link_state()
10800 ppd->host_link_state = HLS_UP_INIT; in set_link_state()
10801 update_statusp(ppd, IB_PORT_INIT); in set_link_state()
10804 if (ppd->host_link_state != HLS_UP_INIT) in set_link_state()
10807 if (!data_vls_operational(ppd)) { in set_link_state()
10816 ret = wait_logical_linkstate(ppd, IB_PORT_ARMED, 1000); in set_link_state()
10823 ppd->host_link_state = HLS_UP_ARMED; in set_link_state()
10824 update_statusp(ppd, IB_PORT_ARMED); in set_link_state()
10831 ppd->neighbor_normal = 1; in set_link_state()
10834 if (ppd->host_link_state != HLS_UP_ARMED) in set_link_state()
10838 ret = wait_logical_linkstate(ppd, IB_PORT_ACTIVE, 1000); in set_link_state()
10846 ppd->host_link_state = HLS_UP_ACTIVE; in set_link_state()
10847 update_statusp(ppd, IB_PORT_ACTIVE); in set_link_state()
10851 event.element.port_num = ppd->port; in set_link_state()
10856 if ((ppd->host_link_state == HLS_DN_DISABLE || in set_link_state()
10857 ppd->host_link_state == HLS_DN_OFFLINE) && in set_link_state()
10863 if (ppd->host_link_state != HLS_DN_OFFLINE) { in set_link_state()
10864 u8 tmp = ppd->link_enabled; in set_link_state()
10866 ret = goto_offline(ppd, ppd->remote_link_down_reason); in set_link_state()
10868 ppd->link_enabled = tmp; in set_link_state()
10871 ppd->remote_link_down_reason = 0; in set_link_state()
10873 if (ppd->driver_link_ready) in set_link_state()
10874 ppd->link_enabled = 1; in set_link_state()
10877 set_all_slowpath(ppd->dd); in set_link_state()
10878 ret = set_local_link_attributes(ppd); in set_link_state()
10882 ppd->port_error_action = 0; in set_link_state()
10890 ret1 = wait_phys_link_out_of_offline(ppd, in set_link_state()
10906 ppd->host_link_state = HLS_DN_POLL; in set_link_state()
10907 ppd->offline_disabled_reason = in set_link_state()
10914 goto_offline(ppd, 0); in set_link_state()
10916 log_physical_state(ppd, PLS_POLLING); in set_link_state()
10920 ppd->link_enabled = 0; in set_link_state()
10925 if (ppd->host_link_state != HLS_DN_OFFLINE) { in set_link_state()
10926 ret = goto_offline(ppd, ppd->remote_link_down_reason); in set_link_state()
10929 ppd->remote_link_down_reason = 0; in set_link_state()
10941 ret = wait_physical_linkstate(ppd, PLS_DISABLED, 10000); in set_link_state()
10950 ppd->host_link_state = HLS_DN_DISABLE; in set_link_state()
10953 if (ppd->host_link_state == HLS_DN_DISABLE) in set_link_state()
10957 ret = goto_offline(ppd, ppd->remote_link_down_reason); in set_link_state()
10959 ppd->remote_link_down_reason = 0; in set_link_state()
10962 if (ppd->host_link_state != HLS_DN_POLL) in set_link_state()
10964 ppd->host_link_state = HLS_VERIFY_CAP; in set_link_state()
10965 log_physical_state(ppd, PLS_CONFIGPHY_VERIFYCAP); in set_link_state()
10968 if (ppd->host_link_state != HLS_VERIFY_CAP) in set_link_state()
10979 ppd->host_link_state = HLS_GOING_UP; in set_link_state()
10995 __func__, link_state_name(ppd->host_link_state), in set_link_state()
11000 mutex_unlock(&ppd->hls_lock); in set_link_state()
11008 int hfi1_set_ib_cfg(struct hfi1_pportdata *ppd, int which, u32 val) in hfi1_set_ib_cfg() argument
11015 set_lidlmc(ppd); in hfi1_set_ib_cfg()
11025 write_csr(ppd->dd, SEND_HIGH_PRIORITY_LIMIT, reg); in hfi1_set_ib_cfg()
11033 if (ppd->vls_operational != val) { in hfi1_set_ib_cfg()
11034 ppd->vls_operational = val; in hfi1_set_ib_cfg()
11035 if (!ppd->port) in hfi1_set_ib_cfg()
11048 ppd->link_width_enabled = val & ppd->link_width_supported; in hfi1_set_ib_cfg()
11051 ppd->link_width_downgrade_enabled = in hfi1_set_ib_cfg()
11052 val & ppd->link_width_downgrade_supported; in hfi1_set_ib_cfg()
11055 ppd->link_speed_enabled = val & ppd->link_speed_supported; in hfi1_set_ib_cfg()
11062 ppd->overrun_threshold = val; in hfi1_set_ib_cfg()
11069 ppd->phy_error_threshold = val; in hfi1_set_ib_cfg()
11073 set_send_length(ppd); in hfi1_set_ib_cfg()
11078 set_partition_keys(ppd); in hfi1_set_ib_cfg()
11083 dd_dev_info(ppd->dd, in hfi1_set_ib_cfg()
11092 static void init_vl_arb_caches(struct hfi1_pportdata *ppd) in init_vl_arb_caches() argument
11112 spin_lock_init(&ppd->vl_arb_cache[i].lock); in init_vl_arb_caches()
11122 vl_arb_lock_cache(struct hfi1_pportdata *ppd, int idx) in vl_arb_lock_cache() argument
11126 spin_lock(&ppd->vl_arb_cache[idx].lock); in vl_arb_lock_cache()
11127 return &ppd->vl_arb_cache[idx]; in vl_arb_lock_cache()
11130 static inline void vl_arb_unlock_cache(struct hfi1_pportdata *ppd, int idx) in vl_arb_unlock_cache() argument
11132 spin_unlock(&ppd->vl_arb_cache[idx].lock); in vl_arb_unlock_cache()
11155 static int set_vl_weights(struct hfi1_pportdata *ppd, u32 target, in set_vl_weights() argument
11158 struct hfi1_devdata *dd = ppd->dd; in set_vl_weights()
11163 mutex_lock(&ppd->hls_lock); in set_vl_weights()
11165 if (ppd->host_link_state & HLS_UP) in set_vl_weights()
11205 mutex_unlock(&ppd->hls_lock); in set_vl_weights()
11448 int set_buffer_control(struct hfi1_pportdata *ppd, in set_buffer_control() argument
11451 struct hfi1_devdata *dd = ppd->dd; in set_buffer_control()
11621 ppd->actual_vls_operational = vl_count; in set_buffer_control()
11622 ret = sdma_map_init(dd, ppd->port - 1, vl_count ? in set_buffer_control()
11623 ppd->actual_vls_operational : in set_buffer_control()
11624 ppd->vls_operational, in set_buffer_control()
11627 ret = pio_map_init(dd, ppd->port - 1, vl_count ? in set_buffer_control()
11628 ppd->actual_vls_operational : in set_buffer_control()
11629 ppd->vls_operational, NULL); in set_buffer_control()
11641 int fm_get_table(struct hfi1_pportdata *ppd, int which, void *t) in fm_get_table() argument
11654 vlc = vl_arb_lock_cache(ppd, HI_PRIO_TABLE); in fm_get_table()
11656 vl_arb_unlock_cache(ppd, HI_PRIO_TABLE); in fm_get_table()
11664 vlc = vl_arb_lock_cache(ppd, LO_PRIO_TABLE); in fm_get_table()
11666 vl_arb_unlock_cache(ppd, LO_PRIO_TABLE); in fm_get_table()
11669 size = get_buffer_control(ppd->dd, t, NULL); in fm_get_table()
11672 size = get_sc2vlnt(ppd->dd, t); in fm_get_table()
11677 get_vlarb_preempt(ppd->dd, OPA_MAX_VLS, t); in fm_get_table()
11695 int fm_set_table(struct hfi1_pportdata *ppd, int which, void *t) in fm_set_table() argument
11702 vlc = vl_arb_lock_cache(ppd, HI_PRIO_TABLE); in fm_set_table()
11704 vl_arb_unlock_cache(ppd, HI_PRIO_TABLE); in fm_set_table()
11708 vl_arb_unlock_cache(ppd, HI_PRIO_TABLE); in fm_set_table()
11709 ret = set_vl_weights(ppd, SEND_HIGH_PRIORITY_LIST, in fm_set_table()
11713 vlc = vl_arb_lock_cache(ppd, LO_PRIO_TABLE); in fm_set_table()
11715 vl_arb_unlock_cache(ppd, LO_PRIO_TABLE); in fm_set_table()
11719 vl_arb_unlock_cache(ppd, LO_PRIO_TABLE); in fm_set_table()
11720 ret = set_vl_weights(ppd, SEND_LOW_PRIORITY_LIST, in fm_set_table()
11724 ret = set_buffer_control(ppd, t); in fm_set_table()
11727 set_sc2vlnt(ppd->dd, t); in fm_set_table()
12295 u32 hfi1_read_portcntrs(struct hfi1_pportdata *ppd, char **namep, u64 **cntrp) in hfi1_read_portcntrs() argument
12301 ret = ppd->dd->portcntrnameslen; in hfi1_read_portcntrs()
12302 *namep = ppd->dd->portcntrnames; in hfi1_read_portcntrs()
12307 ret = ppd->dd->nportcntrs * sizeof(u64); in hfi1_read_portcntrs()
12308 *cntrp = ppd->cntrs; in hfi1_read_portcntrs()
12322 val = entry->rw_cntr(entry, ppd, j, in hfi1_read_portcntrs()
12329 ppd->cntrs[entry->offset + j] = val; in hfi1_read_portcntrs()
12332 val = entry->rw_cntr(entry, ppd, in hfi1_read_portcntrs()
12336 ppd->cntrs[entry->offset] = val; in hfi1_read_portcntrs()
12346 struct hfi1_pportdata *ppd; in free_cntrs() local
12351 ppd = (struct hfi1_pportdata *)(dd + 1); in free_cntrs()
12352 for (i = 0; i < dd->num_pports; i++, ppd++) { in free_cntrs()
12353 kfree(ppd->cntrs); in free_cntrs()
12354 kfree(ppd->scntrs); in free_cntrs()
12355 free_percpu(ppd->ibport_data.rvp.rc_acks); in free_cntrs()
12356 free_percpu(ppd->ibport_data.rvp.rc_qacks); in free_cntrs()
12357 free_percpu(ppd->ibport_data.rvp.rc_delayed_comp); in free_cntrs()
12358 ppd->cntrs = NULL; in free_cntrs()
12359 ppd->scntrs = NULL; in free_cntrs()
12360 ppd->ibport_data.rvp.rc_acks = NULL; in free_cntrs()
12361 ppd->ibport_data.rvp.rc_qacks = NULL; in free_cntrs()
12362 ppd->ibport_data.rvp.rc_delayed_comp = NULL; in free_cntrs()
12491 u64 read_port_cntr(struct hfi1_pportdata *ppd, int index, int vl) in read_port_cntr() argument
12497 sval = ppd->scntrs + entry->offset; in read_port_cntr()
12502 if ((index >= C_RCV_HDR_OVF_FIRST + ppd->dd->num_rcv_contexts) && in read_port_cntr()
12508 return read_dev_port_cntr(ppd->dd, entry, sval, ppd, vl); in read_port_cntr()
12511 u64 write_port_cntr(struct hfi1_pportdata *ppd, int index, int vl, u64 data) in write_port_cntr() argument
12517 sval = ppd->scntrs + entry->offset; in write_port_cntr()
12522 if ((index >= C_RCV_HDR_OVF_FIRST + ppd->dd->num_rcv_contexts) && in write_port_cntr()
12528 return write_dev_port_cntr(ppd->dd, entry, sval, ppd, vl, data); in write_port_cntr()
12538 struct hfi1_pportdata *ppd; in do_update_synth_timer() local
12591 ppd = (struct hfi1_pportdata *)(dd + 1); in do_update_synth_timer()
12592 for (i = 0; i < dd->num_pports; i++, ppd++) { in do_update_synth_timer()
12597 read_port_cntr(ppd, j, vl); in do_update_synth_timer()
12599 read_port_cntr(ppd, j, CNTR_INVALID_VL); in do_update_synth_timer()
12641 struct hfi1_pportdata *ppd; in init_cntrs() local
12852 ppd = (struct hfi1_pportdata *)(dd + 1); in init_cntrs()
12853 for (i = 0; i < dd->num_pports; i++, ppd++) { in init_cntrs()
12854 ppd->cntrs = kcalloc(dd->nportcntrs, sizeof(u64), GFP_KERNEL); in init_cntrs()
12855 if (!ppd->cntrs) in init_cntrs()
12858 ppd->scntrs = kcalloc(dd->nportcntrs, sizeof(u64), GFP_KERNEL); in init_cntrs()
12859 if (!ppd->scntrs) in init_cntrs()
12972 static void update_statusp(struct hfi1_pportdata *ppd, u32 state) in update_statusp() argument
12982 if (ppd->statusp) { in update_statusp()
12986 *ppd->statusp &= ~(HFI1_STATUS_IB_CONF | in update_statusp()
12990 *ppd->statusp |= HFI1_STATUS_IB_CONF; in update_statusp()
12993 *ppd->statusp |= HFI1_STATUS_IB_READY; in update_statusp()
12997 dd_dev_info(ppd->dd, "logical state changed to %s (0x%x)\n", in update_statusp()
13011 static int wait_logical_linkstate(struct hfi1_pportdata *ppd, u32 state, in wait_logical_linkstate() argument
13019 new_state = chip_to_opa_lstate(ppd->dd, in wait_logical_linkstate()
13020 read_logical_state(ppd->dd)); in wait_logical_linkstate()
13024 dd_dev_err(ppd->dd, in wait_logical_linkstate()
13035 static void log_state_transition(struct hfi1_pportdata *ppd, u32 state) in log_state_transition() argument
13037 u32 ib_pstate = chip_to_opa_pstate(ppd->dd, state); in log_state_transition()
13039 dd_dev_info(ppd->dd, in log_state_transition()
13048 static void log_physical_state(struct hfi1_pportdata *ppd, u32 state) in log_physical_state() argument
13050 u32 read_state = read_physical_state(ppd->dd); in log_physical_state()
13053 log_state_transition(ppd, state); in log_physical_state()
13055 dd_dev_err(ppd->dd, in log_physical_state()
13070 static int wait_physical_linkstate(struct hfi1_pportdata *ppd, u32 state, in wait_physical_linkstate() argument
13078 read_state = read_physical_state(ppd->dd); in wait_physical_linkstate()
13082 dd_dev_err(ppd->dd, in wait_physical_linkstate()
13090 log_state_transition(ppd, state); in wait_physical_linkstate()
13103 static int wait_phys_link_offline_substates(struct hfi1_pportdata *ppd, in wait_phys_link_offline_substates() argument
13111 read_state = read_physical_state(ppd->dd); in wait_phys_link_offline_substates()
13115 dd_dev_err(ppd->dd, in wait_phys_link_offline_substates()
13123 log_state_transition(ppd, read_state); in wait_phys_link_offline_substates()
13136 static int wait_phys_link_out_of_offline(struct hfi1_pportdata *ppd, in wait_phys_link_out_of_offline() argument
13144 read_state = read_physical_state(ppd->dd); in wait_phys_link_out_of_offline()
13148 dd_dev_err(ppd->dd, in wait_phys_link_out_of_offline()
13156 log_state_transition(ppd, read_state); in wait_phys_link_out_of_offline()
13559 static void set_partition_keys(struct hfi1_pportdata *ppd) in set_partition_keys() argument
13561 struct hfi1_devdata *dd = ppd->dd; in set_partition_keys()
13567 reg |= (ppd->pkeys[i] & in set_partition_keys()
14172 struct hfi1_pportdata *ppd = &dd->pport[i]; in init_early_variables() local
14174 set_partition_keys(ppd); in init_early_variables()
15036 struct hfi1_pportdata *ppd; in hfi1_init_dd() local
15048 ppd = dd->pport; in hfi1_init_dd()
15049 for (i = 0; i < dd->num_pports; i++, ppd++) { in hfi1_init_dd()
15052 hfi1_init_pportdata(pdev, ppd, dd, 0, 1); in hfi1_init_dd()
15054 ppd->link_width_supported = in hfi1_init_dd()
15057 ppd->link_width_downgrade_supported = in hfi1_init_dd()
15058 ppd->link_width_supported; in hfi1_init_dd()
15060 ppd->link_width_enabled = OPA_LINK_WIDTH_4X; in hfi1_init_dd()
15061 ppd->link_width_downgrade_enabled = in hfi1_init_dd()
15062 ppd->link_width_downgrade_supported; in hfi1_init_dd()
15072 ppd->vls_supported = num_vls; in hfi1_init_dd()
15073 ppd->vls_operational = ppd->vls_supported; in hfi1_init_dd()
15082 ppd->overrun_threshold = 0x4; in hfi1_init_dd()
15083 ppd->phy_error_threshold = 0xf; in hfi1_init_dd()
15084 ppd->port_crc_mode_enabled = link_crc_mask; in hfi1_init_dd()
15086 ppd->port_ltp_crc_mode = cap_to_port_ltp(link_crc_mask) << 8; in hfi1_init_dd()
15088 ppd->port_ltp_crc_mode |= cap_to_port_ltp(link_crc_mask) << 4; in hfi1_init_dd()
15090 ppd->host_link_state = HLS_DN_OFFLINE; in hfi1_init_dd()
15091 init_vl_arb_caches(ppd); in hfi1_init_dd()
15146 ppd = dd->pport; in hfi1_init_dd()
15148 ppd->link_width_supported = in hfi1_init_dd()
15149 ppd->link_width_enabled = in hfi1_init_dd()
15150 ppd->link_width_downgrade_supported = in hfi1_init_dd()
15151 ppd->link_width_downgrade_enabled = in hfi1_init_dd()
15159 ppd->vls_supported = sdma_engines; in hfi1_init_dd()
15160 ppd->vls_operational = ppd->vls_supported; in hfi1_init_dd()
15362 static u16 delay_cycles(struct hfi1_pportdata *ppd, u32 desired_egress_rate, in delay_cycles() argument
15366 u32 current_egress_rate = ppd->current_egress_rate; in delay_cycles()
15395 u64 create_pbc(struct hfi1_pportdata *ppd, u64 flags, int srate_mbs, u32 vl, in create_pbc() argument
15401 delay = delay_cycles(ppd, srate_mbs, dw_len); in create_pbc()
15504 struct hfi1_pportdata *ppd = &dd->pport[0]; in handle_temp_err() local
15513 start_freeze_handling(ppd, FREEZE_SELF | FREEZE_ABORT); in handle_temp_err()
15525 ppd->driver_link_ready = 0; in handle_temp_err()
15526 ppd->link_enabled = 0; in handle_temp_err()