Lines Matching refs:hdev

20 static int hclgevf_reset_hdev(struct hclgevf_dev *hdev);
21 static void hclgevf_task_schedule(struct hclgevf_dev *hdev,
87 void hclgevf_arq_init(struct hclgevf_dev *hdev) in hclgevf_arq_init() argument
89 struct hclge_comm_cmq *cmdq = &hdev->hw.hw.cmq; in hclgevf_arq_init()
93 hdev->arq.hdev = hdev; in hclgevf_arq_init()
94 hdev->arq.head = 0; in hclgevf_arq_init()
95 hdev->arq.tail = 0; in hclgevf_arq_init()
96 atomic_set(&hdev->arq.count, 0); in hclgevf_arq_init()
112 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_update_stats() local
115 status = hclge_comm_tqps_update_stats(handle, &hdev->hw.hw); in hclgevf_update_stats()
117 dev_err(&hdev->pdev->dev, in hclgevf_update_stats()
154 static int hclgevf_get_basic_info(struct hclgevf_dev *hdev) in hclgevf_get_basic_info() argument
156 struct hnae3_ae_dev *ae_dev = hdev->ae_dev; in hclgevf_get_basic_info()
164 status = hclgevf_send_mbx_msg(hdev, &send_msg, true, resp_msg, in hclgevf_get_basic_info()
167 dev_err(&hdev->pdev->dev, in hclgevf_get_basic_info()
174 hdev->hw_tc_map = basic_info->hw_tc_map; in hclgevf_get_basic_info()
175 hdev->mbx_api_version = le16_to_cpu(basic_info->mbx_api_version); in hclgevf_get_basic_info()
183 static int hclgevf_get_port_base_vlan_filter_state(struct hclgevf_dev *hdev) in hclgevf_get_port_base_vlan_filter_state() argument
185 struct hnae3_handle *nic = &hdev->nic; in hclgevf_get_port_base_vlan_filter_state()
192 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, &resp_msg, in hclgevf_get_port_base_vlan_filter_state()
195 dev_err(&hdev->pdev->dev, in hclgevf_get_port_base_vlan_filter_state()
206 static int hclgevf_get_queue_info(struct hclgevf_dev *hdev) in hclgevf_get_queue_info() argument
216 status = hclgevf_send_mbx_msg(hdev, &send_msg, true, resp_msg, in hclgevf_get_queue_info()
219 dev_err(&hdev->pdev->dev, in hclgevf_get_queue_info()
226 hdev->num_tqps = le16_to_cpu(queue_info->num_tqps); in hclgevf_get_queue_info()
227 hdev->rss_size_max = le16_to_cpu(queue_info->rss_size); in hclgevf_get_queue_info()
228 hdev->rx_buf_len = le16_to_cpu(queue_info->rx_buf_len); in hclgevf_get_queue_info()
233 static int hclgevf_get_queue_depth(struct hclgevf_dev *hdev) in hclgevf_get_queue_depth() argument
243 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, resp_msg, in hclgevf_get_queue_depth()
246 dev_err(&hdev->pdev->dev, in hclgevf_get_queue_depth()
253 hdev->num_tx_desc = le16_to_cpu(queue_depth->num_tx_desc); in hclgevf_get_queue_depth()
254 hdev->num_rx_desc = le16_to_cpu(queue_depth->num_rx_desc); in hclgevf_get_queue_depth()
261 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_qid_global() local
269 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, resp_data, in hclgevf_get_qid_global()
277 static int hclgevf_get_pf_media_type(struct hclgevf_dev *hdev) in hclgevf_get_pf_media_type() argument
284 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, resp_msg, in hclgevf_get_pf_media_type()
287 dev_err(&hdev->pdev->dev, in hclgevf_get_pf_media_type()
293 hdev->hw.mac.media_type = resp_msg[0]; in hclgevf_get_pf_media_type()
294 hdev->hw.mac.module_type = resp_msg[1]; in hclgevf_get_pf_media_type()
299 static int hclgevf_alloc_tqps(struct hclgevf_dev *hdev) in hclgevf_alloc_tqps() argument
301 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev); in hclgevf_alloc_tqps()
305 hdev->htqp = devm_kcalloc(&hdev->pdev->dev, hdev->num_tqps, in hclgevf_alloc_tqps()
307 if (!hdev->htqp) in hclgevf_alloc_tqps()
310 tqp = hdev->htqp; in hclgevf_alloc_tqps()
312 for (i = 0; i < hdev->num_tqps; i++) { in hclgevf_alloc_tqps()
313 tqp->dev = &hdev->pdev->dev; in hclgevf_alloc_tqps()
317 tqp->q.buf_size = hdev->rx_buf_len; in hclgevf_alloc_tqps()
318 tqp->q.tx_desc_num = hdev->num_tx_desc; in hclgevf_alloc_tqps()
319 tqp->q.rx_desc_num = hdev->num_rx_desc; in hclgevf_alloc_tqps()
325 tqp->q.io_base = hdev->hw.hw.io_base + in hclgevf_alloc_tqps()
329 tqp->q.io_base = hdev->hw.hw.io_base + in hclgevf_alloc_tqps()
340 tqp->q.mem_base = hdev->hw.hw.mem_base + in hclgevf_alloc_tqps()
341 HCLGEVF_TQP_MEM_OFFSET(hdev, i); in hclgevf_alloc_tqps()
349 static int hclgevf_knic_setup(struct hclgevf_dev *hdev) in hclgevf_knic_setup() argument
351 struct hnae3_handle *nic = &hdev->nic; in hclgevf_knic_setup()
353 u16 new_tqps = hdev->num_tqps; in hclgevf_knic_setup()
358 kinfo->num_tx_desc = hdev->num_tx_desc; in hclgevf_knic_setup()
359 kinfo->num_rx_desc = hdev->num_rx_desc; in hclgevf_knic_setup()
360 kinfo->rx_buf_len = hdev->rx_buf_len; in hclgevf_knic_setup()
362 if (hdev->hw_tc_map & BIT(i)) in hclgevf_knic_setup()
367 kinfo->rss_size = min_t(u16, hdev->rss_size_max, new_tqps / num_tc); in hclgevf_knic_setup()
369 kinfo->num_tqps = min(new_tqps, hdev->num_tqps); in hclgevf_knic_setup()
371 kinfo->tqp = devm_kcalloc(&hdev->pdev->dev, kinfo->num_tqps, in hclgevf_knic_setup()
377 hdev->htqp[i].q.handle = &hdev->nic; in hclgevf_knic_setup()
378 hdev->htqp[i].q.tqp_index = i; in hclgevf_knic_setup()
379 kinfo->tqp[i] = &hdev->htqp[i].q; in hclgevf_knic_setup()
385 kinfo->num_tqps = min_t(u16, hdev->num_nic_msix - 1, kinfo->num_tqps); in hclgevf_knic_setup()
392 static void hclgevf_request_link_info(struct hclgevf_dev *hdev) in hclgevf_request_link_info() argument
398 status = hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_request_link_info()
400 dev_err(&hdev->pdev->dev, in hclgevf_request_link_info()
404 void hclgevf_update_link_status(struct hclgevf_dev *hdev, int link_state) in hclgevf_update_link_status() argument
406 struct hnae3_handle *rhandle = &hdev->roce; in hclgevf_update_link_status()
407 struct hnae3_handle *handle = &hdev->nic; in hclgevf_update_link_status()
411 if (test_and_set_bit(HCLGEVF_STATE_LINK_UPDATING, &hdev->state)) in hclgevf_update_link_status()
415 rclient = hdev->roce_client; in hclgevf_update_link_status()
418 test_bit(HCLGEVF_STATE_DOWN, &hdev->state) ? 0 : link_state; in hclgevf_update_link_status()
419 if (link_state != hdev->hw.mac.link) { in hclgevf_update_link_status()
420 hdev->hw.mac.link = link_state; in hclgevf_update_link_status()
426 clear_bit(HCLGEVF_STATE_LINK_UPDATING, &hdev->state); in hclgevf_update_link_status()
429 static void hclgevf_update_link_mode(struct hclgevf_dev *hdev) in hclgevf_update_link_mode() argument
438 hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_update_link_mode()
440 hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_update_link_mode()
443 static int hclgevf_set_handle_info(struct hclgevf_dev *hdev) in hclgevf_set_handle_info() argument
445 struct hnae3_handle *nic = &hdev->nic; in hclgevf_set_handle_info()
449 nic->pdev = hdev->pdev; in hclgevf_set_handle_info()
450 bitmap_copy(nic->numa_node_mask.bits, hdev->numa_node_mask.bits, in hclgevf_set_handle_info()
453 nic->kinfo.io_base = hdev->hw.hw.io_base; in hclgevf_set_handle_info()
455 ret = hclgevf_knic_setup(hdev); in hclgevf_set_handle_info()
457 dev_err(&hdev->pdev->dev, "VF knic setup failed %d\n", in hclgevf_set_handle_info()
462 static void hclgevf_free_vector(struct hclgevf_dev *hdev, int vector_id) in hclgevf_free_vector() argument
464 if (hdev->vector_status[vector_id] == HCLGEVF_INVALID_VPORT) { in hclgevf_free_vector()
465 dev_warn(&hdev->pdev->dev, in hclgevf_free_vector()
470 hdev->vector_status[vector_id] = HCLGEVF_INVALID_VPORT; in hclgevf_free_vector()
471 hdev->num_msi_left += 1; in hclgevf_free_vector()
472 hdev->num_msi_used -= 1; in hclgevf_free_vector()
478 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_vector() local
483 vector_num = min_t(u16, hdev->num_nic_msix - 1, vector_num); in hclgevf_get_vector()
484 vector_num = min(hdev->num_msi_left, vector_num); in hclgevf_get_vector()
487 for (i = HCLGEVF_MISC_VECTOR_NUM + 1; i < hdev->num_msi; i++) { in hclgevf_get_vector()
488 if (hdev->vector_status[i] == HCLGEVF_INVALID_VPORT) { in hclgevf_get_vector()
489 vector->vector = pci_irq_vector(hdev->pdev, i); in hclgevf_get_vector()
490 vector->io_addr = hdev->hw.hw.io_base + in hclgevf_get_vector()
493 hdev->vector_status[i] = 0; in hclgevf_get_vector()
494 hdev->vector_irq[i] = vector->vector; in hclgevf_get_vector()
503 hdev->num_msi_left -= alloc; in hclgevf_get_vector()
504 hdev->num_msi_used += alloc; in hclgevf_get_vector()
509 static int hclgevf_get_vector_index(struct hclgevf_dev *hdev, int vector) in hclgevf_get_vector_index() argument
513 for (i = 0; i < hdev->num_msi; i++) in hclgevf_get_vector_index()
514 if (vector == hdev->vector_irq[i]) in hclgevf_get_vector_index()
521 static int hclgevf_get_rss_hash_key(struct hclgevf_dev *hdev) in hclgevf_get_rss_hash_key() argument
524 struct hclge_comm_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_get_rss_hash_key()
536 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, resp_msg, in hclgevf_get_rss_hash_key()
539 dev_err(&hdev->pdev->dev, in hclgevf_get_rss_hash_key()
561 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_rss() local
562 struct hclge_comm_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_get_rss()
565 if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) { in hclgevf_get_rss()
571 ret = hclgevf_get_rss_hash_key(hdev); in hclgevf_get_rss()
580 hdev->ae_dev->dev_specs.rss_ind_tbl_size); in hclgevf_get_rss()
588 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_rss() local
589 struct hclge_comm_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_set_rss()
592 if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) { in hclgevf_set_rss()
593 ret = hclge_comm_set_rss_hash_key(rss_cfg, &hdev->hw.hw, key, in hclgevf_set_rss()
600 for (i = 0; i < hdev->ae_dev->dev_specs.rss_ind_tbl_size; i++) in hclgevf_set_rss()
604 return hclge_comm_set_rss_indir_table(hdev->ae_dev, &hdev->hw.hw, in hclgevf_set_rss()
611 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_rss_tuple() local
614 if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2) in hclgevf_set_rss_tuple()
617 ret = hclge_comm_set_rss_tuple(hdev->ae_dev, &hdev->hw.hw, in hclgevf_set_rss_tuple()
618 &hdev->rss_cfg, nfc); in hclgevf_set_rss_tuple()
620 dev_err(&hdev->pdev->dev, in hclgevf_set_rss_tuple()
629 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_rss_tuple() local
633 if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2) in hclgevf_get_rss_tuple()
638 ret = hclge_comm_get_rss_tuple(&hdev->rss_cfg, nfc->flow_type, in hclgevf_get_rss_tuple()
650 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_tc_size() local
651 struct hclge_comm_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_get_tc_size()
660 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_bind_ring_to_vector() local
685 status = hclgevf_send_mbx_msg(hdev, &send_msg, false, in hclgevf_bind_ring_to_vector()
688 dev_err(&hdev->pdev->dev, in hclgevf_bind_ring_to_vector()
703 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_map_ring_to_vector() local
706 vector_id = hclgevf_get_vector_index(hdev, vector); in hclgevf_map_ring_to_vector()
721 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_unmap_ring_from_vector() local
724 if (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state)) in hclgevf_unmap_ring_from_vector()
727 vector_id = hclgevf_get_vector_index(hdev, vector); in hclgevf_unmap_ring_from_vector()
746 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_put_vector() local
749 vector_id = hclgevf_get_vector_index(hdev, vector); in hclgevf_put_vector()
757 hclgevf_free_vector(hdev, vector_id); in hclgevf_put_vector()
762 static int hclgevf_cmd_set_promisc_mode(struct hclgevf_dev *hdev, in hclgevf_cmd_set_promisc_mode() argument
766 struct hnae3_handle *handle = &hdev->nic; in hclgevf_cmd_set_promisc_mode()
778 ret = hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_cmd_set_promisc_mode()
780 dev_err(&hdev->pdev->dev, in hclgevf_cmd_set_promisc_mode()
789 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_promisc_mode() local
792 en_bc_pmc = hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2; in hclgevf_set_promisc_mode()
794 return hclgevf_cmd_set_promisc_mode(hdev, en_uc_pmc, en_mc_pmc, in hclgevf_set_promisc_mode()
800 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_request_update_promisc_mode() local
802 set_bit(HCLGEVF_STATE_PROMISC_CHANGED, &hdev->state); in hclgevf_request_update_promisc_mode()
803 hclgevf_task_schedule(hdev, 0); in hclgevf_request_update_promisc_mode()
806 static void hclgevf_sync_promisc_mode(struct hclgevf_dev *hdev) in hclgevf_sync_promisc_mode() argument
808 struct hnae3_handle *handle = &hdev->nic; in hclgevf_sync_promisc_mode()
813 if (test_bit(HCLGEVF_STATE_PROMISC_CHANGED, &hdev->state)) { in hclgevf_sync_promisc_mode()
816 clear_bit(HCLGEVF_STATE_PROMISC_CHANGED, &hdev->state); in hclgevf_sync_promisc_mode()
820 static int hclgevf_tqp_enable_cmd_send(struct hclgevf_dev *hdev, u16 tqp_id, in hclgevf_tqp_enable_cmd_send() argument
834 return hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_tqp_enable_cmd_send()
839 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_tqp_enable() local
844 ret = hclgevf_tqp_enable_cmd_send(hdev, i, 0, enable); in hclgevf_tqp_enable()
852 static int hclgevf_get_host_mac_addr(struct hclgevf_dev *hdev, u8 *p) in hclgevf_get_host_mac_addr() argument
859 status = hclgevf_send_mbx_msg(hdev, &send_msg, true, host_mac, in hclgevf_get_host_mac_addr()
862 dev_err(&hdev->pdev->dev, in hclgevf_get_host_mac_addr()
874 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_mac_addr() local
877 if (hclgevf_get_host_mac_addr(hdev, host_mac_addr)) in hclgevf_get_mac_addr()
880 hdev->has_pf_mac = !is_zero_ether_addr(host_mac_addr); in hclgevf_get_mac_addr()
881 if (hdev->has_pf_mac) in hclgevf_get_mac_addr()
884 ether_addr_copy(p, hdev->hw.mac.mac_addr); in hclgevf_get_mac_addr()
890 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_mac_addr() local
891 u8 *old_mac_addr = (u8 *)hdev->hw.mac.mac_addr; in hclgevf_set_mac_addr()
899 if (is_first && !hdev->has_pf_mac) in hclgevf_set_mac_addr()
903 status = hclgevf_send_mbx_msg(hdev, &send_msg, true, NULL, 0); in hclgevf_set_mac_addr()
905 ether_addr_copy(hdev->hw.mac.mac_addr, new_mac_addr); in hclgevf_set_mac_addr()
955 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_update_mac_list() local
960 &hdev->mac_table.uc_mac_list : &hdev->mac_table.mc_mac_list; in hclgevf_update_mac_list()
962 spin_lock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_update_mac_list()
971 spin_unlock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_update_mac_list()
976 spin_unlock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_update_mac_list()
982 spin_unlock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_update_mac_list()
990 spin_unlock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_update_mac_list()
1022 static int hclgevf_add_del_mac_addr(struct hclgevf_dev *hdev, in hclgevf_add_del_mac_addr() argument
1045 return hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_add_del_mac_addr()
1048 static void hclgevf_config_mac_list(struct hclgevf_dev *hdev, in hclgevf_config_mac_list() argument
1057 ret = hclgevf_add_del_mac_addr(hdev, mac_node, mac_type); in hclgevf_config_mac_list()
1061 dev_err(&hdev->pdev->dev, in hclgevf_config_mac_list()
1135 static void hclgevf_sync_mac_list(struct hclgevf_dev *hdev, in hclgevf_sync_mac_list() argument
1149 &hdev->mac_table.uc_mac_list : &hdev->mac_table.mc_mac_list; in hclgevf_sync_mac_list()
1151 spin_lock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_sync_mac_list()
1173 spin_unlock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_sync_mac_list()
1176 hclgevf_config_mac_list(hdev, &tmp_del_list, mac_type); in hclgevf_sync_mac_list()
1177 hclgevf_config_mac_list(hdev, &tmp_add_list, mac_type); in hclgevf_sync_mac_list()
1182 spin_lock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_sync_mac_list()
1187 spin_unlock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_sync_mac_list()
1190 static void hclgevf_sync_mac_table(struct hclgevf_dev *hdev) in hclgevf_sync_mac_table() argument
1192 hclgevf_sync_mac_list(hdev, HCLGEVF_MAC_ADDR_UC); in hclgevf_sync_mac_table()
1193 hclgevf_sync_mac_list(hdev, HCLGEVF_MAC_ADDR_MC); in hclgevf_sync_mac_table()
1196 static void hclgevf_uninit_mac_list(struct hclgevf_dev *hdev) in hclgevf_uninit_mac_list() argument
1198 spin_lock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_uninit_mac_list()
1200 hclgevf_clear_list(&hdev->mac_table.uc_mac_list); in hclgevf_uninit_mac_list()
1201 hclgevf_clear_list(&hdev->mac_table.mc_mac_list); in hclgevf_uninit_mac_list()
1203 spin_unlock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_uninit_mac_list()
1208 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_enable_vlan_filter() local
1209 struct hnae3_ae_dev *ae_dev = hdev->ae_dev; in hclgevf_enable_vlan_filter()
1219 return hclgevf_send_mbx_msg(hdev, &send_msg, true, NULL, 0); in hclgevf_enable_vlan_filter()
1226 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_vlan_filter() local
1241 if ((test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state) || in hclgevf_set_vlan_filter()
1242 test_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state)) && is_kill) { in hclgevf_set_vlan_filter()
1243 set_bit(vlan_id, hdev->vlan_del_fail_bmap); in hclgevf_set_vlan_filter()
1245 } else if (!is_kill && test_bit(vlan_id, hdev->vlan_del_fail_bmap)) { in hclgevf_set_vlan_filter()
1246 clear_bit(vlan_id, hdev->vlan_del_fail_bmap); in hclgevf_set_vlan_filter()
1260 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, NULL, 0); in hclgevf_set_vlan_filter()
1262 set_bit(vlan_id, hdev->vlan_del_fail_bmap); in hclgevf_set_vlan_filter()
1267 static void hclgevf_sync_vlan_filter(struct hclgevf_dev *hdev) in hclgevf_sync_vlan_filter() argument
1270 struct hnae3_handle *handle = &hdev->nic; in hclgevf_sync_vlan_filter()
1274 if (bitmap_empty(hdev->vlan_del_fail_bmap, VLAN_N_VID)) in hclgevf_sync_vlan_filter()
1278 vlan_id = find_first_bit(hdev->vlan_del_fail_bmap, VLAN_N_VID); in hclgevf_sync_vlan_filter()
1285 clear_bit(vlan_id, hdev->vlan_del_fail_bmap); in hclgevf_sync_vlan_filter()
1290 vlan_id = find_first_bit(hdev->vlan_del_fail_bmap, VLAN_N_VID); in hclgevf_sync_vlan_filter()
1295 static int hclgevf_en_hw_strip_rxvtag_cmd(struct hclgevf_dev *hdev, bool enable) in hclgevf_en_hw_strip_rxvtag_cmd() argument
1302 return hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_en_hw_strip_rxvtag_cmd()
1307 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_en_hw_strip_rxvtag() local
1310 ret = hclgevf_en_hw_strip_rxvtag_cmd(hdev, enable); in hclgevf_en_hw_strip_rxvtag()
1314 hdev->rxvtag_strip_en = enable; in hclgevf_en_hw_strip_rxvtag()
1321 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_reset_tqp() local
1330 dev_err(&hdev->pdev->dev, "failed to disable tqp, ret = %d\n", in hclgevf_reset_tqp()
1337 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, &return_status, in hclgevf_reset_tqp()
1345 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, NULL, 0); in hclgevf_reset_tqp()
1355 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_mtu() local
1363 return hclgevf_send_mbx_msg(hdev, &send_msg, true, NULL, 0); in hclgevf_set_mtu()
1366 static int hclgevf_notify_client(struct hclgevf_dev *hdev, in hclgevf_notify_client() argument
1369 struct hnae3_client *client = hdev->nic_client; in hclgevf_notify_client()
1370 struct hnae3_handle *handle = &hdev->nic; in hclgevf_notify_client()
1373 if (!test_bit(HCLGEVF_STATE_NIC_REGISTERED, &hdev->state) || in hclgevf_notify_client()
1382 dev_err(&hdev->pdev->dev, "notify nic client failed %d(%d)\n", in hclgevf_notify_client()
1388 static int hclgevf_notify_roce_client(struct hclgevf_dev *hdev, in hclgevf_notify_roce_client() argument
1391 struct hnae3_client *client = hdev->roce_client; in hclgevf_notify_roce_client()
1392 struct hnae3_handle *handle = &hdev->roce; in hclgevf_notify_roce_client()
1395 if (!test_bit(HCLGEVF_STATE_ROCE_REGISTERED, &hdev->state) || !client) in hclgevf_notify_roce_client()
1403 dev_err(&hdev->pdev->dev, "notify roce client failed %d(%d)", in hclgevf_notify_roce_client()
1408 static void hclgevf_set_reset_pending(struct hclgevf_dev *hdev, in hclgevf_set_reset_pending() argument
1416 set_bit(reset_type, &hdev->reset_pending); in hclgevf_set_reset_pending()
1419 static int hclgevf_reset_wait(struct hclgevf_dev *hdev) in hclgevf_reset_wait() argument
1429 if (hdev->reset_type == HNAE3_VF_RESET) in hclgevf_reset_wait()
1430 ret = readl_poll_timeout(hdev->hw.hw.io_base + in hclgevf_reset_wait()
1436 ret = readl_poll_timeout(hdev->hw.hw.io_base + in hclgevf_reset_wait()
1444 dev_err(&hdev->pdev->dev, in hclgevf_reset_wait()
1453 if (hdev->reset_type == HNAE3_VF_FULL_RESET) in hclgevf_reset_wait()
1461 static void hclgevf_reset_handshake(struct hclgevf_dev *hdev, bool enable) in hclgevf_reset_handshake() argument
1465 reg_val = hclgevf_read_dev(&hdev->hw, HCLGE_COMM_NIC_CSQ_DEPTH_REG); in hclgevf_reset_handshake()
1471 hclgevf_write_dev(&hdev->hw, HCLGE_COMM_NIC_CSQ_DEPTH_REG, in hclgevf_reset_handshake()
1475 static int hclgevf_reset_stack(struct hclgevf_dev *hdev) in hclgevf_reset_stack() argument
1480 ret = hclgevf_notify_client(hdev, HNAE3_UNINIT_CLIENT); in hclgevf_reset_stack()
1485 ret = hclgevf_reset_hdev(hdev); in hclgevf_reset_stack()
1487 dev_err(&hdev->pdev->dev, in hclgevf_reset_stack()
1493 ret = hclgevf_notify_client(hdev, HNAE3_INIT_CLIENT); in hclgevf_reset_stack()
1498 hclgevf_reset_handshake(hdev, false); in hclgevf_reset_stack()
1501 return hclgevf_notify_client(hdev, HNAE3_UP_CLIENT); in hclgevf_reset_stack()
1504 static int hclgevf_reset_prepare_wait(struct hclgevf_dev *hdev) in hclgevf_reset_prepare_wait() argument
1508 if (hdev->reset_type == HNAE3_VF_FUNC_RESET) { in hclgevf_reset_prepare_wait()
1513 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, NULL, 0); in hclgevf_reset_prepare_wait()
1515 dev_err(&hdev->pdev->dev, in hclgevf_reset_prepare_wait()
1519 hdev->rst_stats.vf_func_rst_cnt++; in hclgevf_reset_prepare_wait()
1522 set_bit(HCLGE_COMM_STATE_CMD_DISABLE, &hdev->hw.hw.comm_state); in hclgevf_reset_prepare_wait()
1525 hclgevf_reset_handshake(hdev, true); in hclgevf_reset_prepare_wait()
1526 dev_info(&hdev->pdev->dev, "prepare reset(%d) wait done\n", in hclgevf_reset_prepare_wait()
1527 hdev->reset_type); in hclgevf_reset_prepare_wait()
1532 static void hclgevf_dump_rst_info(struct hclgevf_dev *hdev) in hclgevf_dump_rst_info() argument
1534 dev_info(&hdev->pdev->dev, "VF function reset count: %u\n", in hclgevf_dump_rst_info()
1535 hdev->rst_stats.vf_func_rst_cnt); in hclgevf_dump_rst_info()
1536 dev_info(&hdev->pdev->dev, "FLR reset count: %u\n", in hclgevf_dump_rst_info()
1537 hdev->rst_stats.flr_rst_cnt); in hclgevf_dump_rst_info()
1538 dev_info(&hdev->pdev->dev, "VF reset count: %u\n", in hclgevf_dump_rst_info()
1539 hdev->rst_stats.vf_rst_cnt); in hclgevf_dump_rst_info()
1540 dev_info(&hdev->pdev->dev, "reset done count: %u\n", in hclgevf_dump_rst_info()
1541 hdev->rst_stats.rst_done_cnt); in hclgevf_dump_rst_info()
1542 dev_info(&hdev->pdev->dev, "HW reset done count: %u\n", in hclgevf_dump_rst_info()
1543 hdev->rst_stats.hw_rst_done_cnt); in hclgevf_dump_rst_info()
1544 dev_info(&hdev->pdev->dev, "reset count: %u\n", in hclgevf_dump_rst_info()
1545 hdev->rst_stats.rst_cnt); in hclgevf_dump_rst_info()
1546 dev_info(&hdev->pdev->dev, "reset fail count: %u\n", in hclgevf_dump_rst_info()
1547 hdev->rst_stats.rst_fail_cnt); in hclgevf_dump_rst_info()
1548 dev_info(&hdev->pdev->dev, "vector0 interrupt enable status: 0x%x\n", in hclgevf_dump_rst_info()
1549 hclgevf_read_dev(&hdev->hw, HCLGEVF_MISC_VECTOR_REG_BASE)); in hclgevf_dump_rst_info()
1550 dev_info(&hdev->pdev->dev, "vector0 interrupt status: 0x%x\n", in hclgevf_dump_rst_info()
1551 hclgevf_read_dev(&hdev->hw, HCLGE_COMM_VECTOR0_CMDQ_STATE_REG)); in hclgevf_dump_rst_info()
1552 dev_info(&hdev->pdev->dev, "handshake status: 0x%x\n", in hclgevf_dump_rst_info()
1553 hclgevf_read_dev(&hdev->hw, HCLGE_COMM_NIC_CSQ_DEPTH_REG)); in hclgevf_dump_rst_info()
1554 dev_info(&hdev->pdev->dev, "function reset status: 0x%x\n", in hclgevf_dump_rst_info()
1555 hclgevf_read_dev(&hdev->hw, HCLGEVF_RST_ING)); in hclgevf_dump_rst_info()
1556 dev_info(&hdev->pdev->dev, "hdev state: 0x%lx\n", hdev->state); in hclgevf_dump_rst_info()
1559 static void hclgevf_reset_err_handle(struct hclgevf_dev *hdev) in hclgevf_reset_err_handle() argument
1562 hclgevf_reset_handshake(hdev, true); in hclgevf_reset_err_handle()
1563 hdev->rst_stats.rst_fail_cnt++; in hclgevf_reset_err_handle()
1564 dev_err(&hdev->pdev->dev, "failed to reset VF(%u)\n", in hclgevf_reset_err_handle()
1565 hdev->rst_stats.rst_fail_cnt); in hclgevf_reset_err_handle()
1567 if (hdev->rst_stats.rst_fail_cnt < HCLGEVF_RESET_MAX_FAIL_CNT) in hclgevf_reset_err_handle()
1568 hclgevf_set_reset_pending(hdev, hdev->reset_type); in hclgevf_reset_err_handle()
1570 if (hclgevf_is_reset_pending(hdev)) { in hclgevf_reset_err_handle()
1571 set_bit(HCLGEVF_RESET_PENDING, &hdev->reset_state); in hclgevf_reset_err_handle()
1572 hclgevf_reset_task_schedule(hdev); in hclgevf_reset_err_handle()
1574 set_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state); in hclgevf_reset_err_handle()
1575 hclgevf_dump_rst_info(hdev); in hclgevf_reset_err_handle()
1579 static int hclgevf_reset_prepare(struct hclgevf_dev *hdev) in hclgevf_reset_prepare() argument
1583 hdev->rst_stats.rst_cnt++; in hclgevf_reset_prepare()
1586 ret = hclgevf_notify_roce_client(hdev, HNAE3_DOWN_CLIENT); in hclgevf_reset_prepare()
1592 ret = hclgevf_notify_client(hdev, HNAE3_DOWN_CLIENT); in hclgevf_reset_prepare()
1597 return hclgevf_reset_prepare_wait(hdev); in hclgevf_reset_prepare()
1600 static int hclgevf_reset_rebuild(struct hclgevf_dev *hdev) in hclgevf_reset_rebuild() argument
1604 hdev->rst_stats.hw_rst_done_cnt++; in hclgevf_reset_rebuild()
1605 ret = hclgevf_notify_roce_client(hdev, HNAE3_UNINIT_CLIENT); in hclgevf_reset_rebuild()
1611 ret = hclgevf_reset_stack(hdev); in hclgevf_reset_rebuild()
1614 dev_err(&hdev->pdev->dev, "failed to reset VF stack\n"); in hclgevf_reset_rebuild()
1618 ret = hclgevf_notify_roce_client(hdev, HNAE3_INIT_CLIENT); in hclgevf_reset_rebuild()
1623 hdev->rst_stats.rst_fail_cnt < HCLGEVF_RESET_MAX_FAIL_CNT - 1) in hclgevf_reset_rebuild()
1626 ret = hclgevf_notify_roce_client(hdev, HNAE3_UP_CLIENT); in hclgevf_reset_rebuild()
1630 hdev->last_reset_time = jiffies; in hclgevf_reset_rebuild()
1631 hdev->rst_stats.rst_done_cnt++; in hclgevf_reset_rebuild()
1632 hdev->rst_stats.rst_fail_cnt = 0; in hclgevf_reset_rebuild()
1633 clear_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state); in hclgevf_reset_rebuild()
1638 static void hclgevf_reset(struct hclgevf_dev *hdev) in hclgevf_reset() argument
1640 if (hclgevf_reset_prepare(hdev)) in hclgevf_reset()
1646 if (hclgevf_reset_wait(hdev)) { in hclgevf_reset()
1648 dev_err(&hdev->pdev->dev, in hclgevf_reset()
1653 if (hclgevf_reset_rebuild(hdev)) in hclgevf_reset()
1659 hclgevf_reset_err_handle(hdev); in hclgevf_reset()
1697 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_reset_event() local
1699 if (hdev->default_reset_request) in hclgevf_reset_event()
1700 hdev->reset_level = in hclgevf_reset_event()
1701 hclgevf_get_reset_level(&hdev->default_reset_request); in hclgevf_reset_event()
1703 hdev->reset_level = HNAE3_VF_FUNC_RESET; in hclgevf_reset_event()
1705 dev_info(&hdev->pdev->dev, "received reset request from VF enet, reset level is %d\n", in hclgevf_reset_event()
1706 hdev->reset_level); in hclgevf_reset_event()
1709 set_bit(HCLGEVF_RESET_REQUESTED, &hdev->reset_state); in hclgevf_reset_event()
1710 hclgevf_reset_task_schedule(hdev); in hclgevf_reset_event()
1712 hdev->last_reset_time = jiffies; in hclgevf_reset_event()
1723 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_set_def_reset_request() local
1727 set_bit(HNAE3_NONE_RESET, &hdev->default_reset_request); in hclgevf_set_def_reset_request()
1728 dev_info(&hdev->pdev->dev, "unsupported reset type %d\n", in hclgevf_set_def_reset_request()
1732 set_bit(rst_type, &hdev->default_reset_request); in hclgevf_set_def_reset_request()
1746 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_reset_prepare_general() local
1751 down(&hdev->reset_sem); in hclgevf_reset_prepare_general()
1752 set_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state); in hclgevf_reset_prepare_general()
1753 hdev->reset_type = rst_type; in hclgevf_reset_prepare_general()
1754 ret = hclgevf_reset_prepare(hdev); in hclgevf_reset_prepare_general()
1755 if (!ret && !hdev->reset_pending) in hclgevf_reset_prepare_general()
1758 dev_err(&hdev->pdev->dev, in hclgevf_reset_prepare_general()
1760 ret, hdev->reset_pending, retry_cnt); in hclgevf_reset_prepare_general()
1761 clear_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state); in hclgevf_reset_prepare_general()
1762 up(&hdev->reset_sem); in hclgevf_reset_prepare_general()
1767 hclgevf_enable_vector(&hdev->misc_vector, false); in hclgevf_reset_prepare_general()
1769 if (hdev->reset_type == HNAE3_FLR_RESET) in hclgevf_reset_prepare_general()
1770 hdev->rst_stats.flr_rst_cnt++; in hclgevf_reset_prepare_general()
1775 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_reset_done() local
1778 hclgevf_enable_vector(&hdev->misc_vector, true); in hclgevf_reset_done()
1780 ret = hclgevf_reset_rebuild(hdev); in hclgevf_reset_done()
1782 dev_warn(&hdev->pdev->dev, "fail to rebuild, ret=%d\n", in hclgevf_reset_done()
1785 hdev->reset_type = HNAE3_NONE_RESET; in hclgevf_reset_done()
1786 if (test_and_clear_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state)) in hclgevf_reset_done()
1787 up(&hdev->reset_sem); in hclgevf_reset_done()
1792 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_fw_version() local
1794 return hdev->fw_version; in hclgevf_get_fw_version()
1797 static void hclgevf_get_misc_vector(struct hclgevf_dev *hdev) in hclgevf_get_misc_vector() argument
1799 struct hclgevf_misc_vector *vector = &hdev->misc_vector; in hclgevf_get_misc_vector()
1801 vector->vector_irq = pci_irq_vector(hdev->pdev, in hclgevf_get_misc_vector()
1803 vector->addr = hdev->hw.hw.io_base + HCLGEVF_MISC_VECTOR_REG_BASE; in hclgevf_get_misc_vector()
1805 hdev->vector_status[HCLGEVF_MISC_VECTOR_NUM] = 0; in hclgevf_get_misc_vector()
1806 hdev->vector_irq[HCLGEVF_MISC_VECTOR_NUM] = vector->vector_irq; in hclgevf_get_misc_vector()
1808 hdev->num_msi_left -= 1; in hclgevf_get_misc_vector()
1809 hdev->num_msi_used += 1; in hclgevf_get_misc_vector()
1812 void hclgevf_reset_task_schedule(struct hclgevf_dev *hdev) in hclgevf_reset_task_schedule() argument
1814 if (!test_bit(HCLGEVF_STATE_REMOVING, &hdev->state) && in hclgevf_reset_task_schedule()
1815 test_bit(HCLGEVF_STATE_SERVICE_INITED, &hdev->state) && in hclgevf_reset_task_schedule()
1817 &hdev->state)) in hclgevf_reset_task_schedule()
1818 mod_delayed_work(hclgevf_wq, &hdev->service_task, 0); in hclgevf_reset_task_schedule()
1821 void hclgevf_mbx_task_schedule(struct hclgevf_dev *hdev) in hclgevf_mbx_task_schedule() argument
1823 if (!test_bit(HCLGEVF_STATE_REMOVING, &hdev->state) && in hclgevf_mbx_task_schedule()
1825 &hdev->state)) in hclgevf_mbx_task_schedule()
1826 mod_delayed_work(hclgevf_wq, &hdev->service_task, 0); in hclgevf_mbx_task_schedule()
1829 static void hclgevf_task_schedule(struct hclgevf_dev *hdev, in hclgevf_task_schedule() argument
1832 if (!test_bit(HCLGEVF_STATE_REMOVING, &hdev->state) && in hclgevf_task_schedule()
1833 !test_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state)) in hclgevf_task_schedule()
1834 mod_delayed_work(hclgevf_wq, &hdev->service_task, delay); in hclgevf_task_schedule()
1837 static void hclgevf_reset_service_task(struct hclgevf_dev *hdev) in hclgevf_reset_service_task() argument
1841 if (!test_and_clear_bit(HCLGEVF_STATE_RST_SERVICE_SCHED, &hdev->state)) in hclgevf_reset_service_task()
1844 down(&hdev->reset_sem); in hclgevf_reset_service_task()
1845 set_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state); in hclgevf_reset_service_task()
1848 &hdev->reset_state)) { in hclgevf_reset_service_task()
1854 hdev->reset_attempts = 0; in hclgevf_reset_service_task()
1856 hdev->last_reset_time = jiffies; in hclgevf_reset_service_task()
1857 hdev->reset_type = in hclgevf_reset_service_task()
1858 hclgevf_get_reset_level(&hdev->reset_pending); in hclgevf_reset_service_task()
1859 if (hdev->reset_type != HNAE3_NONE_RESET) in hclgevf_reset_service_task()
1860 hclgevf_reset(hdev); in hclgevf_reset_service_task()
1862 &hdev->reset_state)) { in hclgevf_reset_service_task()
1886 if (hdev->reset_attempts > HCLGEVF_MAX_RESET_ATTEMPTS_CNT) { in hclgevf_reset_service_task()
1888 hclgevf_set_reset_pending(hdev, HNAE3_VF_FULL_RESET); in hclgevf_reset_service_task()
1891 set_bit(HCLGEVF_RESET_PENDING, &hdev->reset_state); in hclgevf_reset_service_task()
1893 hdev->reset_attempts++; in hclgevf_reset_service_task()
1895 hclgevf_set_reset_pending(hdev, hdev->reset_level); in hclgevf_reset_service_task()
1896 set_bit(HCLGEVF_RESET_PENDING, &hdev->reset_state); in hclgevf_reset_service_task()
1898 hclgevf_reset_task_schedule(hdev); in hclgevf_reset_service_task()
1901 hdev->reset_type = HNAE3_NONE_RESET; in hclgevf_reset_service_task()
1902 clear_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state); in hclgevf_reset_service_task()
1903 up(&hdev->reset_sem); in hclgevf_reset_service_task()
1906 static void hclgevf_mailbox_service_task(struct hclgevf_dev *hdev) in hclgevf_mailbox_service_task() argument
1908 if (!test_and_clear_bit(HCLGEVF_STATE_MBX_SERVICE_SCHED, &hdev->state)) in hclgevf_mailbox_service_task()
1911 if (test_and_set_bit(HCLGEVF_STATE_MBX_HANDLING, &hdev->state)) in hclgevf_mailbox_service_task()
1914 hclgevf_mbx_async_handler(hdev); in hclgevf_mailbox_service_task()
1916 clear_bit(HCLGEVF_STATE_MBX_HANDLING, &hdev->state); in hclgevf_mailbox_service_task()
1919 static void hclgevf_keep_alive(struct hclgevf_dev *hdev) in hclgevf_keep_alive() argument
1924 if (test_bit(HCLGE_COMM_STATE_CMD_DISABLE, &hdev->hw.hw.comm_state)) in hclgevf_keep_alive()
1928 ret = hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_keep_alive()
1930 dev_err(&hdev->pdev->dev, in hclgevf_keep_alive()
1934 static void hclgevf_periodic_service_task(struct hclgevf_dev *hdev) in hclgevf_periodic_service_task() argument
1937 struct hnae3_handle *handle = &hdev->nic; in hclgevf_periodic_service_task()
1939 if (test_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state) || in hclgevf_periodic_service_task()
1940 test_bit(HCLGE_COMM_STATE_CMD_DISABLE, &hdev->hw.hw.comm_state)) in hclgevf_periodic_service_task()
1943 if (time_is_after_jiffies(hdev->last_serv_processed + HZ)) { in hclgevf_periodic_service_task()
1944 delta = jiffies - hdev->last_serv_processed; in hclgevf_periodic_service_task()
1952 hdev->serv_processed_cnt++; in hclgevf_periodic_service_task()
1953 if (!(hdev->serv_processed_cnt % HCLGEVF_KEEP_ALIVE_TASK_INTERVAL)) in hclgevf_periodic_service_task()
1954 hclgevf_keep_alive(hdev); in hclgevf_periodic_service_task()
1956 if (test_bit(HCLGEVF_STATE_DOWN, &hdev->state)) { in hclgevf_periodic_service_task()
1957 hdev->last_serv_processed = jiffies; in hclgevf_periodic_service_task()
1961 if (!(hdev->serv_processed_cnt % HCLGEVF_STATS_TIMER_INTERVAL)) in hclgevf_periodic_service_task()
1962 hclge_comm_tqps_update_stats(handle, &hdev->hw.hw); in hclgevf_periodic_service_task()
1967 if (!test_bit(HCLGEVF_STATE_PF_PUSH_LINK_STATUS, &hdev->state)) in hclgevf_periodic_service_task()
1968 hclgevf_request_link_info(hdev); in hclgevf_periodic_service_task()
1970 hclgevf_update_link_mode(hdev); in hclgevf_periodic_service_task()
1972 hclgevf_sync_vlan_filter(hdev); in hclgevf_periodic_service_task()
1974 hclgevf_sync_mac_table(hdev); in hclgevf_periodic_service_task()
1976 hclgevf_sync_promisc_mode(hdev); in hclgevf_periodic_service_task()
1978 hdev->last_serv_processed = jiffies; in hclgevf_periodic_service_task()
1981 hclgevf_task_schedule(hdev, delta); in hclgevf_periodic_service_task()
1986 struct hclgevf_dev *hdev = container_of(work, struct hclgevf_dev, in hclgevf_service_task() local
1989 hclgevf_reset_service_task(hdev); in hclgevf_service_task()
1990 hclgevf_mailbox_service_task(hdev); in hclgevf_service_task()
1991 hclgevf_periodic_service_task(hdev); in hclgevf_service_task()
1997 hclgevf_reset_service_task(hdev); in hclgevf_service_task()
1998 hclgevf_mailbox_service_task(hdev); in hclgevf_service_task()
2001 static void hclgevf_clear_event_cause(struct hclgevf_dev *hdev, u32 regclr) in hclgevf_clear_event_cause() argument
2003 hclgevf_write_dev(&hdev->hw, HCLGE_COMM_VECTOR0_CMDQ_SRC_REG, regclr); in hclgevf_clear_event_cause()
2006 static enum hclgevf_evt_cause hclgevf_check_evt_cause(struct hclgevf_dev *hdev, in hclgevf_check_evt_cause() argument
2012 cmdq_stat_reg = hclgevf_read_dev(&hdev->hw, in hclgevf_check_evt_cause()
2015 rst_ing_reg = hclgevf_read_dev(&hdev->hw, HCLGEVF_RST_ING); in hclgevf_check_evt_cause()
2016 dev_info(&hdev->pdev->dev, in hclgevf_check_evt_cause()
2018 hclgevf_set_reset_pending(hdev, HNAE3_VF_RESET); in hclgevf_check_evt_cause()
2019 set_bit(HCLGEVF_RESET_PENDING, &hdev->reset_state); in hclgevf_check_evt_cause()
2020 set_bit(HCLGE_COMM_STATE_CMD_DISABLE, &hdev->hw.hw.comm_state); in hclgevf_check_evt_cause()
2022 hdev->rst_stats.vf_rst_cnt++; in hclgevf_check_evt_cause()
2026 val = hclgevf_read_dev(&hdev->hw, HCLGEVF_VF_RST_ING); in hclgevf_check_evt_cause()
2027 hclgevf_write_dev(&hdev->hw, HCLGEVF_VF_RST_ING, in hclgevf_check_evt_cause()
2041 if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) in hclgevf_check_evt_cause()
2051 dev_info(&hdev->pdev->dev, in hclgevf_check_evt_cause()
2060 struct hclgevf_dev *hdev = timer_container_of(hdev, t, reset_timer); in hclgevf_reset_timer() local
2062 hclgevf_clear_event_cause(hdev, HCLGEVF_VECTOR0_EVENT_RST); in hclgevf_reset_timer()
2063 hclgevf_reset_task_schedule(hdev); in hclgevf_reset_timer()
2071 struct hclgevf_dev *hdev = data; in hclgevf_misc_irq_handle() local
2074 hclgevf_enable_vector(&hdev->misc_vector, false); in hclgevf_misc_irq_handle()
2075 event_cause = hclgevf_check_evt_cause(hdev, &clearval); in hclgevf_misc_irq_handle()
2077 hclgevf_clear_event_cause(hdev, clearval); in hclgevf_misc_irq_handle()
2081 mod_timer(&hdev->reset_timer, in hclgevf_misc_irq_handle()
2085 hclgevf_mbx_handler(hdev); in hclgevf_misc_irq_handle()
2091 hclgevf_enable_vector(&hdev->misc_vector, true); in hclgevf_misc_irq_handle()
2096 static int hclgevf_configure(struct hclgevf_dev *hdev) in hclgevf_configure() argument
2100 hdev->gro_en = true; in hclgevf_configure()
2102 ret = hclgevf_get_basic_info(hdev); in hclgevf_configure()
2107 ret = hclgevf_get_port_base_vlan_filter_state(hdev); in hclgevf_configure()
2112 ret = hclgevf_get_queue_info(hdev); in hclgevf_configure()
2117 ret = hclgevf_get_queue_depth(hdev); in hclgevf_configure()
2121 return hclgevf_get_pf_media_type(hdev); in hclgevf_configure()
2127 struct hclgevf_dev *hdev; in hclgevf_alloc_hdev() local
2129 hdev = devm_kzalloc(&pdev->dev, sizeof(*hdev), GFP_KERNEL); in hclgevf_alloc_hdev()
2130 if (!hdev) in hclgevf_alloc_hdev()
2133 hdev->pdev = pdev; in hclgevf_alloc_hdev()
2134 hdev->ae_dev = ae_dev; in hclgevf_alloc_hdev()
2135 ae_dev->priv = hdev; in hclgevf_alloc_hdev()
2140 static int hclgevf_init_roce_base_info(struct hclgevf_dev *hdev) in hclgevf_init_roce_base_info() argument
2142 struct hnae3_handle *roce = &hdev->roce; in hclgevf_init_roce_base_info()
2143 struct hnae3_handle *nic = &hdev->nic; in hclgevf_init_roce_base_info()
2145 roce->rinfo.num_vectors = hdev->num_roce_msix; in hclgevf_init_roce_base_info()
2147 if (hdev->num_msi_left < roce->rinfo.num_vectors || in hclgevf_init_roce_base_info()
2148 hdev->num_msi_left == 0) in hclgevf_init_roce_base_info()
2151 roce->rinfo.base_vector = hdev->roce_base_msix_offset; in hclgevf_init_roce_base_info()
2154 roce->rinfo.roce_io_base = hdev->hw.hw.io_base; in hclgevf_init_roce_base_info()
2155 roce->rinfo.roce_mem_base = hdev->hw.hw.mem_base; in hclgevf_init_roce_base_info()
2164 static int hclgevf_config_gro(struct hclgevf_dev *hdev) in hclgevf_config_gro() argument
2170 if (!hnae3_ae_dev_gro_supported(hdev->ae_dev)) in hclgevf_config_gro()
2177 req->gro_en = hdev->gro_en ? 1 : 0; in hclgevf_config_gro()
2179 ret = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_config_gro()
2181 dev_err(&hdev->pdev->dev, in hclgevf_config_gro()
2187 static int hclgevf_rss_init_hw(struct hclgevf_dev *hdev) in hclgevf_rss_init_hw() argument
2189 struct hclge_comm_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_rss_init_hw()
2195 if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) { in hclgevf_rss_init_hw()
2196 ret = hclge_comm_set_rss_algo_key(&hdev->hw.hw, in hclgevf_rss_init_hw()
2202 ret = hclge_comm_set_rss_input_tuple(&hdev->hw.hw, rss_cfg); in hclgevf_rss_init_hw()
2207 ret = hclge_comm_set_rss_indir_table(hdev->ae_dev, &hdev->hw.hw, in hclgevf_rss_init_hw()
2212 hclge_comm_get_rss_tc_info(rss_cfg->rss_size, hdev->hw_tc_map, in hclgevf_rss_init_hw()
2215 return hclge_comm_set_rss_tc_mode(&hdev->hw.hw, tc_offset, in hclgevf_rss_init_hw()
2219 static int hclgevf_init_vlan_config(struct hclgevf_dev *hdev, in hclgevf_init_vlan_config() argument
2222 struct hnae3_handle *nic = &hdev->nic; in hclgevf_init_vlan_config()
2227 dev_err(&hdev->pdev->dev, in hclgevf_init_vlan_config()
2232 return hclgevf_set_vlan_filter(&hdev->nic, htons(ETH_P_8021Q), 0, in hclgevf_init_vlan_config()
2236 static void hclgevf_flush_link_update(struct hclgevf_dev *hdev) in hclgevf_flush_link_update() argument
2240 unsigned long last = hdev->serv_processed_cnt; in hclgevf_flush_link_update()
2243 while (test_bit(HCLGEVF_STATE_LINK_UPDATING, &hdev->state) && in hclgevf_flush_link_update()
2245 last == hdev->serv_processed_cnt) in hclgevf_flush_link_update()
2251 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_timer_task() local
2254 hclgevf_task_schedule(hdev, 0); in hclgevf_set_timer_task()
2256 set_bit(HCLGEVF_STATE_DOWN, &hdev->state); in hclgevf_set_timer_task()
2259 hclgevf_flush_link_update(hdev); in hclgevf_set_timer_task()
2265 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_ae_start() local
2267 clear_bit(HCLGEVF_STATE_DOWN, &hdev->state); in hclgevf_ae_start()
2268 clear_bit(HCLGEVF_STATE_PF_PUSH_LINK_STATUS, &hdev->state); in hclgevf_ae_start()
2272 hclgevf_request_link_info(hdev); in hclgevf_ae_start()
2274 hclgevf_update_link_mode(hdev); in hclgevf_ae_start()
2281 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_ae_stop() local
2283 set_bit(HCLGEVF_STATE_DOWN, &hdev->state); in hclgevf_ae_stop()
2285 if (hdev->reset_type != HNAE3_VF_RESET) in hclgevf_ae_stop()
2289 hclgevf_update_link_status(hdev, 0); in hclgevf_ae_stop()
2297 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_alive() local
2303 return hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_set_alive()
2313 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_client_stop() local
2318 dev_warn(&hdev->pdev->dev, in hclgevf_client_stop()
2322 static void hclgevf_state_init(struct hclgevf_dev *hdev) in hclgevf_state_init() argument
2324 clear_bit(HCLGEVF_STATE_MBX_SERVICE_SCHED, &hdev->state); in hclgevf_state_init()
2325 clear_bit(HCLGEVF_STATE_MBX_HANDLING, &hdev->state); in hclgevf_state_init()
2326 clear_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state); in hclgevf_state_init()
2328 INIT_DELAYED_WORK(&hdev->service_task, hclgevf_service_task); in hclgevf_state_init()
2330 timer_setup(&hdev->reset_timer, hclgevf_reset_timer, 0); in hclgevf_state_init()
2332 mutex_init(&hdev->mbx_resp.mbx_mutex); in hclgevf_state_init()
2333 sema_init(&hdev->reset_sem, 1); in hclgevf_state_init()
2335 spin_lock_init(&hdev->mac_table.mac_list_lock); in hclgevf_state_init()
2336 INIT_LIST_HEAD(&hdev->mac_table.uc_mac_list); in hclgevf_state_init()
2337 INIT_LIST_HEAD(&hdev->mac_table.mc_mac_list); in hclgevf_state_init()
2340 set_bit(HCLGEVF_STATE_DOWN, &hdev->state); in hclgevf_state_init()
2343 static void hclgevf_state_uninit(struct hclgevf_dev *hdev) in hclgevf_state_uninit() argument
2345 set_bit(HCLGEVF_STATE_DOWN, &hdev->state); in hclgevf_state_uninit()
2346 set_bit(HCLGEVF_STATE_REMOVING, &hdev->state); in hclgevf_state_uninit()
2348 if (hdev->service_task.work.func) in hclgevf_state_uninit()
2349 cancel_delayed_work_sync(&hdev->service_task); in hclgevf_state_uninit()
2351 mutex_destroy(&hdev->mbx_resp.mbx_mutex); in hclgevf_state_uninit()
2354 static int hclgevf_init_msi(struct hclgevf_dev *hdev) in hclgevf_init_msi() argument
2356 struct pci_dev *pdev = hdev->pdev; in hclgevf_init_msi()
2360 if (hnae3_dev_roce_supported(hdev)) in hclgevf_init_msi()
2362 hdev->roce_base_msix_offset + 1, in hclgevf_init_msi()
2363 hdev->num_msi, in hclgevf_init_msi()
2367 hdev->num_msi, in hclgevf_init_msi()
2376 if (vectors < hdev->num_msi) in hclgevf_init_msi()
2377 dev_warn(&hdev->pdev->dev, in hclgevf_init_msi()
2379 hdev->num_msi, vectors); in hclgevf_init_msi()
2381 hdev->num_msi = vectors; in hclgevf_init_msi()
2382 hdev->num_msi_left = vectors; in hclgevf_init_msi()
2384 hdev->vector_status = devm_kcalloc(&pdev->dev, hdev->num_msi, in hclgevf_init_msi()
2386 if (!hdev->vector_status) { in hclgevf_init_msi()
2391 for (i = 0; i < hdev->num_msi; i++) in hclgevf_init_msi()
2392 hdev->vector_status[i] = HCLGEVF_INVALID_VPORT; in hclgevf_init_msi()
2394 hdev->vector_irq = devm_kcalloc(&pdev->dev, hdev->num_msi, in hclgevf_init_msi()
2396 if (!hdev->vector_irq) { in hclgevf_init_msi()
2397 devm_kfree(&pdev->dev, hdev->vector_status); in hclgevf_init_msi()
2405 static void hclgevf_uninit_msi(struct hclgevf_dev *hdev) in hclgevf_uninit_msi() argument
2407 struct pci_dev *pdev = hdev->pdev; in hclgevf_uninit_msi()
2409 devm_kfree(&pdev->dev, hdev->vector_status); in hclgevf_uninit_msi()
2410 devm_kfree(&pdev->dev, hdev->vector_irq); in hclgevf_uninit_msi()
2414 static int hclgevf_misc_irq_init(struct hclgevf_dev *hdev) in hclgevf_misc_irq_init() argument
2418 hclgevf_get_misc_vector(hdev); in hclgevf_misc_irq_init()
2420 snprintf(hdev->misc_vector.name, HNAE3_INT_NAME_LEN, "%s-misc-%s", in hclgevf_misc_irq_init()
2421 HCLGEVF_NAME, pci_name(hdev->pdev)); in hclgevf_misc_irq_init()
2422 ret = request_irq(hdev->misc_vector.vector_irq, hclgevf_misc_irq_handle, in hclgevf_misc_irq_init()
2423 0, hdev->misc_vector.name, hdev); in hclgevf_misc_irq_init()
2425 dev_err(&hdev->pdev->dev, "VF failed to request misc irq(%d)\n", in hclgevf_misc_irq_init()
2426 hdev->misc_vector.vector_irq); in hclgevf_misc_irq_init()
2430 hclgevf_clear_event_cause(hdev, 0); in hclgevf_misc_irq_init()
2433 hclgevf_enable_vector(&hdev->misc_vector, true); in hclgevf_misc_irq_init()
2438 static void hclgevf_misc_irq_uninit(struct hclgevf_dev *hdev) in hclgevf_misc_irq_uninit() argument
2441 hclgevf_enable_vector(&hdev->misc_vector, false); in hclgevf_misc_irq_uninit()
2442 synchronize_irq(hdev->misc_vector.vector_irq); in hclgevf_misc_irq_uninit()
2443 free_irq(hdev->misc_vector.vector_irq, hdev); in hclgevf_misc_irq_uninit()
2444 hclgevf_free_vector(hdev, 0); in hclgevf_misc_irq_uninit()
2447 static void hclgevf_info_show(struct hclgevf_dev *hdev) in hclgevf_info_show() argument
2449 struct device *dev = &hdev->pdev->dev; in hclgevf_info_show()
2453 dev_info(dev, "Task queue pairs numbers: %u\n", hdev->num_tqps); in hclgevf_info_show()
2454 dev_info(dev, "Desc num per TX queue: %u\n", hdev->num_tx_desc); in hclgevf_info_show()
2455 dev_info(dev, "Desc num per RX queue: %u\n", hdev->num_rx_desc); in hclgevf_info_show()
2456 dev_info(dev, "Numbers of vports: %u\n", hdev->num_alloc_vport); in hclgevf_info_show()
2457 dev_info(dev, "HW tc map: 0x%x\n", hdev->hw_tc_map); in hclgevf_info_show()
2459 hdev->hw.mac.media_type); in hclgevf_info_show()
2467 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_init_nic_client_instance() local
2468 u32 rst_cnt = hdev->rst_stats.rst_cnt; in hclgevf_init_nic_client_instance()
2471 ret = client->ops->init_instance(&hdev->nic); in hclgevf_init_nic_client_instance()
2475 set_bit(HCLGEVF_STATE_NIC_REGISTERED, &hdev->state); in hclgevf_init_nic_client_instance()
2476 if (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state) || in hclgevf_init_nic_client_instance()
2477 rst_cnt != hdev->rst_stats.rst_cnt) { in hclgevf_init_nic_client_instance()
2478 clear_bit(HCLGEVF_STATE_NIC_REGISTERED, &hdev->state); in hclgevf_init_nic_client_instance()
2480 client->ops->uninit_instance(&hdev->nic, 0); in hclgevf_init_nic_client_instance()
2486 if (netif_msg_drv(&hdev->nic)) in hclgevf_init_nic_client_instance()
2487 hclgevf_info_show(hdev); in hclgevf_init_nic_client_instance()
2495 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_init_roce_client_instance() local
2498 if (!hnae3_dev_roce_supported(hdev) || !hdev->roce_client || in hclgevf_init_roce_client_instance()
2499 !hdev->nic_client) in hclgevf_init_roce_client_instance()
2502 ret = hclgevf_init_roce_base_info(hdev); in hclgevf_init_roce_client_instance()
2506 ret = client->ops->init_instance(&hdev->roce); in hclgevf_init_roce_client_instance()
2510 set_bit(HCLGEVF_STATE_ROCE_REGISTERED, &hdev->state); in hclgevf_init_roce_client_instance()
2519 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_init_client_instance() local
2524 hdev->nic_client = client; in hclgevf_init_client_instance()
2525 hdev->nic.client = client; in hclgevf_init_client_instance()
2532 hdev->roce_client); in hclgevf_init_client_instance()
2538 if (hnae3_dev_roce_supported(hdev)) { in hclgevf_init_client_instance()
2539 hdev->roce_client = client; in hclgevf_init_client_instance()
2540 hdev->roce.client = client; in hclgevf_init_client_instance()
2555 hdev->nic_client = NULL; in hclgevf_init_client_instance()
2556 hdev->nic.client = NULL; in hclgevf_init_client_instance()
2559 hdev->roce_client = NULL; in hclgevf_init_client_instance()
2560 hdev->roce.client = NULL; in hclgevf_init_client_instance()
2567 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_uninit_client_instance() local
2570 if (hdev->roce_client) { in hclgevf_uninit_client_instance()
2571 while (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state)) in hclgevf_uninit_client_instance()
2573 clear_bit(HCLGEVF_STATE_ROCE_REGISTERED, &hdev->state); in hclgevf_uninit_client_instance()
2575 hdev->roce_client->ops->uninit_instance(&hdev->roce, 0); in hclgevf_uninit_client_instance()
2576 hdev->roce_client = NULL; in hclgevf_uninit_client_instance()
2577 hdev->roce.client = NULL; in hclgevf_uninit_client_instance()
2581 if (client->ops->uninit_instance && hdev->nic_client && in hclgevf_uninit_client_instance()
2583 while (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state)) in hclgevf_uninit_client_instance()
2585 clear_bit(HCLGEVF_STATE_NIC_REGISTERED, &hdev->state); in hclgevf_uninit_client_instance()
2587 client->ops->uninit_instance(&hdev->nic, 0); in hclgevf_uninit_client_instance()
2588 hdev->nic_client = NULL; in hclgevf_uninit_client_instance()
2589 hdev->nic.client = NULL; in hclgevf_uninit_client_instance()
2593 static int hclgevf_dev_mem_map(struct hclgevf_dev *hdev) in hclgevf_dev_mem_map() argument
2595 struct pci_dev *pdev = hdev->pdev; in hclgevf_dev_mem_map()
2596 struct hclgevf_hw *hw = &hdev->hw; in hclgevf_dev_mem_map()
2614 static int hclgevf_pci_init(struct hclgevf_dev *hdev) in hclgevf_pci_init() argument
2616 struct pci_dev *pdev = hdev->pdev; in hclgevf_pci_init()
2639 hw = &hdev->hw; in hclgevf_pci_init()
2647 ret = hclgevf_dev_mem_map(hdev); in hclgevf_pci_init()
2654 pci_iounmap(pdev, hdev->hw.hw.io_base); in hclgevf_pci_init()
2663 static void hclgevf_pci_uninit(struct hclgevf_dev *hdev) in hclgevf_pci_uninit() argument
2665 struct pci_dev *pdev = hdev->pdev; in hclgevf_pci_uninit()
2667 if (hdev->hw.hw.mem_base) in hclgevf_pci_uninit()
2668 devm_iounmap(&pdev->dev, hdev->hw.hw.mem_base); in hclgevf_pci_uninit()
2670 pci_iounmap(pdev, hdev->hw.hw.io_base); in hclgevf_pci_uninit()
2675 static int hclgevf_query_vf_resource(struct hclgevf_dev *hdev) in hclgevf_query_vf_resource() argument
2682 ret = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_query_vf_resource()
2684 dev_err(&hdev->pdev->dev, in hclgevf_query_vf_resource()
2691 if (hnae3_dev_roce_supported(hdev)) { in hclgevf_query_vf_resource()
2692 hdev->roce_base_msix_offset = in hclgevf_query_vf_resource()
2696 hdev->num_roce_msix = in hclgevf_query_vf_resource()
2701 hdev->num_nic_msix = hdev->num_roce_msix; in hclgevf_query_vf_resource()
2706 hdev->num_msi = hdev->num_roce_msix + in hclgevf_query_vf_resource()
2707 hdev->roce_base_msix_offset; in hclgevf_query_vf_resource()
2709 hdev->num_msi = in hclgevf_query_vf_resource()
2713 hdev->num_nic_msix = hdev->num_msi; in hclgevf_query_vf_resource()
2716 if (hdev->num_nic_msix < HNAE3_MIN_VECTOR_NUM) { in hclgevf_query_vf_resource()
2717 dev_err(&hdev->pdev->dev, in hclgevf_query_vf_resource()
2719 hdev->num_nic_msix); in hclgevf_query_vf_resource()
2726 static void hclgevf_set_default_dev_specs(struct hclgevf_dev *hdev) in hclgevf_set_default_dev_specs() argument
2730 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev); in hclgevf_set_default_dev_specs()
2740 static void hclgevf_parse_dev_specs(struct hclgevf_dev *hdev, in hclgevf_parse_dev_specs() argument
2743 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev); in hclgevf_parse_dev_specs()
2759 static void hclgevf_check_dev_specs(struct hclgevf_dev *hdev) in hclgevf_check_dev_specs() argument
2761 struct hnae3_dev_specs *dev_specs = &hdev->ae_dev->dev_specs; in hclgevf_check_dev_specs()
2775 static int hclgevf_query_dev_specs(struct hclgevf_dev *hdev) in hclgevf_query_dev_specs() argument
2784 if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V3) { in hclgevf_query_dev_specs()
2785 hclgevf_set_default_dev_specs(hdev); in hclgevf_query_dev_specs()
2796 ret = hclgevf_cmd_send(&hdev->hw, desc, HCLGEVF_QUERY_DEV_SPECS_BD_NUM); in hclgevf_query_dev_specs()
2800 hclgevf_parse_dev_specs(hdev, desc); in hclgevf_query_dev_specs()
2801 hclgevf_check_dev_specs(hdev); in hclgevf_query_dev_specs()
2806 static int hclgevf_pci_reset(struct hclgevf_dev *hdev) in hclgevf_pci_reset() argument
2808 struct pci_dev *pdev = hdev->pdev; in hclgevf_pci_reset()
2811 if ((hdev->reset_type == HNAE3_VF_FULL_RESET || in hclgevf_pci_reset()
2812 hdev->reset_type == HNAE3_FLR_RESET) && in hclgevf_pci_reset()
2813 test_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state)) { in hclgevf_pci_reset()
2814 hclgevf_misc_irq_uninit(hdev); in hclgevf_pci_reset()
2815 hclgevf_uninit_msi(hdev); in hclgevf_pci_reset()
2816 clear_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state); in hclgevf_pci_reset()
2819 if (!test_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state)) { in hclgevf_pci_reset()
2821 ret = hclgevf_init_msi(hdev); in hclgevf_pci_reset()
2828 ret = hclgevf_misc_irq_init(hdev); in hclgevf_pci_reset()
2830 hclgevf_uninit_msi(hdev); in hclgevf_pci_reset()
2836 set_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state); in hclgevf_pci_reset()
2842 static int hclgevf_clear_vport_list(struct hclgevf_dev *hdev) in hclgevf_clear_vport_list() argument
2848 return hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_clear_vport_list()
2851 static void hclgevf_init_rxd_adv_layout(struct hclgevf_dev *hdev) in hclgevf_init_rxd_adv_layout() argument
2853 if (hnae3_ae_dev_rxd_adv_layout_supported(hdev->ae_dev)) in hclgevf_init_rxd_adv_layout()
2854 hclgevf_write_dev(&hdev->hw, HCLGEVF_RXD_ADV_LAYOUT_EN_REG, 1); in hclgevf_init_rxd_adv_layout()
2857 static void hclgevf_uninit_rxd_adv_layout(struct hclgevf_dev *hdev) in hclgevf_uninit_rxd_adv_layout() argument
2859 if (hnae3_ae_dev_rxd_adv_layout_supported(hdev->ae_dev)) in hclgevf_uninit_rxd_adv_layout()
2860 hclgevf_write_dev(&hdev->hw, HCLGEVF_RXD_ADV_LAYOUT_EN_REG, 0); in hclgevf_uninit_rxd_adv_layout()
2863 static int hclgevf_reset_hdev(struct hclgevf_dev *hdev) in hclgevf_reset_hdev() argument
2865 struct pci_dev *pdev = hdev->pdev; in hclgevf_reset_hdev()
2868 ret = hclgevf_pci_reset(hdev); in hclgevf_reset_hdev()
2874 hclgevf_arq_init(hdev); in hclgevf_reset_hdev()
2876 ret = hclge_comm_cmd_init(hdev->ae_dev, &hdev->hw.hw, in hclgevf_reset_hdev()
2877 &hdev->fw_version, false, in hclgevf_reset_hdev()
2878 hdev->reset_pending); in hclgevf_reset_hdev()
2884 ret = hclgevf_rss_init_hw(hdev); in hclgevf_reset_hdev()
2886 dev_err(&hdev->pdev->dev, in hclgevf_reset_hdev()
2891 ret = hclgevf_config_gro(hdev); in hclgevf_reset_hdev()
2895 ret = hclgevf_init_vlan_config(hdev, hdev->rxvtag_strip_en); in hclgevf_reset_hdev()
2897 dev_err(&hdev->pdev->dev, in hclgevf_reset_hdev()
2903 ret = hclgevf_get_port_base_vlan_filter_state(hdev); in hclgevf_reset_hdev()
2907 set_bit(HCLGEVF_STATE_PROMISC_CHANGED, &hdev->state); in hclgevf_reset_hdev()
2909 hclgevf_init_rxd_adv_layout(hdev); in hclgevf_reset_hdev()
2911 dev_info(&hdev->pdev->dev, "Reset done\n"); in hclgevf_reset_hdev()
2916 static int hclgevf_init_hdev(struct hclgevf_dev *hdev) in hclgevf_init_hdev() argument
2918 struct pci_dev *pdev = hdev->pdev; in hclgevf_init_hdev()
2921 ret = hclgevf_pci_init(hdev); in hclgevf_init_hdev()
2925 ret = hclge_comm_cmd_queue_init(hdev->pdev, &hdev->hw.hw); in hclgevf_init_hdev()
2929 hclgevf_arq_init(hdev); in hclgevf_init_hdev()
2931 hclge_comm_cmd_init_ops(&hdev->hw.hw, &hclgevf_cmq_ops); in hclgevf_init_hdev()
2932 ret = hclge_comm_cmd_init(hdev->ae_dev, &hdev->hw.hw, in hclgevf_init_hdev()
2933 &hdev->fw_version, false, in hclgevf_init_hdev()
2934 hdev->reset_pending); in hclgevf_init_hdev()
2939 ret = hclgevf_query_vf_resource(hdev); in hclgevf_init_hdev()
2943 ret = hclgevf_query_dev_specs(hdev); in hclgevf_init_hdev()
2950 ret = hclgevf_init_msi(hdev); in hclgevf_init_hdev()
2956 hclgevf_state_init(hdev); in hclgevf_init_hdev()
2957 hdev->reset_level = HNAE3_VF_FUNC_RESET; in hclgevf_init_hdev()
2958 hdev->reset_type = HNAE3_NONE_RESET; in hclgevf_init_hdev()
2960 ret = hclgevf_misc_irq_init(hdev); in hclgevf_init_hdev()
2964 set_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state); in hclgevf_init_hdev()
2966 ret = hclgevf_configure(hdev); in hclgevf_init_hdev()
2972 ret = hclgevf_alloc_tqps(hdev); in hclgevf_init_hdev()
2978 ret = hclgevf_set_handle_info(hdev); in hclgevf_init_hdev()
2982 ret = hclgevf_config_gro(hdev); in hclgevf_init_hdev()
2987 ret = hclge_comm_rss_init_cfg(&hdev->nic, hdev->ae_dev, in hclgevf_init_hdev()
2988 &hdev->rss_cfg); in hclgevf_init_hdev()
2994 ret = hclgevf_rss_init_hw(hdev); in hclgevf_init_hdev()
2996 dev_err(&hdev->pdev->dev, in hclgevf_init_hdev()
3002 ret = hclgevf_clear_vport_list(hdev); in hclgevf_init_hdev()
3010 ret = hclgevf_init_vlan_config(hdev, true); in hclgevf_init_hdev()
3012 dev_err(&hdev->pdev->dev, in hclgevf_init_hdev()
3017 hclgevf_init_rxd_adv_layout(hdev); in hclgevf_init_hdev()
3019 ret = hclgevf_devlink_init(hdev); in hclgevf_init_hdev()
3023 set_bit(HCLGEVF_STATE_SERVICE_INITED, &hdev->state); in hclgevf_init_hdev()
3025 hdev->last_reset_time = jiffies; in hclgevf_init_hdev()
3026 dev_info(&hdev->pdev->dev, "finished initializing %s driver\n", in hclgevf_init_hdev()
3029 hclgevf_task_schedule(hdev, round_jiffies_relative(HZ)); in hclgevf_init_hdev()
3034 hclgevf_misc_irq_uninit(hdev); in hclgevf_init_hdev()
3036 hclgevf_state_uninit(hdev); in hclgevf_init_hdev()
3037 hclgevf_uninit_msi(hdev); in hclgevf_init_hdev()
3039 hclge_comm_cmd_uninit(hdev->ae_dev, &hdev->hw.hw); in hclgevf_init_hdev()
3041 hclgevf_pci_uninit(hdev); in hclgevf_init_hdev()
3042 clear_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state); in hclgevf_init_hdev()
3046 static void hclgevf_uninit_hdev(struct hclgevf_dev *hdev) in hclgevf_uninit_hdev() argument
3050 hclgevf_state_uninit(hdev); in hclgevf_uninit_hdev()
3051 hclgevf_uninit_rxd_adv_layout(hdev); in hclgevf_uninit_hdev()
3054 hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_uninit_hdev()
3056 if (test_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state)) { in hclgevf_uninit_hdev()
3057 hclgevf_misc_irq_uninit(hdev); in hclgevf_uninit_hdev()
3058 hclgevf_uninit_msi(hdev); in hclgevf_uninit_hdev()
3061 hclge_comm_cmd_uninit(hdev->ae_dev, &hdev->hw.hw); in hclgevf_uninit_hdev()
3062 hclgevf_devlink_uninit(hdev); in hclgevf_uninit_hdev()
3063 hclgevf_pci_uninit(hdev); in hclgevf_uninit_hdev()
3064 hclgevf_uninit_mac_list(hdev); in hclgevf_uninit_hdev()
3089 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_uninit_ae_dev() local
3091 hclgevf_uninit_hdev(hdev); in hclgevf_uninit_ae_dev()
3095 static u32 hclgevf_get_max_channels(struct hclgevf_dev *hdev) in hclgevf_get_max_channels() argument
3097 return min(hdev->rss_size_max, hdev->num_tqps); in hclgevf_get_max_channels()
3113 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_channels() local
3115 ch->max_combined = hclgevf_get_max_channels(hdev); in hclgevf_get_channels()
3124 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_tqps_and_rss_info() local
3126 *alloc_tqps = hdev->num_tqps; in hclgevf_get_tqps_and_rss_info()
3127 *max_rss_size = hdev->rss_size_max; in hclgevf_get_tqps_and_rss_info()
3134 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_update_rss_size() local
3139 max_rss_size = min_t(u16, hdev->rss_size_max, in hclgevf_update_rss_size()
3140 hdev->num_tqps / kinfo->tc_info.num_tc); in hclgevf_update_rss_size()
3158 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_channels() local
3171 hclge_comm_get_rss_tc_info(kinfo->rss_size, hdev->hw_tc_map, in hclgevf_set_channels()
3173 ret = hclge_comm_set_rss_tc_mode(&hdev->hw.hw, tc_offset, in hclgevf_set_channels()
3183 rss_indir = kcalloc(hdev->ae_dev->dev_specs.rss_ind_tbl_size, in hclgevf_set_channels()
3188 for (i = 0; i < hdev->ae_dev->dev_specs.rss_ind_tbl_size; i++) in hclgevf_set_channels()
3191 hdev->rss_cfg.rss_size = kinfo->rss_size; in hclgevf_set_channels()
3195 dev_err(&hdev->pdev->dev, "set rss indir table fail, ret=%d\n", in hclgevf_set_channels()
3202 dev_info(&hdev->pdev->dev, in hclgevf_set_channels()
3212 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_status() local
3214 return hdev->hw.mac.link; in hclgevf_get_status()
3221 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_ksettings_an_result() local
3224 *speed = hdev->hw.mac.speed; in hclgevf_get_ksettings_an_result()
3226 *duplex = hdev->hw.mac.duplex; in hclgevf_get_ksettings_an_result()
3231 void hclgevf_update_speed_duplex(struct hclgevf_dev *hdev, u32 speed, in hclgevf_update_speed_duplex() argument
3234 hdev->hw.mac.speed = speed; in hclgevf_update_speed_duplex()
3235 hdev->hw.mac.duplex = duplex; in hclgevf_update_speed_duplex()
3240 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_gro_en() local
3241 bool gro_en_old = hdev->gro_en; in hclgevf_gro_en()
3244 hdev->gro_en = enable; in hclgevf_gro_en()
3245 ret = hclgevf_config_gro(hdev); in hclgevf_gro_en()
3247 hdev->gro_en = gro_en_old; in hclgevf_gro_en()
3255 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_media_type() local
3258 *media_type = hdev->hw.mac.media_type; in hclgevf_get_media_type()
3261 *module_type = hdev->hw.mac.module_type; in hclgevf_get_media_type()
3266 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_hw_reset_stat() local
3268 return !!hclgevf_read_dev(&hdev->hw, HCLGEVF_RST_ING); in hclgevf_get_hw_reset_stat()
3273 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_cmdq_stat() local
3275 return test_bit(HCLGE_COMM_STATE_CMD_DISABLE, &hdev->hw.hw.comm_state); in hclgevf_get_cmdq_stat()
3280 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_ae_dev_resetting() local
3282 return test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state); in hclgevf_ae_dev_resetting()
3287 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_ae_dev_reset_cnt() local
3289 return hdev->rst_stats.hw_rst_done_cnt; in hclgevf_ae_dev_reset_cnt()
3296 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_link_mode() local
3298 *supported = hdev->hw.mac.supported; in hclgevf_get_link_mode()
3299 *advertising = hdev->hw.mac.advertising; in hclgevf_get_link_mode()
3302 void hclgevf_update_port_base_vlan_info(struct hclgevf_dev *hdev, u16 state, in hclgevf_update_port_base_vlan_info() argument
3305 struct hnae3_handle *nic = &hdev->nic; in hclgevf_update_port_base_vlan_info()
3311 if (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state) || in hclgevf_update_port_base_vlan_info()
3312 test_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state)) { in hclgevf_update_port_base_vlan_info()
3313 dev_warn(&hdev->pdev->dev, in hclgevf_update_port_base_vlan_info()
3319 ret = hclgevf_notify_client(hdev, HNAE3_DOWN_CLIENT); in hclgevf_update_port_base_vlan_info()
3329 ret = hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_update_port_base_vlan_info()
3337 hclgevf_notify_client(hdev, HNAE3_UP_CLIENT); in hclgevf_update_port_base_vlan_info()