Lines Matching refs:dev

70 int mlx5_query_board_id(struct mlx5_core_dev *dev)  in mlx5_query_board_id()  argument
82 err = mlx5_cmd_exec_inout(dev, query_adapter, in, out); in mlx5_query_board_id()
86 memcpy(dev->board_id, in mlx5_query_board_id()
121 static int mlx5_get_pcam_reg(struct mlx5_core_dev *dev) in mlx5_get_pcam_reg() argument
123 return mlx5_query_pcam_reg(dev, dev->caps.pcam, in mlx5_get_pcam_reg()
128 static int mlx5_get_mcam_access_reg_group(struct mlx5_core_dev *dev, in mlx5_get_mcam_access_reg_group() argument
131 return mlx5_query_mcam_reg(dev, dev->caps.mcam[group], in mlx5_get_mcam_access_reg_group()
135 static int mlx5_get_qcam_reg(struct mlx5_core_dev *dev) in mlx5_get_qcam_reg() argument
137 return mlx5_query_qcam_reg(dev, dev->caps.qcam, in mlx5_get_qcam_reg()
142 int mlx5_query_hca_caps(struct mlx5_core_dev *dev) in mlx5_query_hca_caps() argument
146 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_GENERAL, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
150 if (MLX5_CAP_GEN(dev, port_selection_cap)) { in mlx5_query_hca_caps()
151 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_PORT_SELECTION, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
156 if (MLX5_CAP_GEN(dev, hca_cap_2)) { in mlx5_query_hca_caps()
157 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_GENERAL_2, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
162 if (MLX5_CAP_GEN(dev, eth_net_offloads)) { in mlx5_query_hca_caps()
163 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_ETHERNET_OFFLOADS, in mlx5_query_hca_caps()
169 if (MLX5_CAP_GEN(dev, ipoib_enhanced_offloads)) { in mlx5_query_hca_caps()
170 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_IPOIB_ENHANCED_OFFLOADS, in mlx5_query_hca_caps()
176 if (MLX5_CAP_GEN(dev, pg)) { in mlx5_query_hca_caps()
177 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_ODP, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
182 if (MLX5_CAP_GEN(dev, atomic)) { in mlx5_query_hca_caps()
183 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_ATOMIC, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
188 if (MLX5_CAP_GEN(dev, roce)) { in mlx5_query_hca_caps()
189 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_ROCE, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
194 if (MLX5_CAP_GEN(dev, nic_flow_table) || in mlx5_query_hca_caps()
195 MLX5_CAP_GEN(dev, ipoib_enhanced_offloads)) { in mlx5_query_hca_caps()
196 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_FLOW_TABLE, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
201 if (MLX5_ESWITCH_MANAGER(dev)) { in mlx5_query_hca_caps()
202 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_ESWITCH_FLOW_TABLE, in mlx5_query_hca_caps()
207 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_ESWITCH, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
212 if (MLX5_CAP_GEN(dev, qos)) { in mlx5_query_hca_caps()
213 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_QOS, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
218 if (MLX5_CAP_GEN(dev, debug)) in mlx5_query_hca_caps()
219 mlx5_core_get_caps_mode(dev, MLX5_CAP_DEBUG, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
221 if (MLX5_CAP_GEN(dev, pcam_reg)) in mlx5_query_hca_caps()
222 mlx5_get_pcam_reg(dev); in mlx5_query_hca_caps()
224 if (MLX5_CAP_GEN(dev, mcam_reg)) { in mlx5_query_hca_caps()
225 mlx5_get_mcam_access_reg_group(dev, MLX5_MCAM_REGS_FIRST_128); in mlx5_query_hca_caps()
226 mlx5_get_mcam_access_reg_group(dev, MLX5_MCAM_REGS_0x9100_0x917F); in mlx5_query_hca_caps()
229 if (MLX5_CAP_GEN(dev, qcam_reg)) in mlx5_query_hca_caps()
230 mlx5_get_qcam_reg(dev); in mlx5_query_hca_caps()
232 if (MLX5_CAP_GEN(dev, device_memory)) { in mlx5_query_hca_caps()
233 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_DEV_MEM, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
238 if (MLX5_CAP_GEN(dev, event_cap)) { in mlx5_query_hca_caps()
239 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_DEV_EVENT, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
244 if (MLX5_CAP_GEN(dev, tls_tx) || MLX5_CAP_GEN(dev, tls_rx)) { in mlx5_query_hca_caps()
245 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_TLS, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
250 if (MLX5_CAP_GEN_64(dev, general_obj_types) & in mlx5_query_hca_caps()
252 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_VDPA_EMULATION, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
257 if (MLX5_CAP_GEN(dev, ipsec_offload)) { in mlx5_query_hca_caps()
258 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_IPSEC, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
263 if (MLX5_CAP_GEN(dev, crypto)) { in mlx5_query_hca_caps()
264 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_CRYPTO, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
269 if (MLX5_CAP_GEN_64(dev, general_obj_types) & in mlx5_query_hca_caps()
271 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_MACSEC, HCA_CAP_OPMOD_GET_CUR); in mlx5_query_hca_caps()
276 if (MLX5_CAP_GEN(dev, adv_virtualization)) { in mlx5_query_hca_caps()
277 err = mlx5_core_get_caps_mode(dev, MLX5_CAP_ADV_VIRTUALIZATION, in mlx5_query_hca_caps()
286 int mlx5_cmd_init_hca(struct mlx5_core_dev *dev, uint32_t *sw_owner_id) in mlx5_cmd_init_hca() argument
293 if (MLX5_CAP_GEN(dev, sw_owner_id)) { in mlx5_cmd_init_hca()
299 if (MLX5_CAP_GEN_2_MAX(dev, sw_vhca_id_valid) && in mlx5_cmd_init_hca()
300 dev->priv.sw_vhca_id > 0) in mlx5_cmd_init_hca()
301 MLX5_SET(init_hca_in, in, sw_vhca_id, dev->priv.sw_vhca_id); in mlx5_cmd_init_hca()
303 return mlx5_cmd_exec_in(dev, init_hca, in); in mlx5_cmd_init_hca()
306 int mlx5_cmd_teardown_hca(struct mlx5_core_dev *dev) in mlx5_cmd_teardown_hca() argument
311 return mlx5_cmd_exec_in(dev, teardown_hca, in); in mlx5_cmd_teardown_hca()
314 int mlx5_cmd_force_teardown_hca(struct mlx5_core_dev *dev) in mlx5_cmd_force_teardown_hca() argument
321 if (!MLX5_CAP_GEN(dev, force_teardown)) { in mlx5_cmd_force_teardown_hca()
322 mlx5_core_dbg(dev, "force teardown is not supported in the firmware\n"); in mlx5_cmd_force_teardown_hca()
329 ret = mlx5_cmd_exec_polling(dev, in, sizeof(in), out, sizeof(out)); in mlx5_cmd_force_teardown_hca()
335 mlx5_core_warn(dev, "teardown with force mode failed, doing normal teardown\n"); in mlx5_cmd_force_teardown_hca()
342 int mlx5_cmd_fast_teardown_hca(struct mlx5_core_dev *dev) in mlx5_cmd_fast_teardown_hca() argument
344 unsigned long end, delay_ms = mlx5_tout_ms(dev, TEARDOWN); in mlx5_cmd_fast_teardown_hca()
350 if (!MLX5_CAP_GEN(dev, fast_teardown)) { in mlx5_cmd_fast_teardown_hca()
351 mlx5_core_dbg(dev, "fast teardown is not supported in the firmware\n"); in mlx5_cmd_fast_teardown_hca()
359 ret = mlx5_cmd_exec_inout(dev, teardown_hca, in, out); in mlx5_cmd_fast_teardown_hca()
365 mlx5_core_warn(dev, "teardown with fast mode failed\n"); in mlx5_cmd_fast_teardown_hca()
369 mlx5_set_nic_state(dev, MLX5_NIC_IFC_DISABLED); in mlx5_cmd_fast_teardown_hca()
374 if (mlx5_get_nic_state(dev) == MLX5_NIC_IFC_DISABLED) in mlx5_cmd_fast_teardown_hca()
376 if (pci_channel_offline(dev->pdev)) { in mlx5_cmd_fast_teardown_hca()
377 mlx5_core_err(dev, "PCI channel offline, stop waiting for NIC IFC\n"); in mlx5_cmd_fast_teardown_hca()
384 if (mlx5_get_nic_state(dev) != MLX5_NIC_IFC_DISABLED) { in mlx5_cmd_fast_teardown_hca()
385 dev_err(&dev->pdev->dev, "NIC IFC still %d after %lums.\n", in mlx5_cmd_fast_teardown_hca()
386 mlx5_get_nic_state(dev), delay_ms); in mlx5_cmd_fast_teardown_hca()
402 static int mlx5_reg_mcc_set(struct mlx5_core_dev *dev, in mlx5_reg_mcc_set() argument
417 return mlx5_core_access_reg(dev, in, sizeof(in), out, in mlx5_reg_mcc_set()
421 static int mlx5_reg_mcc_query(struct mlx5_core_dev *dev, in mlx5_reg_mcc_query() argument
433 err = mlx5_core_access_reg(dev, in, sizeof(in), out, in mlx5_reg_mcc_query()
446 static int mlx5_reg_mcda_set(struct mlx5_core_dev *dev, in mlx5_reg_mcda_set() argument
471 err = mlx5_core_access_reg(dev, in, in_size, out, in mlx5_reg_mcda_set()
477 static int mlx5_reg_mcqi_query(struct mlx5_core_dev *dev, in mlx5_reg_mcqi_query() argument
491 err = mlx5_core_access_reg(dev, in, sizeof(in), out, in mlx5_reg_mcqi_query()
503 static int mlx5_reg_mcqi_caps_query(struct mlx5_core_dev *dev, u16 component_index, in mlx5_reg_mcqi_caps_query() argument
510 err = mlx5_reg_mcqi_query(dev, component_index, 0, in mlx5_reg_mcqi_caps_query()
534 struct mlx5_core_dev *dev = mlx5_mlxfw_dev->mlx5_core_dev; in mlx5_component_query() local
536 if (!MLX5_CAP_GEN(dev, mcam_reg) || !MLX5_CAP_MCAM_REG(dev, mcqi)) { in mlx5_component_query()
537 mlx5_core_warn(dev, "caps query isn't supported by running FW\n"); in mlx5_component_query()
541 return mlx5_reg_mcqi_caps_query(dev, component_index, p_max_size, in mlx5_component_query()
549 struct mlx5_core_dev *dev = mlx5_mlxfw_dev->mlx5_core_dev; in mlx5_fsm_lock() local
554 err = mlx5_reg_mcc_query(dev, fwhandle, &error_code, &control_state); in mlx5_fsm_lock()
561 return mlx5_reg_mcc_set(dev, MLX5_REG_MCC_INSTRUCTION_LOCK_UPDATE_HANDLE, in mlx5_fsm_lock()
570 struct mlx5_core_dev *dev = mlx5_mlxfw_dev->mlx5_core_dev; in mlx5_fsm_component_update() local
572 return mlx5_reg_mcc_set(dev, MLX5_REG_MCC_INSTRUCTION_UPDATE_COMPONENT, in mlx5_fsm_component_update()
581 struct mlx5_core_dev *dev = mlx5_mlxfw_dev->mlx5_core_dev; in mlx5_fsm_block_download() local
583 return mlx5_reg_mcda_set(dev, fwhandle, offset, size, data); in mlx5_fsm_block_download()
591 struct mlx5_core_dev *dev = mlx5_mlxfw_dev->mlx5_core_dev; in mlx5_fsm_component_verify() local
593 return mlx5_reg_mcc_set(dev, MLX5_REG_MCC_INSTRUCTION_VERIFY_COMPONENT, in mlx5_fsm_component_verify()
601 struct mlx5_core_dev *dev = mlx5_mlxfw_dev->mlx5_core_dev; in mlx5_fsm_activate() local
603 return mlx5_reg_mcc_set(dev, MLX5_REG_MCC_INSTRUCTION_ACTIVATE, 0, in mlx5_fsm_activate()
613 struct mlx5_core_dev *dev = mlx5_mlxfw_dev->mlx5_core_dev; in mlx5_fsm_query_state() local
617 err = mlx5_reg_mcc_query(dev, &fwhandle, &error_code, &control_state); in mlx5_fsm_query_state()
631 struct mlx5_core_dev *dev = mlx5_mlxfw_dev->mlx5_core_dev; in mlx5_fsm_cancel() local
633 mlx5_reg_mcc_set(dev, MLX5_REG_MCC_INSTRUCTION_CANCEL, 0, fwhandle, 0); in mlx5_fsm_cancel()
640 struct mlx5_core_dev *dev = mlx5_mlxfw_dev->mlx5_core_dev; in mlx5_fsm_release() local
642 mlx5_reg_mcc_set(dev, MLX5_REG_MCC_INSTRUCTION_RELEASE_UPDATE_HANDLE, 0, in mlx5_fsm_release()
650 struct mlx5_core_dev *dev = mlx5_mlxfw_dev->mlx5_core_dev; in mlx5_fsm_reactivate() local
656 exp_time = jiffies + msecs_to_jiffies(mlx5_tout_ms(dev, FSM_REACTIVATE)); in mlx5_fsm_reactivate()
658 if (!MLX5_CAP_MCAM_REG2(dev, mirc)) in mlx5_fsm_reactivate()
663 err = mlx5_core_access_reg(dev, in, sizeof(in), out, in mlx5_fsm_reactivate()
670 err = mlx5_core_access_reg(dev, in, sizeof(in), out, in mlx5_fsm_reactivate()
698 int mlx5_firmware_flash(struct mlx5_core_dev *dev, in mlx5_firmware_flash() argument
705 .psid = dev->board_id, in mlx5_firmware_flash()
706 .psid_size = strlen(dev->board_id), in mlx5_firmware_flash()
707 .devlink = priv_to_devlink(dev), in mlx5_firmware_flash()
709 .mlx5_core_dev = dev in mlx5_firmware_flash()
712 if (!MLX5_CAP_GEN(dev, mcam_reg) || in mlx5_firmware_flash()
713 !MLX5_CAP_MCAM_REG(dev, mcqi) || in mlx5_firmware_flash()
714 !MLX5_CAP_MCAM_REG(dev, mcc) || in mlx5_firmware_flash()
715 !MLX5_CAP_MCAM_REG(dev, mcda)) { in mlx5_firmware_flash()
724 static int mlx5_reg_mcqi_version_query(struct mlx5_core_dev *dev, in mlx5_reg_mcqi_version_query() argument
728 return mlx5_reg_mcqi_query(dev, component_index, read_pending, in mlx5_reg_mcqi_version_query()
734 static int mlx5_reg_mcqs_query(struct mlx5_core_dev *dev, u32 *out, in mlx5_reg_mcqs_query() argument
745 err = mlx5_core_access_reg(dev, in, sizeof(in), out, in mlx5_reg_mcqs_query()
751 static int mlx5_get_boot_img_component_index(struct mlx5_core_dev *dev) in mlx5_get_boot_img_component_index() argument
759 err = mlx5_reg_mcqs_query(dev, out, component_idx); in mlx5_get_boot_img_component_index()
769 mlx5_core_warn(dev, "mcqs: can't find boot_img component ix, last scanned idx %d\n", in mlx5_get_boot_img_component_index()
778 mlx5_fw_image_pending(struct mlx5_core_dev *dev, in mlx5_fw_image_pending() argument
786 err = mlx5_reg_mcqs_query(dev, out, component_index); in mlx5_fw_image_pending()
797 mlx5_core_warn(dev, in mlx5_fw_image_pending()
805 int mlx5_fw_version_query(struct mlx5_core_dev *dev, in mlx5_fw_version_query() argument
813 if (!MLX5_CAP_GEN(dev, mcam_reg) || !MLX5_CAP_MCAM_REG(dev, mcqi) || in mlx5_fw_version_query()
814 !MLX5_CAP_MCAM_REG(dev, mcqs)) { in mlx5_fw_version_query()
815 mlx5_core_warn(dev, "fw query isn't supported by the FW\n"); in mlx5_fw_version_query()
819 component_index = mlx5_get_boot_img_component_index(dev); in mlx5_fw_version_query()
823 err = mlx5_reg_mcqi_version_query(dev, component_index, in mlx5_fw_version_query()
831 err = mlx5_fw_image_pending(dev, component_index, &pending_version_exists); in mlx5_fw_version_query()
840 err = mlx5_reg_mcqi_version_query(dev, component_index, in mlx5_fw_version_query()