Lines Matching refs:ppd

1034 static void set_partition_keys(struct hfi1_pportdata *ppd);
1036 static const char *link_state_reason_name(struct hfi1_pportdata *ppd,
1043 static void update_statusp(struct hfi1_pportdata *ppd, u32 state);
1044 static int wait_phys_link_offline_substates(struct hfi1_pportdata *ppd,
1046 static int wait_logical_linkstate(struct hfi1_pportdata *ppd, u32 state,
1048 static void log_state_transition(struct hfi1_pportdata *ppd, u32 state);
1049 static void log_physical_state(struct hfi1_pportdata *ppd, u32 state);
1050 static int wait_physical_linkstate(struct hfi1_pportdata *ppd, u32 state,
1052 static int wait_phys_link_out_of_offline(struct hfi1_pportdata *ppd,
1061 static void clear_full_mgmt_pkey(struct hfi1_pportdata *ppd);
1064 static void update_xmit_counters(struct hfi1_pportdata *ppd, u16 link_width);
1476 struct hfi1_pportdata *ppd = context; in port_access_u32_csr() local
1480 return read_write_csr(ppd->dd, entry->csr, mode, data); in port_access_u32_csr()
1486 struct hfi1_pportdata *ppd = context; in port_access_u64_csr() local
1498 val = read_write_csr(ppd->dd, csr, mode, data); in port_access_u64_csr()
1526 struct hfi1_pportdata *ppd = context; in access_sw_link_dn_cnt() local
1530 return read_write_sw(ppd->dd, &ppd->link_downed, mode, data); in access_sw_link_dn_cnt()
1536 struct hfi1_pportdata *ppd = context; in access_sw_link_up_cnt() local
1540 return read_write_sw(ppd->dd, &ppd->link_up, mode, data); in access_sw_link_up_cnt()
1547 struct hfi1_pportdata *ppd = (struct hfi1_pportdata *)context; in access_sw_unknown_frame_cnt() local
1551 return read_write_sw(ppd->dd, &ppd->unknown_frame_count, mode, data); in access_sw_unknown_frame_cnt()
1557 struct hfi1_pportdata *ppd = (struct hfi1_pportdata *)context; in access_sw_xmit_discards() local
1562 counter = &ppd->port_xmit_discards; in access_sw_xmit_discards()
1564 counter = &ppd->port_xmit_discards_vl[vl]; in access_sw_xmit_discards()
1568 return read_write_sw(ppd->dd, counter, mode, data); in access_sw_xmit_discards()
1575 struct hfi1_pportdata *ppd = context; in access_xmit_constraint_errs() local
1580 return read_write_sw(ppd->dd, &ppd->port_xmit_constraint_errors, in access_xmit_constraint_errs()
1587 struct hfi1_pportdata *ppd = context; in access_rcv_constraint_errs() local
1592 return read_write_sw(ppd->dd, &ppd->port_rcv_constraint_errors, in access_rcv_constraint_errs()
4054 struct hfi1_pportdata *ppd = (struct hfi1_pportdata *)context; \
4055 return read_write_cpu(ppd->dd, &ppd->ibport_data.rvp.z_ ##cntr, \
4056 ppd->ibport_data.rvp.cntr, vl, \
4068 struct hfi1_pportdata *ppd = (struct hfi1_pportdata *)context; \
4073 return read_write_sw(ppd->dd, &ppd->ibport_data.rvp.n_ ##cntr, \
5551 struct hfi1_pportdata *ppd = dd->pport; in update_rcverr_timer() local
5555 ppd->port_error_action & OPA_PI_MASK_EX_BUFFER_OVERRUN) { in update_rcverr_timer()
5558 ppd, OPA_LINKDOWN_REASON_EXCESSIVE_BUFFER_OVERRUN, 0, in update_rcverr_timer()
5560 queue_work(ppd->link_wq, &ppd->link_bounce_work); in update_rcverr_timer()
5655 static inline void __count_port_discards(struct hfi1_pportdata *ppd) in __count_port_discards() argument
5657 incr_cntr64(&ppd->port_xmit_discards); in __count_port_discards()
5677 struct hfi1_pportdata *ppd = dd->pport; in handle_send_egress_err_info() local
5717 __count_port_discards(ppd); in handle_send_egress_err_info()
5719 incr_cntr64(&ppd->port_xmit_discards_vl[vl]); in handle_send_egress_err_info()
5721 incr_cntr64(&ppd->port_xmit_discards_vl in handle_send_egress_err_info()
6073 struct hfi1_pportdata *ppd = dd->pport; in handle_qsfp_int() local
6078 if (!qsfp_mod_present(ppd)) { in handle_qsfp_int()
6082 ppd->driver_link_ready = 0; in handle_qsfp_int()
6088 spin_lock_irqsave(&ppd->qsfp_info.qsfp_lock, flags); in handle_qsfp_int()
6093 ppd->qsfp_info.cache_valid = 0; in handle_qsfp_int()
6094 ppd->qsfp_info.reset_needed = 0; in handle_qsfp_int()
6095 ppd->qsfp_info.limiting_active = 0; in handle_qsfp_int()
6096 spin_unlock_irqrestore(&ppd->qsfp_info.qsfp_lock, in handle_qsfp_int()
6102 if ((ppd->offline_disabled_reason > in handle_qsfp_int()
6105 (ppd->offline_disabled_reason == in handle_qsfp_int()
6107 ppd->offline_disabled_reason = in handle_qsfp_int()
6111 if (ppd->host_link_state == HLS_DN_POLL) { in handle_qsfp_int()
6118 queue_work(ppd->link_wq, &ppd->link_down_work); in handle_qsfp_int()
6124 spin_lock_irqsave(&ppd->qsfp_info.qsfp_lock, flags); in handle_qsfp_int()
6125 ppd->qsfp_info.cache_valid = 0; in handle_qsfp_int()
6126 ppd->qsfp_info.cache_refresh_required = 1; in handle_qsfp_int()
6127 spin_unlock_irqrestore(&ppd->qsfp_info.qsfp_lock, in handle_qsfp_int()
6138 ppd->offline_disabled_reason = in handle_qsfp_int()
6146 spin_lock_irqsave(&ppd->qsfp_info.qsfp_lock, flags); in handle_qsfp_int()
6147 ppd->qsfp_info.check_interrupt_flags = 1; in handle_qsfp_int()
6148 spin_unlock_irqrestore(&ppd->qsfp_info.qsfp_lock, flags); in handle_qsfp_int()
6152 if (qsfp_mod_present(ppd)) in handle_qsfp_int()
6153 queue_work(ppd->link_wq, &ppd->qsfp_info.qsfp_work); in handle_qsfp_int()
6217 struct hfi1_pportdata *ppd = dd->pport; in acquire_lcb_access() local
6227 mutex_lock(&ppd->hls_lock); in acquire_lcb_access()
6229 while (!mutex_trylock(&ppd->hls_lock)) in acquire_lcb_access()
6234 if (ppd->host_link_state & HLS_DOWN) { in acquire_lcb_access()
6236 __func__, link_state_name(ppd->host_link_state)); in acquire_lcb_access()
6253 mutex_unlock(&ppd->hls_lock); in acquire_lcb_access()
6334 static void handle_8051_request(struct hfi1_pportdata *ppd) in handle_8051_request() argument
6336 struct hfi1_devdata *dd = ppd->dd; in handle_8051_request()
6465 static void set_linkup_defaults(struct hfi1_pportdata *ppd) in set_linkup_defaults() argument
6467 ppd->sm_trap_qp = 0x0; in set_linkup_defaults()
6468 ppd->sa_qp = 0x1; in set_linkup_defaults()
6657 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, in handle_sma_message() local
6659 struct hfi1_devdata *dd = ppd->dd; in handle_sma_message()
6682 if (ppd->host_link_state & (HLS_UP_INIT | HLS_UP_ARMED)) in handle_sma_message()
6683 ppd->neighbor_normal = 1; in handle_sma_message()
6692 if (ppd->host_link_state == HLS_UP_ARMED && in handle_sma_message()
6693 ppd->is_active_optimize_enabled) { in handle_sma_message()
6694 ppd->neighbor_normal = 1; in handle_sma_message()
6695 ret = set_link_state(ppd, HLS_UP_ACTIVE); in handle_sma_message()
6737 void start_freeze_handling(struct hfi1_pportdata *ppd, int flags) in start_freeze_handling() argument
6739 struct hfi1_devdata *dd = ppd->dd; in start_freeze_handling()
6763 hfi1_set_uevent_bits(ppd, _HFI1_EVENT_FROZEN_BIT); in start_freeze_handling()
6771 queue_work(ppd->hfi1_wq, &ppd->freeze_work); in start_freeze_handling()
6870 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, in handle_freeze() local
6872 struct hfi1_devdata *dd = ppd->dd; in handle_freeze()
6943 static void update_xmit_counters(struct hfi1_pportdata *ppd, u16 link_width) in update_xmit_counters() argument
6950 link_speed = get_link_speed(ppd->link_speed_active); in update_xmit_counters()
6957 get_xmit_wait_counters(ppd, tx_width, link_speed, i); in update_xmit_counters()
6967 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, in handle_link_up() local
6969 struct hfi1_devdata *dd = ppd->dd; in handle_link_up()
6971 set_link_state(ppd, HLS_UP_INIT); in handle_link_up()
6983 set_linkup_defaults(ppd); in handle_link_up()
6995 if ((ppd->link_speed_active & ppd->link_speed_enabled) == 0) { in handle_link_up()
6999 ppd->link_speed_active, ppd->link_speed_enabled); in handle_link_up()
7000 set_link_down_reason(ppd, OPA_LINKDOWN_REASON_SPEED_POLICY, 0, in handle_link_up()
7002 set_link_state(ppd, HLS_DN_OFFLINE); in handle_link_up()
7003 start_link(ppd); in handle_link_up()
7011 static void reset_neighbor_info(struct hfi1_pportdata *ppd) in reset_neighbor_info() argument
7013 ppd->neighbor_guid = 0; in reset_neighbor_info()
7014 ppd->neighbor_port_number = 0; in reset_neighbor_info()
7015 ppd->neighbor_type = 0; in reset_neighbor_info()
7016 ppd->neighbor_fm_security = 0; in reset_neighbor_info()
7097 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, in handle_link_down() local
7102 if ((ppd->host_link_state & in handle_link_down()
7104 ppd->port_type == PORT_TYPE_FIXED) in handle_link_down()
7105 ppd->offline_disabled_reason = in handle_link_down()
7109 was_up = !!(ppd->host_link_state & HLS_UP); in handle_link_down()
7110 set_link_state(ppd, HLS_DN_OFFLINE); in handle_link_down()
7111 xchg(&ppd->is_link_down_queued, 0); in handle_link_down()
7116 read_link_down_reason(ppd->dd, &link_down_reason); in handle_link_down()
7120 dd_dev_info(ppd->dd, "%sUnexpected link down\n", in handle_link_down()
7128 read_planned_down_reason_code(ppd->dd, &neigh_reason); in handle_link_down()
7129 dd_dev_info(ppd->dd, in handle_link_down()
7135 dd_dev_info(ppd->dd, in handle_link_down()
7140 dd_dev_info(ppd->dd, "%sUnknown reason 0x%x\n", in handle_link_down()
7156 set_link_down_reason(ppd, lcl_reason, neigh_reason, 0); in handle_link_down()
7159 if (was_up && ppd->local_link_down_reason.sma == 0 && in handle_link_down()
7160 ppd->neigh_link_down_reason.sma == 0) { in handle_link_down()
7161 ppd->local_link_down_reason.sma = in handle_link_down()
7162 ppd->local_link_down_reason.latest; in handle_link_down()
7163 ppd->neigh_link_down_reason.sma = in handle_link_down()
7164 ppd->neigh_link_down_reason.latest; in handle_link_down()
7167 reset_neighbor_info(ppd); in handle_link_down()
7170 clear_rcvctrl(ppd->dd, RCV_CTRL_RCV_PORT_ENABLE_SMASK); in handle_link_down()
7176 if (ppd->port_type == PORT_TYPE_QSFP && !qsfp_mod_present(ppd)) in handle_link_down()
7177 dc_shutdown(ppd->dd); in handle_link_down()
7179 start_link(ppd); in handle_link_down()
7184 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, in handle_link_bounce() local
7190 if (ppd->host_link_state & HLS_UP) { in handle_link_bounce()
7191 set_link_state(ppd, HLS_DN_OFFLINE); in handle_link_bounce()
7192 start_link(ppd); in handle_link_bounce()
7194 dd_dev_info(ppd->dd, "%s: link not up (%s), nothing to do\n", in handle_link_bounce()
7195 __func__, link_state_name(ppd->host_link_state)); in handle_link_bounce()
7253 static void clear_full_mgmt_pkey(struct hfi1_pportdata *ppd) in clear_full_mgmt_pkey() argument
7255 if (ppd->pkeys[2] != 0) { in clear_full_mgmt_pkey()
7256 ppd->pkeys[2] = 0; in clear_full_mgmt_pkey()
7257 (void)hfi1_set_ib_cfg(ppd, HFI1_IB_CFG_PKEYS, 0); in clear_full_mgmt_pkey()
7258 hfi1_event_pkey_change(ppd->dd, ppd->port); in clear_full_mgmt_pkey()
7396 void get_linkup_link_widths(struct hfi1_pportdata *ppd) in get_linkup_link_widths() argument
7401 get_linkup_widths(ppd->dd, &tx_width, &rx_width); in get_linkup_link_widths()
7404 ppd->link_width_active = tx_width; in get_linkup_link_widths()
7406 ppd->link_width_downgrade_tx_active = ppd->link_width_active; in get_linkup_link_widths()
7407 ppd->link_width_downgrade_rx_active = ppd->link_width_active; in get_linkup_link_widths()
7409 ppd->link_width_downgrade_enabled = ppd->link_width_downgrade_supported; in get_linkup_link_widths()
7411 ppd->current_egress_rate = active_egress_rate(ppd); in get_linkup_link_widths()
7421 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, in handle_verify_cap() local
7423 struct hfi1_devdata *dd = ppd->dd; in handle_verify_cap()
7440 set_link_state(ppd, HLS_VERIFY_CAP); in handle_verify_cap()
7485 crc_mask = ppd->port_crc_mode_enabled & partner_supported_crc; in handle_verify_cap()
7511 ppd->link_speed_active = 0; /* invalid value */ in handle_verify_cap()
7516 ppd->link_speed_active = OPA_LINK_SPEED_12_5G; in handle_verify_cap()
7519 ppd->link_speed_active = OPA_LINK_SPEED_25G; in handle_verify_cap()
7524 u8 rate = remote_tx_rate & ppd->local_tx_rate; in handle_verify_cap()
7527 ppd->link_speed_active = OPA_LINK_SPEED_25G; in handle_verify_cap()
7529 ppd->link_speed_active = OPA_LINK_SPEED_12_5G; in handle_verify_cap()
7531 if (ppd->link_speed_active == 0) { in handle_verify_cap()
7534 ppd->link_speed_active = OPA_LINK_SPEED_25G; in handle_verify_cap()
7544 ppd->port_ltp_crc_mode = cap_to_port_ltp(link_crc_mask) << 8; in handle_verify_cap()
7546 ppd->port_ltp_crc_mode |= in handle_verify_cap()
7547 cap_to_port_ltp(ppd->port_crc_mode_enabled) << 4; in handle_verify_cap()
7549 ppd->port_ltp_crc_mode |= lcb_to_port_ltp(crc_val); in handle_verify_cap()
7579 set_link_state(ppd, HLS_GOING_UP); in handle_verify_cap()
7597 bool apply_link_downgrade_policy(struct hfi1_pportdata *ppd, in apply_link_downgrade_policy() argument
7609 mutex_lock(&ppd->hls_lock); in apply_link_downgrade_policy()
7611 if (ppd->host_link_state & HLS_DOWN) { in apply_link_downgrade_policy()
7613 if (ppd->host_link_state & HLS_GOING_UP) { in apply_link_downgrade_policy()
7615 mutex_unlock(&ppd->hls_lock); in apply_link_downgrade_policy()
7619 dd_dev_err(ppd->dd, in apply_link_downgrade_policy()
7626 lwde = ppd->link_width_downgrade_enabled; in apply_link_downgrade_policy()
7629 get_link_widths(ppd->dd, &tx, &rx); in apply_link_downgrade_policy()
7630 ppd->link_width_downgrade_tx_active = tx; in apply_link_downgrade_policy()
7631 ppd->link_width_downgrade_rx_active = rx; in apply_link_downgrade_policy()
7634 if (ppd->link_width_downgrade_tx_active == 0 || in apply_link_downgrade_policy()
7635 ppd->link_width_downgrade_rx_active == 0) { in apply_link_downgrade_policy()
7637 dd_dev_err(ppd->dd, "Link downgrade is really a link down, ignoring\n"); in apply_link_downgrade_policy()
7643 if ((ppd->link_width_active != in apply_link_downgrade_policy()
7644 ppd->link_width_downgrade_tx_active) || in apply_link_downgrade_policy()
7645 (ppd->link_width_active != in apply_link_downgrade_policy()
7646 ppd->link_width_downgrade_rx_active)) { in apply_link_downgrade_policy()
7647 dd_dev_err(ppd->dd, in apply_link_downgrade_policy()
7649 dd_dev_err(ppd->dd, in apply_link_downgrade_policy()
7651 ppd->link_width_active, in apply_link_downgrade_policy()
7652 ppd->link_width_downgrade_tx_active, in apply_link_downgrade_policy()
7653 ppd->link_width_downgrade_rx_active); in apply_link_downgrade_policy()
7657 } else if ((lwde & ppd->link_width_downgrade_tx_active) == 0 || in apply_link_downgrade_policy()
7658 (lwde & ppd->link_width_downgrade_rx_active) == 0) { in apply_link_downgrade_policy()
7660 dd_dev_err(ppd->dd, in apply_link_downgrade_policy()
7662 dd_dev_err(ppd->dd, in apply_link_downgrade_policy()
7664 lwde, ppd->link_width_downgrade_tx_active, in apply_link_downgrade_policy()
7665 ppd->link_width_downgrade_rx_active); in apply_link_downgrade_policy()
7671 mutex_unlock(&ppd->hls_lock); in apply_link_downgrade_policy()
7674 set_link_down_reason(ppd, OPA_LINKDOWN_REASON_WIDTH_POLICY, 0, in apply_link_downgrade_policy()
7676 set_link_state(ppd, HLS_DN_OFFLINE); in apply_link_downgrade_policy()
7677 start_link(ppd); in apply_link_downgrade_policy()
7690 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, in handle_link_downgrade() local
7693 dd_dev_info(ppd->dd, "8051: Link width downgrade\n"); in handle_link_downgrade()
7694 if (apply_link_downgrade_policy(ppd, true)) in handle_link_downgrade()
7695 update_xmit_counters(ppd, ppd->link_width_downgrade_tx_active); in handle_link_downgrade()
7730 struct hfi1_pportdata *ppd = dd->pport; in handle_8051_interrupt() local
7756 if (ppd->host_link_state in handle_8051_interrupt()
7769 ppd->unknown_frame_count++; in handle_8051_interrupt()
7795 queue_work(ppd->link_wq, &ppd->sma_message_work); in handle_8051_interrupt()
7800 queue_work(ppd->link_wq, &ppd->link_up_work); in handle_8051_interrupt()
7804 handle_8051_request(ppd); in handle_8051_interrupt()
7808 queue_work(ppd->link_wq, &ppd->link_vc_work); in handle_8051_interrupt()
7823 queue_work(ppd->link_wq, &ppd->link_downgrade_work); in handle_8051_interrupt()
7861 if ((ppd->host_link_state & in handle_8051_interrupt()
7863 ppd->link_enabled == 0) { in handle_8051_interrupt()
7865 __func__, ppd->host_link_state, in handle_8051_interrupt()
7866 ppd->link_enabled); in handle_8051_interrupt()
7868 if (xchg(&ppd->is_link_down_queued, 1) == 1) in handle_8051_interrupt()
7873 queue_work(ppd->link_wq, &ppd->link_down_work); in handle_8051_interrupt()
7928 struct hfi1_pportdata *ppd = dd->pport; in handle_dcc_err() local
7943 struct hfi1_pportdata *ppd = dd->pport; in handle_dcc_err() local
7945 if (ppd->link_downed < (u32)UINT_MAX) in handle_dcc_err()
7946 ppd->link_downed++; in handle_dcc_err()
7971 if (ppd->port_error_action & in handle_dcc_err()
7990 do_bounce = ppd->port_error_action & in handle_dcc_err()
8042 do_bounce = ppd->port_error_action & in handle_dcc_err()
8080 set_link_down_reason(ppd, lcl_reason, 0, lcl_reason); in handle_dcc_err()
8081 queue_work(ppd->link_wq, &ppd->link_bounce_work); in handle_dcc_err()
8643 struct hfi1_pportdata *ppd = dd->pport; in read_lcb_csr() local
8646 if (ppd->host_link_state & HLS_UP) in read_lcb_csr()
8649 if (ppd->host_link_state & (HLS_GOING_UP | HLS_GOING_OFFLINE)) { in read_lcb_csr()
8692 struct hfi1_pportdata *ppd = dd->pport; in write_lcb_csr() local
8695 if (ppd->host_link_state & HLS_UP) in write_lcb_csr()
8698 if (ppd->host_link_state & (HLS_GOING_UP | HLS_GOING_OFFLINE)) in write_lcb_csr()
9341 static int set_local_link_attributes(struct hfi1_pportdata *ppd) in set_local_link_attributes() argument
9343 struct hfi1_devdata *dd = ppd->dd; in set_local_link_attributes()
9354 &rx_polarity_inversion, &ppd->local_tx_rate); in set_local_link_attributes()
9360 if (ppd->link_speed_enabled & OPA_LINK_SPEED_25G) in set_local_link_attributes()
9361 ppd->local_tx_rate = 1; in set_local_link_attributes()
9363 ppd->local_tx_rate = 0; in set_local_link_attributes()
9366 ppd->local_tx_rate = 0; in set_local_link_attributes()
9367 if (ppd->link_speed_enabled & OPA_LINK_SPEED_25G) in set_local_link_attributes()
9368 ppd->local_tx_rate |= 2; in set_local_link_attributes()
9369 if (ppd->link_speed_enabled & OPA_LINK_SPEED_12_5G) in set_local_link_attributes()
9370 ppd->local_tx_rate |= 1; in set_local_link_attributes()
9375 rx_polarity_inversion, ppd->local_tx_rate); in set_local_link_attributes()
9398 ppd->port_crc_mode_enabled); in set_local_link_attributes()
9419 ppd->link_width_enabled)); in set_local_link_attributes()
9440 int start_link(struct hfi1_pportdata *ppd) in start_link() argument
9446 tune_serdes(ppd); in start_link()
9448 if (!ppd->driver_link_ready) { in start_link()
9449 dd_dev_info(ppd->dd, in start_link()
9460 clear_full_mgmt_pkey(ppd); in start_link()
9462 return set_link_state(ppd, HLS_DN_POLL); in start_link()
9465 static void wait_for_qsfp_init(struct hfi1_pportdata *ppd) in wait_for_qsfp_init() argument
9467 struct hfi1_devdata *dd = ppd->dd; in wait_for_qsfp_init()
9499 static void set_qsfp_int_n(struct hfi1_pportdata *ppd, u8 enable) in set_qsfp_int_n() argument
9501 struct hfi1_devdata *dd = ppd->dd; in set_qsfp_int_n()
9519 int reset_qsfp(struct hfi1_pportdata *ppd) in reset_qsfp() argument
9521 struct hfi1_devdata *dd = ppd->dd; in reset_qsfp()
9525 set_qsfp_int_n(ppd, 0); in reset_qsfp()
9542 wait_for_qsfp_init(ppd); in reset_qsfp()
9548 set_qsfp_int_n(ppd, 1); in reset_qsfp()
9555 return set_qsfp_tx(ppd, 0); in reset_qsfp()
9558 static int handle_qsfp_error_conditions(struct hfi1_pportdata *ppd, in handle_qsfp_error_conditions() argument
9561 struct hfi1_devdata *dd = ppd->dd; in handle_qsfp_error_conditions()
9576 if (ppd->host_link_state & HLS_DOWN) in handle_qsfp_error_conditions()
9661 struct hfi1_pportdata *ppd; in qsfp_event() local
9665 ppd = qd->ppd; in qsfp_event()
9666 dd = ppd->dd; in qsfp_event()
9669 if (!qsfp_mod_present(ppd)) in qsfp_event()
9672 if (ppd->host_link_state == HLS_DN_DISABLE) { in qsfp_event()
9673 dd_dev_info(ppd->dd, in qsfp_event()
9686 set_qsfp_int_n(ppd, 0); in qsfp_event()
9688 wait_for_qsfp_init(ppd); in qsfp_event()
9694 set_qsfp_int_n(ppd, 1); in qsfp_event()
9696 start_link(ppd); in qsfp_event()
9702 if (one_qsfp_read(ppd, dd->hfi1_id, 6, in qsfp_event()
9711 ppd, qsfp_interrupt_status); in qsfp_event()
9712 spin_lock_irqsave(&ppd->qsfp_info.qsfp_lock, flags); in qsfp_event()
9713 ppd->qsfp_info.check_interrupt_flags = 0; in qsfp_event()
9714 spin_unlock_irqrestore(&ppd->qsfp_info.qsfp_lock, in qsfp_event()
9722 struct hfi1_pportdata *ppd = dd->pport; in init_qsfp_int() local
9732 set_qsfp_int_n(ppd, 0); in init_qsfp_int()
9735 if (qsfp_mod_present(ppd)) in init_qsfp_int()
9773 static int test_qsfp_read(struct hfi1_pportdata *ppd) in test_qsfp_read() argument
9782 if (ppd->port_type != PORT_TYPE_QSFP || !qsfp_mod_present(ppd)) in test_qsfp_read()
9786 ret = one_qsfp_read(ppd, ppd->dd->hfi1_id, 2, &status, 1); in test_qsfp_read()
9808 static void try_start_link(struct hfi1_pportdata *ppd) in try_start_link() argument
9810 if (test_qsfp_read(ppd)) { in try_start_link()
9812 if (ppd->qsfp_retry_count >= MAX_QSFP_RETRIES) { in try_start_link()
9813 dd_dev_err(ppd->dd, "QSFP not responding, giving up\n"); in try_start_link()
9816 dd_dev_info(ppd->dd, in try_start_link()
9818 (int)ppd->qsfp_retry_count); in try_start_link()
9819 ppd->qsfp_retry_count++; in try_start_link()
9820 queue_delayed_work(ppd->link_wq, &ppd->start_link_work, in try_start_link()
9824 ppd->qsfp_retry_count = 0; in try_start_link()
9826 start_link(ppd); in try_start_link()
9834 struct hfi1_pportdata *ppd = container_of(work, struct hfi1_pportdata, in handle_start_link() local
9836 try_start_link(ppd); in handle_start_link()
9839 int bringup_serdes(struct hfi1_pportdata *ppd) in bringup_serdes() argument
9841 struct hfi1_devdata *dd = ppd->dd; in bringup_serdes()
9848 guid = ppd->guids[HFI1_PORT_GUID_INDEX]; in bringup_serdes()
9851 guid = dd->base_guid + ppd->port - 1; in bringup_serdes()
9852 ppd->guids[HFI1_PORT_GUID_INDEX] = guid; in bringup_serdes()
9856 ppd->linkinit_reason = OPA_LINKINIT_REASON_LINKUP; in bringup_serdes()
9867 get_port_type(ppd); in bringup_serdes()
9868 if (ppd->port_type == PORT_TYPE_QSFP) { in bringup_serdes()
9869 set_qsfp_int_n(ppd, 0); in bringup_serdes()
9870 wait_for_qsfp_init(ppd); in bringup_serdes()
9871 set_qsfp_int_n(ppd, 1); in bringup_serdes()
9874 try_start_link(ppd); in bringup_serdes()
9878 void hfi1_quiet_serdes(struct hfi1_pportdata *ppd) in hfi1_quiet_serdes() argument
9880 struct hfi1_devdata *dd = ppd->dd; in hfi1_quiet_serdes()
9889 ppd->driver_link_ready = 0; in hfi1_quiet_serdes()
9890 ppd->link_enabled = 0; in hfi1_quiet_serdes()
9892 ppd->qsfp_retry_count = MAX_QSFP_RETRIES; /* prevent more retries */ in hfi1_quiet_serdes()
9893 flush_delayed_work(&ppd->start_link_work); in hfi1_quiet_serdes()
9894 cancel_delayed_work_sync(&ppd->start_link_work); in hfi1_quiet_serdes()
9896 ppd->offline_disabled_reason = in hfi1_quiet_serdes()
9898 set_link_down_reason(ppd, OPA_LINKDOWN_REASON_REBOOT, 0, in hfi1_quiet_serdes()
9900 set_link_state(ppd, HLS_DN_OFFLINE); in hfi1_quiet_serdes()
9904 cancel_work_sync(&ppd->freeze_work); in hfi1_quiet_serdes()
9909 struct hfi1_pportdata *ppd; in init_cpu_counters() local
9912 ppd = (struct hfi1_pportdata *)(dd + 1); in init_cpu_counters()
9913 for (i = 0; i < dd->num_pports; i++, ppd++) { in init_cpu_counters()
9914 ppd->ibport_data.rvp.rc_acks = NULL; in init_cpu_counters()
9915 ppd->ibport_data.rvp.rc_qacks = NULL; in init_cpu_counters()
9916 ppd->ibport_data.rvp.rc_acks = alloc_percpu(u64); in init_cpu_counters()
9917 ppd->ibport_data.rvp.rc_qacks = alloc_percpu(u64); in init_cpu_counters()
9918 ppd->ibport_data.rvp.rc_delayed_comp = alloc_percpu(u64); in init_cpu_counters()
9919 if (!ppd->ibport_data.rvp.rc_acks || in init_cpu_counters()
9920 !ppd->ibport_data.rvp.rc_delayed_comp || in init_cpu_counters()
9921 !ppd->ibport_data.rvp.rc_qacks) in init_cpu_counters()
10016 int hfi1_get_ib_cfg(struct hfi1_pportdata *ppd, int which) in hfi1_get_ib_cfg() argument
10018 struct hfi1_devdata *dd = ppd->dd; in hfi1_get_ib_cfg()
10023 val = ppd->link_width_enabled; in hfi1_get_ib_cfg()
10026 val = ppd->link_width_active; in hfi1_get_ib_cfg()
10029 val = ppd->link_speed_enabled; in hfi1_get_ib_cfg()
10032 val = ppd->link_speed_active; in hfi1_get_ib_cfg()
10041 val = ppd->actual_vls_operational; in hfi1_get_ib_cfg()
10050 val = ppd->overrun_threshold; in hfi1_get_ib_cfg()
10053 val = ppd->phy_error_threshold; in hfi1_get_ib_cfg()
10115 static void set_send_length(struct hfi1_pportdata *ppd) in set_send_length() argument
10117 struct hfi1_devdata *dd = ppd->dd; in set_send_length()
10126 for (i = 0; i < ppd->vls_supported; i++) { in set_send_length()
10142 for (i = 0; i < ppd->vls_supported; i++) { in set_send_length()
10161 len1 = read_csr(ppd->dd, DCC_CFG_PORT_CONFIG); in set_send_length()
10165 write_csr(ppd->dd, DCC_CFG_PORT_CONFIG, len1); in set_send_length()
10168 static void set_lidlmc(struct hfi1_pportdata *ppd) in set_lidlmc() argument
10172 struct hfi1_devdata *dd = ppd->dd; in set_lidlmc()
10173 u32 mask = ~((1U << ppd->lmc) - 1); in set_lidlmc()
10174 u64 c1 = read_csr(ppd->dd, DCC_CFG_PORT_CONFIG1); in set_lidlmc()
10181 lid = (ppd->lid >= be16_to_cpu(IB_MULTICAST_LID_BASE)) ? 0 : ppd->lid; in set_lidlmc()
10188 write_csr(ppd->dd, DCC_CFG_PORT_CONFIG1, c1); in set_lidlmc()
10265 static const char *state_complete_reason_code_string(struct hfi1_pportdata *ppd, in state_complete_reason_code_string() argument
10279 static void decode_state_complete(struct hfi1_pportdata *ppd, u32 frame, in decode_state_complete() argument
10282 struct hfi1_devdata *dd = ppd->dd; in decode_state_complete()
10308 reason, state_complete_reason_code_string(ppd, reason)); in decode_state_complete()
10317 static void check_lni_states(struct hfi1_pportdata *ppd) in check_lni_states() argument
10322 read_last_local_state(ppd->dd, &last_local_state); in check_lni_states()
10323 read_last_remote_state(ppd->dd, &last_remote_state); in check_lni_states()
10333 decode_state_complete(ppd, last_local_state, "transmitted"); in check_lni_states()
10334 decode_state_complete(ppd, last_remote_state, "received"); in check_lni_states()
10360 static void force_logical_link_state_down(struct hfi1_pportdata *ppd) in force_logical_link_state_down() argument
10362 struct hfi1_devdata *dd = ppd->dd; in force_logical_link_state_down()
10391 dd_dev_info(ppd->dd, "logical state forced to LINK_DOWN\n"); in force_logical_link_state_down()
10402 static int goto_offline(struct hfi1_pportdata *ppd, u8 rem_reason) in goto_offline() argument
10404 struct hfi1_devdata *dd = ppd->dd; in goto_offline()
10411 previous_state = ppd->host_link_state; in goto_offline()
10412 ppd->host_link_state = HLS_GOING_OFFLINE; in goto_offline()
10423 if (ppd->offline_disabled_reason == in goto_offline()
10425 ppd->offline_disabled_reason = in goto_offline()
10428 offline_state_ret = wait_phys_link_offline_substates(ppd, 10000); in goto_offline()
10433 if (ppd->port_type == PORT_TYPE_QSFP && in goto_offline()
10434 ppd->qsfp_info.limiting_active && in goto_offline()
10435 qsfp_mod_present(ppd)) { in goto_offline()
10440 set_qsfp_tx(ppd, 0); in goto_offline()
10454 ret = wait_physical_linkstate(ppd, PLS_OFFLINE, 30000); in goto_offline()
10467 ret = wait_logical_linkstate(ppd, IB_PORT_DOWN, 1000); in goto_offline()
10469 force_logical_link_state_down(ppd); in goto_offline()
10471 ppd->host_link_state = HLS_LINK_COOLDOWN; /* LCB access allowed */ in goto_offline()
10472 update_statusp(ppd, IB_PORT_DOWN); in goto_offline()
10488 ppd->host_link_state = HLS_DN_OFFLINE; in goto_offline()
10498 ppd->host_link_state = HLS_DN_OFFLINE; in goto_offline()
10505 check_lni_states(ppd); in goto_offline()
10508 ppd->qsfp_info.reset_needed = 0; in goto_offline()
10512 ppd->link_width_active = 0; in goto_offline()
10513 ppd->link_width_downgrade_tx_active = 0; in goto_offline()
10514 ppd->link_width_downgrade_rx_active = 0; in goto_offline()
10515 ppd->current_egress_rate = 0; in goto_offline()
10543 static const char *link_state_reason_name(struct hfi1_pportdata *ppd, u32 state) in link_state_reason_name() argument
10546 switch (ppd->linkinit_reason) { in link_state_reason_name()
10569 u32 driver_pstate(struct hfi1_pportdata *ppd) in driver_pstate() argument
10571 switch (ppd->host_link_state) { in driver_pstate()
10592 dd_dev_err(ppd->dd, "invalid host_link_state 0x%x\n", in driver_pstate()
10593 ppd->host_link_state); in driver_pstate()
10603 u32 driver_lstate(struct hfi1_pportdata *ppd) in driver_lstate() argument
10605 if (ppd->host_link_state && (ppd->host_link_state & HLS_DOWN)) in driver_lstate()
10608 switch (ppd->host_link_state & HLS_UP) { in driver_lstate()
10616 dd_dev_err(ppd->dd, "invalid host_link_state 0x%x\n", in driver_lstate()
10617 ppd->host_link_state); in driver_lstate()
10622 void set_link_down_reason(struct hfi1_pportdata *ppd, u8 lcl_reason, in set_link_down_reason() argument
10625 if (ppd->local_link_down_reason.latest == 0 && in set_link_down_reason()
10626 ppd->neigh_link_down_reason.latest == 0) { in set_link_down_reason()
10627 ppd->local_link_down_reason.latest = lcl_reason; in set_link_down_reason()
10628 ppd->neigh_link_down_reason.latest = neigh_reason; in set_link_down_reason()
10629 ppd->remote_link_down_reason = rem_reason; in set_link_down_reason()
10640 static inline bool data_vls_operational(struct hfi1_pportdata *ppd) in data_vls_operational() argument
10645 if (!ppd->actual_vls_operational) in data_vls_operational()
10648 for (i = 0; i < ppd->vls_supported; i++) { in data_vls_operational()
10649 reg = read_csr(ppd->dd, SEND_CM_CREDIT_VL + (8 * i)); in data_vls_operational()
10650 if ((reg && !ppd->dd->vld[i].mtu) || in data_vls_operational()
10651 (!reg && ppd->dd->vld[i].mtu)) in data_vls_operational()
10666 int set_link_state(struct hfi1_pportdata *ppd, u32 state) in set_link_state() argument
10668 struct hfi1_devdata *dd = ppd->dd; in set_link_state()
10673 mutex_lock(&ppd->hls_lock); in set_link_state()
10680 poll_bounce = ppd->host_link_state == HLS_DN_POLL && in set_link_state()
10684 link_state_name(ppd->host_link_state), in set_link_state()
10687 link_state_reason_name(ppd, state)); in set_link_state()
10695 ppd->is_sm_config_started = 0; in set_link_state()
10701 if (ppd->host_link_state == state && !poll_bounce) in set_link_state()
10706 if (ppd->host_link_state == HLS_DN_POLL && in set_link_state()
10716 } else if (ppd->host_link_state != HLS_GOING_UP) { in set_link_state()
10725 ret = wait_physical_linkstate(ppd, PLS_LINKUP, 1000); in set_link_state()
10733 ret = wait_logical_linkstate(ppd, IB_PORT_INIT, 1000); in set_link_state()
10742 if (ppd->linkinit_reason >= OPA_LINKINIT_REASON_CLEAR) in set_link_state()
10743 ppd->linkinit_reason = in set_link_state()
10757 update_xmit_counters(ppd, ppd->link_width_active); in set_link_state()
10759 ppd->host_link_state = HLS_UP_INIT; in set_link_state()
10760 update_statusp(ppd, IB_PORT_INIT); in set_link_state()
10763 if (ppd->host_link_state != HLS_UP_INIT) in set_link_state()
10766 if (!data_vls_operational(ppd)) { in set_link_state()
10775 ret = wait_logical_linkstate(ppd, IB_PORT_ARMED, 1000); in set_link_state()
10782 ppd->host_link_state = HLS_UP_ARMED; in set_link_state()
10783 update_statusp(ppd, IB_PORT_ARMED); in set_link_state()
10790 ppd->neighbor_normal = 1; in set_link_state()
10793 if (ppd->host_link_state != HLS_UP_ARMED) in set_link_state()
10797 ret = wait_logical_linkstate(ppd, IB_PORT_ACTIVE, 1000); in set_link_state()
10805 ppd->host_link_state = HLS_UP_ACTIVE; in set_link_state()
10806 update_statusp(ppd, IB_PORT_ACTIVE); in set_link_state()
10810 event.element.port_num = ppd->port; in set_link_state()
10815 if ((ppd->host_link_state == HLS_DN_DISABLE || in set_link_state()
10816 ppd->host_link_state == HLS_DN_OFFLINE) && in set_link_state()
10822 if (ppd->host_link_state != HLS_DN_OFFLINE) { in set_link_state()
10823 u8 tmp = ppd->link_enabled; in set_link_state()
10825 ret = goto_offline(ppd, ppd->remote_link_down_reason); in set_link_state()
10827 ppd->link_enabled = tmp; in set_link_state()
10830 ppd->remote_link_down_reason = 0; in set_link_state()
10832 if (ppd->driver_link_ready) in set_link_state()
10833 ppd->link_enabled = 1; in set_link_state()
10836 set_all_slowpath(ppd->dd); in set_link_state()
10837 ret = set_local_link_attributes(ppd); in set_link_state()
10841 ppd->port_error_action = 0; in set_link_state()
10849 ret1 = wait_phys_link_out_of_offline(ppd, in set_link_state()
10865 ppd->host_link_state = HLS_DN_POLL; in set_link_state()
10866 ppd->offline_disabled_reason = in set_link_state()
10873 goto_offline(ppd, 0); in set_link_state()
10875 log_physical_state(ppd, PLS_POLLING); in set_link_state()
10879 ppd->link_enabled = 0; in set_link_state()
10884 if (ppd->host_link_state != HLS_DN_OFFLINE) { in set_link_state()
10885 ret = goto_offline(ppd, ppd->remote_link_down_reason); in set_link_state()
10888 ppd->remote_link_down_reason = 0; in set_link_state()
10900 ret = wait_physical_linkstate(ppd, PLS_DISABLED, 10000); in set_link_state()
10909 ppd->host_link_state = HLS_DN_DISABLE; in set_link_state()
10912 if (ppd->host_link_state == HLS_DN_DISABLE) in set_link_state()
10916 ret = goto_offline(ppd, ppd->remote_link_down_reason); in set_link_state()
10918 ppd->remote_link_down_reason = 0; in set_link_state()
10921 if (ppd->host_link_state != HLS_DN_POLL) in set_link_state()
10923 ppd->host_link_state = HLS_VERIFY_CAP; in set_link_state()
10924 log_physical_state(ppd, PLS_CONFIGPHY_VERIFYCAP); in set_link_state()
10927 if (ppd->host_link_state != HLS_VERIFY_CAP) in set_link_state()
10938 ppd->host_link_state = HLS_GOING_UP; in set_link_state()
10954 __func__, link_state_name(ppd->host_link_state), in set_link_state()
10959 mutex_unlock(&ppd->hls_lock); in set_link_state()
10967 int hfi1_set_ib_cfg(struct hfi1_pportdata *ppd, int which, u32 val) in hfi1_set_ib_cfg() argument
10974 set_lidlmc(ppd); in hfi1_set_ib_cfg()
10984 write_csr(ppd->dd, SEND_HIGH_PRIORITY_LIMIT, reg); in hfi1_set_ib_cfg()
10992 if (ppd->vls_operational != val) { in hfi1_set_ib_cfg()
10993 ppd->vls_operational = val; in hfi1_set_ib_cfg()
10994 if (!ppd->port) in hfi1_set_ib_cfg()
11007 ppd->link_width_enabled = val & ppd->link_width_supported; in hfi1_set_ib_cfg()
11010 ppd->link_width_downgrade_enabled = in hfi1_set_ib_cfg()
11011 val & ppd->link_width_downgrade_supported; in hfi1_set_ib_cfg()
11014 ppd->link_speed_enabled = val & ppd->link_speed_supported; in hfi1_set_ib_cfg()
11021 ppd->overrun_threshold = val; in hfi1_set_ib_cfg()
11028 ppd->phy_error_threshold = val; in hfi1_set_ib_cfg()
11032 set_send_length(ppd); in hfi1_set_ib_cfg()
11037 set_partition_keys(ppd); in hfi1_set_ib_cfg()
11042 dd_dev_info(ppd->dd, in hfi1_set_ib_cfg()
11051 static void init_vl_arb_caches(struct hfi1_pportdata *ppd) in init_vl_arb_caches() argument
11071 spin_lock_init(&ppd->vl_arb_cache[i].lock); in init_vl_arb_caches()
11081 vl_arb_lock_cache(struct hfi1_pportdata *ppd, int idx) in vl_arb_lock_cache() argument
11085 spin_lock(&ppd->vl_arb_cache[idx].lock); in vl_arb_lock_cache()
11086 return &ppd->vl_arb_cache[idx]; in vl_arb_lock_cache()
11089 static inline void vl_arb_unlock_cache(struct hfi1_pportdata *ppd, int idx) in vl_arb_unlock_cache() argument
11091 spin_unlock(&ppd->vl_arb_cache[idx].lock); in vl_arb_unlock_cache()
11114 static int set_vl_weights(struct hfi1_pportdata *ppd, u32 target, in set_vl_weights() argument
11117 struct hfi1_devdata *dd = ppd->dd; in set_vl_weights()
11122 mutex_lock(&ppd->hls_lock); in set_vl_weights()
11124 if (ppd->host_link_state & HLS_UP) in set_vl_weights()
11164 mutex_unlock(&ppd->hls_lock); in set_vl_weights()
11407 int set_buffer_control(struct hfi1_pportdata *ppd, in set_buffer_control() argument
11410 struct hfi1_devdata *dd = ppd->dd; in set_buffer_control()
11580 ppd->actual_vls_operational = vl_count; in set_buffer_control()
11581 ret = sdma_map_init(dd, ppd->port - 1, vl_count ? in set_buffer_control()
11582 ppd->actual_vls_operational : in set_buffer_control()
11583 ppd->vls_operational, in set_buffer_control()
11586 ret = pio_map_init(dd, ppd->port - 1, vl_count ? in set_buffer_control()
11587 ppd->actual_vls_operational : in set_buffer_control()
11588 ppd->vls_operational, NULL); in set_buffer_control()
11600 int fm_get_table(struct hfi1_pportdata *ppd, int which, void *t) in fm_get_table() argument
11613 vlc = vl_arb_lock_cache(ppd, HI_PRIO_TABLE); in fm_get_table()
11615 vl_arb_unlock_cache(ppd, HI_PRIO_TABLE); in fm_get_table()
11623 vlc = vl_arb_lock_cache(ppd, LO_PRIO_TABLE); in fm_get_table()
11625 vl_arb_unlock_cache(ppd, LO_PRIO_TABLE); in fm_get_table()
11628 size = get_buffer_control(ppd->dd, t, NULL); in fm_get_table()
11631 size = get_sc2vlnt(ppd->dd, t); in fm_get_table()
11636 get_vlarb_preempt(ppd->dd, OPA_MAX_VLS, t); in fm_get_table()
11654 int fm_set_table(struct hfi1_pportdata *ppd, int which, void *t) in fm_set_table() argument
11661 vlc = vl_arb_lock_cache(ppd, HI_PRIO_TABLE); in fm_set_table()
11663 vl_arb_unlock_cache(ppd, HI_PRIO_TABLE); in fm_set_table()
11667 vl_arb_unlock_cache(ppd, HI_PRIO_TABLE); in fm_set_table()
11668 ret = set_vl_weights(ppd, SEND_HIGH_PRIORITY_LIST, in fm_set_table()
11672 vlc = vl_arb_lock_cache(ppd, LO_PRIO_TABLE); in fm_set_table()
11674 vl_arb_unlock_cache(ppd, LO_PRIO_TABLE); in fm_set_table()
11678 vl_arb_unlock_cache(ppd, LO_PRIO_TABLE); in fm_set_table()
11679 ret = set_vl_weights(ppd, SEND_LOW_PRIORITY_LIST, in fm_set_table()
11683 ret = set_buffer_control(ppd, t); in fm_set_table()
11686 set_sc2vlnt(ppd->dd, t); in fm_set_table()
12254 u32 hfi1_read_portcntrs(struct hfi1_pportdata *ppd, char **namep, u64 **cntrp) in hfi1_read_portcntrs() argument
12260 ret = ppd->dd->portcntrnameslen; in hfi1_read_portcntrs()
12261 *namep = ppd->dd->portcntrnames; in hfi1_read_portcntrs()
12266 ret = ppd->dd->nportcntrs * sizeof(u64); in hfi1_read_portcntrs()
12267 *cntrp = ppd->cntrs; in hfi1_read_portcntrs()
12281 val = entry->rw_cntr(entry, ppd, j, in hfi1_read_portcntrs()
12288 ppd->cntrs[entry->offset + j] = val; in hfi1_read_portcntrs()
12291 val = entry->rw_cntr(entry, ppd, in hfi1_read_portcntrs()
12295 ppd->cntrs[entry->offset] = val; in hfi1_read_portcntrs()
12305 struct hfi1_pportdata *ppd; in free_cntrs() local
12310 ppd = (struct hfi1_pportdata *)(dd + 1); in free_cntrs()
12311 for (i = 0; i < dd->num_pports; i++, ppd++) { in free_cntrs()
12312 kfree(ppd->cntrs); in free_cntrs()
12313 kfree(ppd->scntrs); in free_cntrs()
12314 free_percpu(ppd->ibport_data.rvp.rc_acks); in free_cntrs()
12315 free_percpu(ppd->ibport_data.rvp.rc_qacks); in free_cntrs()
12316 free_percpu(ppd->ibport_data.rvp.rc_delayed_comp); in free_cntrs()
12317 ppd->cntrs = NULL; in free_cntrs()
12318 ppd->scntrs = NULL; in free_cntrs()
12319 ppd->ibport_data.rvp.rc_acks = NULL; in free_cntrs()
12320 ppd->ibport_data.rvp.rc_qacks = NULL; in free_cntrs()
12321 ppd->ibport_data.rvp.rc_delayed_comp = NULL; in free_cntrs()
12450 u64 read_port_cntr(struct hfi1_pportdata *ppd, int index, int vl) in read_port_cntr() argument
12456 sval = ppd->scntrs + entry->offset; in read_port_cntr()
12461 if ((index >= C_RCV_HDR_OVF_FIRST + ppd->dd->num_rcv_contexts) && in read_port_cntr()
12467 return read_dev_port_cntr(ppd->dd, entry, sval, ppd, vl); in read_port_cntr()
12470 u64 write_port_cntr(struct hfi1_pportdata *ppd, int index, int vl, u64 data) in write_port_cntr() argument
12476 sval = ppd->scntrs + entry->offset; in write_port_cntr()
12481 if ((index >= C_RCV_HDR_OVF_FIRST + ppd->dd->num_rcv_contexts) && in write_port_cntr()
12487 return write_dev_port_cntr(ppd->dd, entry, sval, ppd, vl, data); in write_port_cntr()
12497 struct hfi1_pportdata *ppd; in do_update_synth_timer() local
12550 ppd = (struct hfi1_pportdata *)(dd + 1); in do_update_synth_timer()
12551 for (i = 0; i < dd->num_pports; i++, ppd++) { in do_update_synth_timer()
12556 read_port_cntr(ppd, j, vl); in do_update_synth_timer()
12558 read_port_cntr(ppd, j, CNTR_INVALID_VL); in do_update_synth_timer()
12600 struct hfi1_pportdata *ppd; in init_cntrs() local
12811 ppd = (struct hfi1_pportdata *)(dd + 1); in init_cntrs()
12812 for (i = 0; i < dd->num_pports; i++, ppd++) { in init_cntrs()
12813 ppd->cntrs = kcalloc(dd->nportcntrs, sizeof(u64), GFP_KERNEL); in init_cntrs()
12814 if (!ppd->cntrs) in init_cntrs()
12817 ppd->scntrs = kcalloc(dd->nportcntrs, sizeof(u64), GFP_KERNEL); in init_cntrs()
12818 if (!ppd->scntrs) in init_cntrs()
12931 static void update_statusp(struct hfi1_pportdata *ppd, u32 state) in update_statusp() argument
12941 if (ppd->statusp) { in update_statusp()
12945 *ppd->statusp &= ~(HFI1_STATUS_IB_CONF | in update_statusp()
12949 *ppd->statusp |= HFI1_STATUS_IB_CONF; in update_statusp()
12952 *ppd->statusp |= HFI1_STATUS_IB_READY; in update_statusp()
12956 dd_dev_info(ppd->dd, "logical state changed to %s (0x%x)\n", in update_statusp()
12970 static int wait_logical_linkstate(struct hfi1_pportdata *ppd, u32 state, in wait_logical_linkstate() argument
12978 new_state = chip_to_opa_lstate(ppd->dd, in wait_logical_linkstate()
12979 read_logical_state(ppd->dd)); in wait_logical_linkstate()
12983 dd_dev_err(ppd->dd, in wait_logical_linkstate()
12994 static void log_state_transition(struct hfi1_pportdata *ppd, u32 state) in log_state_transition() argument
12996 u32 ib_pstate = chip_to_opa_pstate(ppd->dd, state); in log_state_transition()
12998 dd_dev_info(ppd->dd, in log_state_transition()
13007 static void log_physical_state(struct hfi1_pportdata *ppd, u32 state) in log_physical_state() argument
13009 u32 read_state = read_physical_state(ppd->dd); in log_physical_state()
13012 log_state_transition(ppd, state); in log_physical_state()
13014 dd_dev_err(ppd->dd, in log_physical_state()
13029 static int wait_physical_linkstate(struct hfi1_pportdata *ppd, u32 state, in wait_physical_linkstate() argument
13037 read_state = read_physical_state(ppd->dd); in wait_physical_linkstate()
13041 dd_dev_err(ppd->dd, in wait_physical_linkstate()
13049 log_state_transition(ppd, state); in wait_physical_linkstate()
13062 static int wait_phys_link_offline_substates(struct hfi1_pportdata *ppd, in wait_phys_link_offline_substates() argument
13070 read_state = read_physical_state(ppd->dd); in wait_phys_link_offline_substates()
13074 dd_dev_err(ppd->dd, in wait_phys_link_offline_substates()
13082 log_state_transition(ppd, read_state); in wait_phys_link_offline_substates()
13095 static int wait_phys_link_out_of_offline(struct hfi1_pportdata *ppd, in wait_phys_link_out_of_offline() argument
13103 read_state = read_physical_state(ppd->dd); in wait_phys_link_out_of_offline()
13107 dd_dev_err(ppd->dd, in wait_phys_link_out_of_offline()
13115 log_state_transition(ppd, read_state); in wait_phys_link_out_of_offline()
13518 static void set_partition_keys(struct hfi1_pportdata *ppd) in set_partition_keys() argument
13520 struct hfi1_devdata *dd = ppd->dd; in set_partition_keys()
13526 reg |= (ppd->pkeys[i] & in set_partition_keys()
14131 struct hfi1_pportdata *ppd = &dd->pport[i]; in init_early_variables() local
14133 set_partition_keys(ppd); in init_early_variables()
14994 struct hfi1_pportdata *ppd; in hfi1_init_dd() local
15006 ppd = dd->pport; in hfi1_init_dd()
15007 for (i = 0; i < dd->num_pports; i++, ppd++) { in hfi1_init_dd()
15010 hfi1_init_pportdata(pdev, ppd, dd, 0, 1); in hfi1_init_dd()
15012 ppd->link_width_supported = in hfi1_init_dd()
15015 ppd->link_width_downgrade_supported = in hfi1_init_dd()
15016 ppd->link_width_supported; in hfi1_init_dd()
15018 ppd->link_width_enabled = OPA_LINK_WIDTH_4X; in hfi1_init_dd()
15019 ppd->link_width_downgrade_enabled = in hfi1_init_dd()
15020 ppd->link_width_downgrade_supported; in hfi1_init_dd()
15030 ppd->vls_supported = num_vls; in hfi1_init_dd()
15031 ppd->vls_operational = ppd->vls_supported; in hfi1_init_dd()
15040 ppd->overrun_threshold = 0x4; in hfi1_init_dd()
15041 ppd->phy_error_threshold = 0xf; in hfi1_init_dd()
15042 ppd->port_crc_mode_enabled = link_crc_mask; in hfi1_init_dd()
15044 ppd->port_ltp_crc_mode = cap_to_port_ltp(link_crc_mask) << 8; in hfi1_init_dd()
15046 ppd->port_ltp_crc_mode |= cap_to_port_ltp(link_crc_mask) << 4; in hfi1_init_dd()
15048 ppd->host_link_state = HLS_DN_OFFLINE; in hfi1_init_dd()
15049 init_vl_arb_caches(ppd); in hfi1_init_dd()
15104 ppd = dd->pport; in hfi1_init_dd()
15106 ppd->link_width_supported = in hfi1_init_dd()
15107 ppd->link_width_enabled = in hfi1_init_dd()
15108 ppd->link_width_downgrade_supported = in hfi1_init_dd()
15109 ppd->link_width_downgrade_enabled = in hfi1_init_dd()
15117 ppd->vls_supported = sdma_engines; in hfi1_init_dd()
15118 ppd->vls_operational = ppd->vls_supported; in hfi1_init_dd()
15320 static u16 delay_cycles(struct hfi1_pportdata *ppd, u32 desired_egress_rate, in delay_cycles() argument
15324 u32 current_egress_rate = ppd->current_egress_rate; in delay_cycles()
15354 u64 create_pbc(struct hfi1_pportdata *ppd, u64 flags, int srate_mbs, u32 vl, in create_pbc() argument
15360 delay = delay_cycles(ppd, srate_mbs, dw_len); in create_pbc()
15463 struct hfi1_pportdata *ppd = &dd->pport[0]; in handle_temp_err() local
15472 start_freeze_handling(ppd, FREEZE_SELF | FREEZE_ABORT); in handle_temp_err()
15484 ppd->driver_link_ready = 0; in handle_temp_err()
15485 ppd->link_enabled = 0; in handle_temp_err()