• Home
  • Raw
  • Download

Lines Matching refs:hdev

17 static int hclgevf_reset_hdev(struct hclgevf_dev *hdev);
18 static void hclgevf_task_schedule(struct hclgevf_dev *hdev,
108 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_tqps_update_stats() local
121 status = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_tqps_update_stats()
123 dev_err(&hdev->pdev->dev, in hclgevf_tqps_update_stats()
135 status = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_tqps_update_stats()
137 dev_err(&hdev->pdev->dev, in hclgevf_tqps_update_stats()
203 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_update_stats() local
208 dev_err(&hdev->pdev->dev, in hclgevf_update_stats()
247 static int hclgevf_get_basic_info(struct hclgevf_dev *hdev) in hclgevf_get_basic_info() argument
249 struct hnae3_ae_dev *ae_dev = hdev->ae_dev; in hclgevf_get_basic_info()
257 status = hclgevf_send_mbx_msg(hdev, &send_msg, true, resp_msg, in hclgevf_get_basic_info()
260 dev_err(&hdev->pdev->dev, in hclgevf_get_basic_info()
267 hdev->hw_tc_map = basic_info->hw_tc_map; in hclgevf_get_basic_info()
268 hdev->mbx_api_version = basic_info->mbx_api_version; in hclgevf_get_basic_info()
276 static int hclgevf_get_port_base_vlan_filter_state(struct hclgevf_dev *hdev) in hclgevf_get_port_base_vlan_filter_state() argument
278 struct hnae3_handle *nic = &hdev->nic; in hclgevf_get_port_base_vlan_filter_state()
285 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, &resp_msg, in hclgevf_get_port_base_vlan_filter_state()
288 dev_err(&hdev->pdev->dev, in hclgevf_get_port_base_vlan_filter_state()
299 static int hclgevf_get_queue_info(struct hclgevf_dev *hdev) in hclgevf_get_queue_info() argument
311 status = hclgevf_send_mbx_msg(hdev, &send_msg, true, resp_msg, in hclgevf_get_queue_info()
314 dev_err(&hdev->pdev->dev, in hclgevf_get_queue_info()
320 memcpy(&hdev->num_tqps, &resp_msg[HCLGEVF_TQPS_ALLOC_OFFSET], in hclgevf_get_queue_info()
322 memcpy(&hdev->rss_size_max, &resp_msg[HCLGEVF_TQPS_RSS_SIZE_OFFSET], in hclgevf_get_queue_info()
324 memcpy(&hdev->rx_buf_len, &resp_msg[HCLGEVF_TQPS_RX_BUFFER_LEN_OFFSET], in hclgevf_get_queue_info()
330 static int hclgevf_get_queue_depth(struct hclgevf_dev *hdev) in hclgevf_get_queue_depth() argument
341 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, resp_msg, in hclgevf_get_queue_depth()
344 dev_err(&hdev->pdev->dev, in hclgevf_get_queue_depth()
350 memcpy(&hdev->num_tx_desc, &resp_msg[HCLGEVF_TQPS_NUM_TX_DESC_OFFSET], in hclgevf_get_queue_depth()
352 memcpy(&hdev->num_rx_desc, &resp_msg[HCLGEVF_TQPS_NUM_RX_DESC_OFFSET], in hclgevf_get_queue_depth()
360 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_qid_global() local
368 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, resp_data, in hclgevf_get_qid_global()
376 static int hclgevf_get_pf_media_type(struct hclgevf_dev *hdev) in hclgevf_get_pf_media_type() argument
383 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, resp_msg, in hclgevf_get_pf_media_type()
386 dev_err(&hdev->pdev->dev, in hclgevf_get_pf_media_type()
392 hdev->hw.mac.media_type = resp_msg[0]; in hclgevf_get_pf_media_type()
393 hdev->hw.mac.module_type = resp_msg[1]; in hclgevf_get_pf_media_type()
398 static int hclgevf_alloc_tqps(struct hclgevf_dev *hdev) in hclgevf_alloc_tqps() argument
403 hdev->htqp = devm_kcalloc(&hdev->pdev->dev, hdev->num_tqps, in hclgevf_alloc_tqps()
405 if (!hdev->htqp) in hclgevf_alloc_tqps()
408 tqp = hdev->htqp; in hclgevf_alloc_tqps()
410 for (i = 0; i < hdev->num_tqps; i++) { in hclgevf_alloc_tqps()
411 tqp->dev = &hdev->pdev->dev; in hclgevf_alloc_tqps()
415 tqp->q.buf_size = hdev->rx_buf_len; in hclgevf_alloc_tqps()
416 tqp->q.tx_desc_num = hdev->num_tx_desc; in hclgevf_alloc_tqps()
417 tqp->q.rx_desc_num = hdev->num_rx_desc; in hclgevf_alloc_tqps()
423 tqp->q.io_base = hdev->hw.io_base + in hclgevf_alloc_tqps()
427 tqp->q.io_base = hdev->hw.io_base + in hclgevf_alloc_tqps()
439 static int hclgevf_knic_setup(struct hclgevf_dev *hdev) in hclgevf_knic_setup() argument
441 struct hnae3_handle *nic = &hdev->nic; in hclgevf_knic_setup()
443 u16 new_tqps = hdev->num_tqps; in hclgevf_knic_setup()
448 kinfo->num_tx_desc = hdev->num_tx_desc; in hclgevf_knic_setup()
449 kinfo->num_rx_desc = hdev->num_rx_desc; in hclgevf_knic_setup()
450 kinfo->rx_buf_len = hdev->rx_buf_len; in hclgevf_knic_setup()
452 if (hdev->hw_tc_map & BIT(i)) in hclgevf_knic_setup()
457 kinfo->rss_size = min_t(u16, hdev->rss_size_max, new_tqps / num_tc); in hclgevf_knic_setup()
459 kinfo->num_tqps = min(new_tqps, hdev->num_tqps); in hclgevf_knic_setup()
461 kinfo->tqp = devm_kcalloc(&hdev->pdev->dev, kinfo->num_tqps, in hclgevf_knic_setup()
467 hdev->htqp[i].q.handle = &hdev->nic; in hclgevf_knic_setup()
468 hdev->htqp[i].q.tqp_index = i; in hclgevf_knic_setup()
469 kinfo->tqp[i] = &hdev->htqp[i].q; in hclgevf_knic_setup()
475 kinfo->num_tqps = min_t(u16, hdev->num_nic_msix - 1, kinfo->num_tqps); in hclgevf_knic_setup()
482 static void hclgevf_request_link_info(struct hclgevf_dev *hdev) in hclgevf_request_link_info() argument
488 status = hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_request_link_info()
490 dev_err(&hdev->pdev->dev, in hclgevf_request_link_info()
494 void hclgevf_update_link_status(struct hclgevf_dev *hdev, int link_state) in hclgevf_update_link_status() argument
496 struct hnae3_handle *rhandle = &hdev->roce; in hclgevf_update_link_status()
497 struct hnae3_handle *handle = &hdev->nic; in hclgevf_update_link_status()
501 if (test_and_set_bit(HCLGEVF_STATE_LINK_UPDATING, &hdev->state)) in hclgevf_update_link_status()
505 rclient = hdev->roce_client; in hclgevf_update_link_status()
508 test_bit(HCLGEVF_STATE_DOWN, &hdev->state) ? 0 : link_state; in hclgevf_update_link_status()
509 if (link_state != hdev->hw.mac.link) { in hclgevf_update_link_status()
510 hdev->hw.mac.link = link_state; in hclgevf_update_link_status()
516 clear_bit(HCLGEVF_STATE_LINK_UPDATING, &hdev->state); in hclgevf_update_link_status()
519 static void hclgevf_update_link_mode(struct hclgevf_dev *hdev) in hclgevf_update_link_mode() argument
528 hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_update_link_mode()
530 hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_update_link_mode()
533 static int hclgevf_set_handle_info(struct hclgevf_dev *hdev) in hclgevf_set_handle_info() argument
535 struct hnae3_handle *nic = &hdev->nic; in hclgevf_set_handle_info()
539 nic->pdev = hdev->pdev; in hclgevf_set_handle_info()
540 nic->numa_node_mask = hdev->numa_node_mask; in hclgevf_set_handle_info()
542 nic->kinfo.io_base = hdev->hw.io_base; in hclgevf_set_handle_info()
544 ret = hclgevf_knic_setup(hdev); in hclgevf_set_handle_info()
546 dev_err(&hdev->pdev->dev, "VF knic setup failed %d\n", in hclgevf_set_handle_info()
551 static void hclgevf_free_vector(struct hclgevf_dev *hdev, int vector_id) in hclgevf_free_vector() argument
553 if (hdev->vector_status[vector_id] == HCLGEVF_INVALID_VPORT) { in hclgevf_free_vector()
554 dev_warn(&hdev->pdev->dev, in hclgevf_free_vector()
559 hdev->vector_status[vector_id] = HCLGEVF_INVALID_VPORT; in hclgevf_free_vector()
560 hdev->num_msi_left += 1; in hclgevf_free_vector()
561 hdev->num_msi_used -= 1; in hclgevf_free_vector()
567 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_vector() local
572 vector_num = min_t(u16, hdev->num_nic_msix - 1, vector_num); in hclgevf_get_vector()
573 vector_num = min(hdev->num_msi_left, vector_num); in hclgevf_get_vector()
576 for (i = HCLGEVF_MISC_VECTOR_NUM + 1; i < hdev->num_msi; i++) { in hclgevf_get_vector()
577 if (hdev->vector_status[i] == HCLGEVF_INVALID_VPORT) { in hclgevf_get_vector()
578 vector->vector = pci_irq_vector(hdev->pdev, i); in hclgevf_get_vector()
579 vector->io_addr = hdev->hw.io_base + in hclgevf_get_vector()
582 hdev->vector_status[i] = 0; in hclgevf_get_vector()
583 hdev->vector_irq[i] = vector->vector; in hclgevf_get_vector()
592 hdev->num_msi_left -= alloc; in hclgevf_get_vector()
593 hdev->num_msi_used += alloc; in hclgevf_get_vector()
598 static int hclgevf_get_vector_index(struct hclgevf_dev *hdev, int vector) in hclgevf_get_vector_index() argument
602 for (i = 0; i < hdev->num_msi; i++) in hclgevf_get_vector_index()
603 if (vector == hdev->vector_irq[i]) in hclgevf_get_vector_index()
609 static int hclgevf_set_rss_algo_key(struct hclgevf_dev *hdev, in hclgevf_set_rss_algo_key() argument
637 ret = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_set_rss_algo_key()
639 dev_err(&hdev->pdev->dev, in hclgevf_set_rss_algo_key()
654 static int hclgevf_set_rss_indir_table(struct hclgevf_dev *hdev) in hclgevf_set_rss_indir_table() argument
656 const u8 *indir = hdev->rss_cfg.rss_indirection_tbl; in hclgevf_set_rss_indir_table()
664 rss_cfg_tbl_num = hdev->ae_dev->dev_specs.rss_ind_tbl_size / in hclgevf_set_rss_indir_table()
677 status = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_set_rss_indir_table()
679 dev_err(&hdev->pdev->dev, in hclgevf_set_rss_indir_table()
689 static int hclgevf_set_rss_tc_mode(struct hclgevf_dev *hdev, u16 rss_size) in hclgevf_set_rss_tc_mode() argument
708 tc_offset[i] = (hdev->hw_tc_map & BIT(i)) ? rss_size * i : 0; in hclgevf_set_rss_tc_mode()
727 status = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_set_rss_tc_mode()
729 dev_err(&hdev->pdev->dev, in hclgevf_set_rss_tc_mode()
736 static int hclgevf_get_rss_hash_key(struct hclgevf_dev *hdev) in hclgevf_get_rss_hash_key() argument
739 struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_get_rss_hash_key()
751 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, resp_msg, in hclgevf_get_rss_hash_key()
754 dev_err(&hdev->pdev->dev, in hclgevf_get_rss_hash_key()
776 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_rss() local
777 struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_get_rss()
780 if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) { in hclgevf_get_rss()
804 ret = hclgevf_get_rss_hash_key(hdev); in hclgevf_get_rss()
813 for (i = 0; i < hdev->ae_dev->dev_specs.rss_ind_tbl_size; i++) in hclgevf_get_rss()
819 static int hclgevf_parse_rss_hfunc(struct hclgevf_dev *hdev, const u8 hfunc, in hclgevf_parse_rss_hfunc() argument
830 *hash_algo = hdev->rss_cfg.hash_algo; in hclgevf_parse_rss_hfunc()
840 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_rss() local
841 struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_set_rss()
845 if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) { in hclgevf_set_rss()
846 ret = hclgevf_parse_rss_hfunc(hdev, hfunc, &hash_algo); in hclgevf_set_rss()
852 ret = hclgevf_set_rss_algo_key(hdev, hash_algo, key); in hclgevf_set_rss()
854 dev_err(&hdev->pdev->dev, in hclgevf_set_rss()
863 ret = hclgevf_set_rss_algo_key(hdev, hash_algo, in hclgevf_set_rss()
872 for (i = 0; i < hdev->ae_dev->dev_specs.rss_ind_tbl_size; i++) in hclgevf_set_rss()
876 return hclgevf_set_rss_indir_table(hdev); in hclgevf_set_rss()
908 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_init_rss_tuple_cmd() local
909 struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_init_rss_tuple_cmd()
939 if (hdev->ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2 && in hclgevf_init_rss_tuple_cmd()
961 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_rss_tuple() local
962 struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_set_rss_tuple()
967 if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2) in hclgevf_set_rss_tuple()
979 dev_err(&hdev->pdev->dev, in hclgevf_set_rss_tuple()
984 ret = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_set_rss_tuple()
986 dev_err(&hdev->pdev->dev, in hclgevf_set_rss_tuple()
1002 static int hclgevf_get_rss_tuple_by_flow_type(struct hclgevf_dev *hdev, in hclgevf_get_rss_tuple_by_flow_type() argument
1007 *tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv4_tcp_en; in hclgevf_get_rss_tuple_by_flow_type()
1010 *tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv4_udp_en; in hclgevf_get_rss_tuple_by_flow_type()
1013 *tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv6_tcp_en; in hclgevf_get_rss_tuple_by_flow_type()
1016 *tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv6_udp_en; in hclgevf_get_rss_tuple_by_flow_type()
1019 *tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv4_sctp_en; in hclgevf_get_rss_tuple_by_flow_type()
1022 *tuple_sets = hdev->rss_cfg.rss_tuple_sets.ipv6_sctp_en; in hclgevf_get_rss_tuple_by_flow_type()
1054 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_rss_tuple() local
1058 if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V2) in hclgevf_get_rss_tuple()
1063 ret = hclgevf_get_rss_tuple_by_flow_type(hdev, nfc->flow_type, in hclgevf_get_rss_tuple()
1073 static int hclgevf_set_rss_input_tuple(struct hclgevf_dev *hdev, in hclgevf_set_rss_input_tuple() argument
1093 ret = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_set_rss_input_tuple()
1095 dev_err(&hdev->pdev->dev, in hclgevf_set_rss_input_tuple()
1102 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_tc_size() local
1103 struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_get_tc_size()
1112 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_bind_ring_to_vector() local
1137 status = hclgevf_send_mbx_msg(hdev, &send_msg, false, in hclgevf_bind_ring_to_vector()
1140 dev_err(&hdev->pdev->dev, in hclgevf_bind_ring_to_vector()
1155 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_map_ring_to_vector() local
1158 vector_id = hclgevf_get_vector_index(hdev, vector); in hclgevf_map_ring_to_vector()
1173 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_unmap_ring_from_vector() local
1176 if (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state)) in hclgevf_unmap_ring_from_vector()
1179 vector_id = hclgevf_get_vector_index(hdev, vector); in hclgevf_unmap_ring_from_vector()
1198 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_put_vector() local
1201 vector_id = hclgevf_get_vector_index(hdev, vector); in hclgevf_put_vector()
1209 hclgevf_free_vector(hdev, vector_id); in hclgevf_put_vector()
1214 static int hclgevf_cmd_set_promisc_mode(struct hclgevf_dev *hdev, in hclgevf_cmd_set_promisc_mode() argument
1218 struct hnae3_handle *handle = &hdev->nic; in hclgevf_cmd_set_promisc_mode()
1230 ret = hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_cmd_set_promisc_mode()
1232 dev_err(&hdev->pdev->dev, in hclgevf_cmd_set_promisc_mode()
1241 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_promisc_mode() local
1244 en_bc_pmc = hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2; in hclgevf_set_promisc_mode()
1246 return hclgevf_cmd_set_promisc_mode(hdev, en_uc_pmc, en_mc_pmc, in hclgevf_set_promisc_mode()
1252 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_request_update_promisc_mode() local
1254 set_bit(HCLGEVF_STATE_PROMISC_CHANGED, &hdev->state); in hclgevf_request_update_promisc_mode()
1255 hclgevf_task_schedule(hdev, 0); in hclgevf_request_update_promisc_mode()
1258 static void hclgevf_sync_promisc_mode(struct hclgevf_dev *hdev) in hclgevf_sync_promisc_mode() argument
1260 struct hnae3_handle *handle = &hdev->nic; in hclgevf_sync_promisc_mode()
1265 if (test_bit(HCLGEVF_STATE_PROMISC_CHANGED, &hdev->state)) { in hclgevf_sync_promisc_mode()
1268 clear_bit(HCLGEVF_STATE_PROMISC_CHANGED, &hdev->state); in hclgevf_sync_promisc_mode()
1272 static int hclgevf_tqp_enable_cmd_send(struct hclgevf_dev *hdev, u16 tqp_id, in hclgevf_tqp_enable_cmd_send() argument
1287 return hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_tqp_enable_cmd_send()
1292 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_tqp_enable() local
1297 ret = hclgevf_tqp_enable_cmd_send(hdev, i, 0, enable); in hclgevf_tqp_enable()
1317 static int hclgevf_get_host_mac_addr(struct hclgevf_dev *hdev, u8 *p) in hclgevf_get_host_mac_addr() argument
1324 status = hclgevf_send_mbx_msg(hdev, &send_msg, true, host_mac, in hclgevf_get_host_mac_addr()
1327 dev_err(&hdev->pdev->dev, in hclgevf_get_host_mac_addr()
1339 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_mac_addr() local
1342 if (hclgevf_get_host_mac_addr(hdev, host_mac_addr)) in hclgevf_get_mac_addr()
1345 hdev->has_pf_mac = !is_zero_ether_addr(host_mac_addr); in hclgevf_get_mac_addr()
1346 if (hdev->has_pf_mac) in hclgevf_get_mac_addr()
1349 ether_addr_copy(p, hdev->hw.mac.mac_addr); in hclgevf_get_mac_addr()
1355 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_mac_addr() local
1356 u8 *old_mac_addr = (u8 *)hdev->hw.mac.mac_addr; in hclgevf_set_mac_addr()
1364 if (is_first && !hdev->has_pf_mac) in hclgevf_set_mac_addr()
1368 status = hclgevf_send_mbx_msg(hdev, &send_msg, true, NULL, 0); in hclgevf_set_mac_addr()
1370 ether_addr_copy(hdev->hw.mac.mac_addr, new_mac_addr); in hclgevf_set_mac_addr()
1420 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_update_mac_list() local
1425 &hdev->mac_table.uc_mac_list : &hdev->mac_table.mc_mac_list; in hclgevf_update_mac_list()
1427 spin_lock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_update_mac_list()
1436 spin_unlock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_update_mac_list()
1441 spin_unlock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_update_mac_list()
1447 spin_unlock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_update_mac_list()
1455 spin_unlock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_update_mac_list()
1487 static int hclgevf_add_del_mac_addr(struct hclgevf_dev *hdev, in hclgevf_add_del_mac_addr() argument
1510 return hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_add_del_mac_addr()
1513 static void hclgevf_config_mac_list(struct hclgevf_dev *hdev, in hclgevf_config_mac_list() argument
1522 ret = hclgevf_add_del_mac_addr(hdev, mac_node, mac_type); in hclgevf_config_mac_list()
1526 dev_err(&hdev->pdev->dev, in hclgevf_config_mac_list()
1600 static void hclgevf_sync_mac_list(struct hclgevf_dev *hdev, in hclgevf_sync_mac_list() argument
1614 &hdev->mac_table.uc_mac_list : &hdev->mac_table.mc_mac_list; in hclgevf_sync_mac_list()
1616 spin_lock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_sync_mac_list()
1638 spin_unlock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_sync_mac_list()
1641 hclgevf_config_mac_list(hdev, &tmp_del_list, mac_type); in hclgevf_sync_mac_list()
1642 hclgevf_config_mac_list(hdev, &tmp_add_list, mac_type); in hclgevf_sync_mac_list()
1647 spin_lock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_sync_mac_list()
1652 spin_unlock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_sync_mac_list()
1655 static void hclgevf_sync_mac_table(struct hclgevf_dev *hdev) in hclgevf_sync_mac_table() argument
1657 hclgevf_sync_mac_list(hdev, HCLGEVF_MAC_ADDR_UC); in hclgevf_sync_mac_table()
1658 hclgevf_sync_mac_list(hdev, HCLGEVF_MAC_ADDR_MC); in hclgevf_sync_mac_table()
1661 static void hclgevf_uninit_mac_list(struct hclgevf_dev *hdev) in hclgevf_uninit_mac_list() argument
1663 spin_lock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_uninit_mac_list()
1665 hclgevf_clear_list(&hdev->mac_table.uc_mac_list); in hclgevf_uninit_mac_list()
1666 hclgevf_clear_list(&hdev->mac_table.mc_mac_list); in hclgevf_uninit_mac_list()
1668 spin_unlock_bh(&hdev->mac_table.mac_list_lock); in hclgevf_uninit_mac_list()
1673 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_enable_vlan_filter() local
1674 struct hnae3_ae_dev *ae_dev = hdev->ae_dev; in hclgevf_enable_vlan_filter()
1684 return hclgevf_send_mbx_msg(hdev, &send_msg, true, NULL, 0); in hclgevf_enable_vlan_filter()
1695 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_vlan_filter() local
1709 if ((test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state) || in hclgevf_set_vlan_filter()
1710 test_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state)) && is_kill) { in hclgevf_set_vlan_filter()
1711 set_bit(vlan_id, hdev->vlan_del_fail_bmap); in hclgevf_set_vlan_filter()
1713 } else if (!is_kill && test_bit(vlan_id, hdev->vlan_del_fail_bmap)) { in hclgevf_set_vlan_filter()
1714 clear_bit(vlan_id, hdev->vlan_del_fail_bmap); in hclgevf_set_vlan_filter()
1728 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, NULL, 0); in hclgevf_set_vlan_filter()
1730 set_bit(vlan_id, hdev->vlan_del_fail_bmap); in hclgevf_set_vlan_filter()
1735 static void hclgevf_sync_vlan_filter(struct hclgevf_dev *hdev) in hclgevf_sync_vlan_filter() argument
1738 struct hnae3_handle *handle = &hdev->nic; in hclgevf_sync_vlan_filter()
1742 if (bitmap_empty(hdev->vlan_del_fail_bmap, VLAN_N_VID)) in hclgevf_sync_vlan_filter()
1746 vlan_id = find_first_bit(hdev->vlan_del_fail_bmap, VLAN_N_VID); in hclgevf_sync_vlan_filter()
1753 clear_bit(vlan_id, hdev->vlan_del_fail_bmap); in hclgevf_sync_vlan_filter()
1758 vlan_id = find_first_bit(hdev->vlan_del_fail_bmap, VLAN_N_VID); in hclgevf_sync_vlan_filter()
1765 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_en_hw_strip_rxvtag() local
1771 return hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_en_hw_strip_rxvtag()
1777 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_reset_tqp() local
1786 dev_err(&hdev->pdev->dev, "failed to disable tqp, ret = %d\n", in hclgevf_reset_tqp()
1793 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, &return_status, in hclgevf_reset_tqp()
1801 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, NULL, 0); in hclgevf_reset_tqp()
1811 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_mtu() local
1816 return hclgevf_send_mbx_msg(hdev, &send_msg, true, NULL, 0); in hclgevf_set_mtu()
1819 static int hclgevf_notify_client(struct hclgevf_dev *hdev, in hclgevf_notify_client() argument
1822 struct hnae3_client *client = hdev->nic_client; in hclgevf_notify_client()
1823 struct hnae3_handle *handle = &hdev->nic; in hclgevf_notify_client()
1826 if (!test_bit(HCLGEVF_STATE_NIC_REGISTERED, &hdev->state) || in hclgevf_notify_client()
1835 dev_err(&hdev->pdev->dev, "notify nic client failed %d(%d)\n", in hclgevf_notify_client()
1841 static int hclgevf_notify_roce_client(struct hclgevf_dev *hdev, in hclgevf_notify_roce_client() argument
1844 struct hnae3_client *client = hdev->roce_client; in hclgevf_notify_roce_client()
1845 struct hnae3_handle *handle = &hdev->roce; in hclgevf_notify_roce_client()
1848 if (!test_bit(HCLGEVF_STATE_ROCE_REGISTERED, &hdev->state) || !client) in hclgevf_notify_roce_client()
1856 dev_err(&hdev->pdev->dev, "notify roce client failed %d(%d)", in hclgevf_notify_roce_client()
1861 static int hclgevf_reset_wait(struct hclgevf_dev *hdev) in hclgevf_reset_wait() argument
1871 if (hdev->reset_type == HNAE3_VF_RESET) in hclgevf_reset_wait()
1872 ret = readl_poll_timeout(hdev->hw.io_base + in hclgevf_reset_wait()
1878 ret = readl_poll_timeout(hdev->hw.io_base + in hclgevf_reset_wait()
1886 dev_err(&hdev->pdev->dev, in hclgevf_reset_wait()
1895 if (hdev->reset_type == HNAE3_VF_FULL_RESET) in hclgevf_reset_wait()
1903 static void hclgevf_reset_handshake(struct hclgevf_dev *hdev, bool enable) in hclgevf_reset_handshake() argument
1907 reg_val = hclgevf_read_dev(&hdev->hw, HCLGEVF_NIC_CSQ_DEPTH_REG); in hclgevf_reset_handshake()
1913 hclgevf_write_dev(&hdev->hw, HCLGEVF_NIC_CSQ_DEPTH_REG, in hclgevf_reset_handshake()
1917 static int hclgevf_reset_stack(struct hclgevf_dev *hdev) in hclgevf_reset_stack() argument
1922 ret = hclgevf_notify_client(hdev, HNAE3_UNINIT_CLIENT); in hclgevf_reset_stack()
1927 ret = hclgevf_reset_hdev(hdev); in hclgevf_reset_stack()
1929 dev_err(&hdev->pdev->dev, in hclgevf_reset_stack()
1935 ret = hclgevf_notify_client(hdev, HNAE3_INIT_CLIENT); in hclgevf_reset_stack()
1940 hclgevf_reset_handshake(hdev, false); in hclgevf_reset_stack()
1943 return hclgevf_notify_client(hdev, HNAE3_UP_CLIENT); in hclgevf_reset_stack()
1946 static int hclgevf_reset_prepare_wait(struct hclgevf_dev *hdev) in hclgevf_reset_prepare_wait() argument
1950 if (hdev->reset_type == HNAE3_VF_FUNC_RESET) { in hclgevf_reset_prepare_wait()
1955 ret = hclgevf_send_mbx_msg(hdev, &send_msg, true, NULL, 0); in hclgevf_reset_prepare_wait()
1957 dev_err(&hdev->pdev->dev, in hclgevf_reset_prepare_wait()
1961 hdev->rst_stats.vf_func_rst_cnt++; in hclgevf_reset_prepare_wait()
1964 set_bit(HCLGEVF_STATE_CMD_DISABLE, &hdev->state); in hclgevf_reset_prepare_wait()
1967 hclgevf_reset_handshake(hdev, true); in hclgevf_reset_prepare_wait()
1968 dev_info(&hdev->pdev->dev, "prepare reset(%d) wait done\n", in hclgevf_reset_prepare_wait()
1969 hdev->reset_type); in hclgevf_reset_prepare_wait()
1974 static void hclgevf_dump_rst_info(struct hclgevf_dev *hdev) in hclgevf_dump_rst_info() argument
1976 dev_info(&hdev->pdev->dev, "VF function reset count: %u\n", in hclgevf_dump_rst_info()
1977 hdev->rst_stats.vf_func_rst_cnt); in hclgevf_dump_rst_info()
1978 dev_info(&hdev->pdev->dev, "FLR reset count: %u\n", in hclgevf_dump_rst_info()
1979 hdev->rst_stats.flr_rst_cnt); in hclgevf_dump_rst_info()
1980 dev_info(&hdev->pdev->dev, "VF reset count: %u\n", in hclgevf_dump_rst_info()
1981 hdev->rst_stats.vf_rst_cnt); in hclgevf_dump_rst_info()
1982 dev_info(&hdev->pdev->dev, "reset done count: %u\n", in hclgevf_dump_rst_info()
1983 hdev->rst_stats.rst_done_cnt); in hclgevf_dump_rst_info()
1984 dev_info(&hdev->pdev->dev, "HW reset done count: %u\n", in hclgevf_dump_rst_info()
1985 hdev->rst_stats.hw_rst_done_cnt); in hclgevf_dump_rst_info()
1986 dev_info(&hdev->pdev->dev, "reset count: %u\n", in hclgevf_dump_rst_info()
1987 hdev->rst_stats.rst_cnt); in hclgevf_dump_rst_info()
1988 dev_info(&hdev->pdev->dev, "reset fail count: %u\n", in hclgevf_dump_rst_info()
1989 hdev->rst_stats.rst_fail_cnt); in hclgevf_dump_rst_info()
1990 dev_info(&hdev->pdev->dev, "vector0 interrupt enable status: 0x%x\n", in hclgevf_dump_rst_info()
1991 hclgevf_read_dev(&hdev->hw, HCLGEVF_MISC_VECTOR_REG_BASE)); in hclgevf_dump_rst_info()
1992 dev_info(&hdev->pdev->dev, "vector0 interrupt status: 0x%x\n", in hclgevf_dump_rst_info()
1993 hclgevf_read_dev(&hdev->hw, HCLGEVF_VECTOR0_CMDQ_STATE_REG)); in hclgevf_dump_rst_info()
1994 dev_info(&hdev->pdev->dev, "handshake status: 0x%x\n", in hclgevf_dump_rst_info()
1995 hclgevf_read_dev(&hdev->hw, HCLGEVF_NIC_CSQ_DEPTH_REG)); in hclgevf_dump_rst_info()
1996 dev_info(&hdev->pdev->dev, "function reset status: 0x%x\n", in hclgevf_dump_rst_info()
1997 hclgevf_read_dev(&hdev->hw, HCLGEVF_RST_ING)); in hclgevf_dump_rst_info()
1998 dev_info(&hdev->pdev->dev, "hdev state: 0x%lx\n", hdev->state); in hclgevf_dump_rst_info()
2001 static void hclgevf_reset_err_handle(struct hclgevf_dev *hdev) in hclgevf_reset_err_handle() argument
2004 hclgevf_reset_handshake(hdev, true); in hclgevf_reset_err_handle()
2005 hdev->rst_stats.rst_fail_cnt++; in hclgevf_reset_err_handle()
2006 dev_err(&hdev->pdev->dev, "failed to reset VF(%u)\n", in hclgevf_reset_err_handle()
2007 hdev->rst_stats.rst_fail_cnt); in hclgevf_reset_err_handle()
2009 if (hdev->rst_stats.rst_fail_cnt < HCLGEVF_RESET_MAX_FAIL_CNT) in hclgevf_reset_err_handle()
2010 set_bit(hdev->reset_type, &hdev->reset_pending); in hclgevf_reset_err_handle()
2012 if (hclgevf_is_reset_pending(hdev)) { in hclgevf_reset_err_handle()
2013 set_bit(HCLGEVF_RESET_PENDING, &hdev->reset_state); in hclgevf_reset_err_handle()
2014 hclgevf_reset_task_schedule(hdev); in hclgevf_reset_err_handle()
2016 set_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state); in hclgevf_reset_err_handle()
2017 hclgevf_dump_rst_info(hdev); in hclgevf_reset_err_handle()
2021 static int hclgevf_reset_prepare(struct hclgevf_dev *hdev) in hclgevf_reset_prepare() argument
2025 hdev->rst_stats.rst_cnt++; in hclgevf_reset_prepare()
2028 ret = hclgevf_notify_roce_client(hdev, HNAE3_DOWN_CLIENT); in hclgevf_reset_prepare()
2034 ret = hclgevf_notify_client(hdev, HNAE3_DOWN_CLIENT); in hclgevf_reset_prepare()
2039 return hclgevf_reset_prepare_wait(hdev); in hclgevf_reset_prepare()
2042 static int hclgevf_reset_rebuild(struct hclgevf_dev *hdev) in hclgevf_reset_rebuild() argument
2046 hdev->rst_stats.hw_rst_done_cnt++; in hclgevf_reset_rebuild()
2047 ret = hclgevf_notify_roce_client(hdev, HNAE3_UNINIT_CLIENT); in hclgevf_reset_rebuild()
2053 ret = hclgevf_reset_stack(hdev); in hclgevf_reset_rebuild()
2056 dev_err(&hdev->pdev->dev, "failed to reset VF stack\n"); in hclgevf_reset_rebuild()
2060 ret = hclgevf_notify_roce_client(hdev, HNAE3_INIT_CLIENT); in hclgevf_reset_rebuild()
2065 hdev->rst_stats.rst_fail_cnt < HCLGEVF_RESET_MAX_FAIL_CNT - 1) in hclgevf_reset_rebuild()
2068 ret = hclgevf_notify_roce_client(hdev, HNAE3_UP_CLIENT); in hclgevf_reset_rebuild()
2072 hdev->last_reset_time = jiffies; in hclgevf_reset_rebuild()
2073 hdev->rst_stats.rst_done_cnt++; in hclgevf_reset_rebuild()
2074 hdev->rst_stats.rst_fail_cnt = 0; in hclgevf_reset_rebuild()
2075 clear_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state); in hclgevf_reset_rebuild()
2080 static void hclgevf_reset(struct hclgevf_dev *hdev) in hclgevf_reset() argument
2082 if (hclgevf_reset_prepare(hdev)) in hclgevf_reset()
2088 if (hclgevf_reset_wait(hdev)) { in hclgevf_reset()
2090 dev_err(&hdev->pdev->dev, in hclgevf_reset()
2095 if (hclgevf_reset_rebuild(hdev)) in hclgevf_reset()
2101 hclgevf_reset_err_handle(hdev); in hclgevf_reset()
2104 static enum hnae3_reset_type hclgevf_get_reset_level(struct hclgevf_dev *hdev, in hclgevf_get_reset_level() argument
2138 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_reset_event() local
2140 dev_info(&hdev->pdev->dev, "received reset request from VF enet\n"); in hclgevf_reset_event()
2142 if (hdev->default_reset_request) in hclgevf_reset_event()
2143 hdev->reset_level = in hclgevf_reset_event()
2144 hclgevf_get_reset_level(hdev, in hclgevf_reset_event()
2145 &hdev->default_reset_request); in hclgevf_reset_event()
2147 hdev->reset_level = HNAE3_VF_FUNC_RESET; in hclgevf_reset_event()
2150 set_bit(HCLGEVF_RESET_REQUESTED, &hdev->reset_state); in hclgevf_reset_event()
2151 hclgevf_reset_task_schedule(hdev); in hclgevf_reset_event()
2153 hdev->last_reset_time = jiffies; in hclgevf_reset_event()
2159 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_set_def_reset_request() local
2161 set_bit(rst_type, &hdev->default_reset_request); in hclgevf_set_def_reset_request()
2175 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_reset_prepare_general() local
2180 down(&hdev->reset_sem); in hclgevf_reset_prepare_general()
2181 set_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state); in hclgevf_reset_prepare_general()
2182 hdev->reset_type = rst_type; in hclgevf_reset_prepare_general()
2183 ret = hclgevf_reset_prepare(hdev); in hclgevf_reset_prepare_general()
2185 dev_err(&hdev->pdev->dev, "fail to prepare to reset, ret=%d\n", in hclgevf_reset_prepare_general()
2187 if (hdev->reset_pending || in hclgevf_reset_prepare_general()
2189 dev_err(&hdev->pdev->dev, in hclgevf_reset_prepare_general()
2191 hdev->reset_pending, retry_cnt); in hclgevf_reset_prepare_general()
2192 clear_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state); in hclgevf_reset_prepare_general()
2193 up(&hdev->reset_sem); in hclgevf_reset_prepare_general()
2200 hclgevf_enable_vector(&hdev->misc_vector, false); in hclgevf_reset_prepare_general()
2202 if (hdev->reset_type == HNAE3_FLR_RESET) in hclgevf_reset_prepare_general()
2203 hdev->rst_stats.flr_rst_cnt++; in hclgevf_reset_prepare_general()
2208 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_reset_done() local
2211 hclgevf_enable_vector(&hdev->misc_vector, true); in hclgevf_reset_done()
2213 ret = hclgevf_reset_rebuild(hdev); in hclgevf_reset_done()
2215 dev_warn(&hdev->pdev->dev, "fail to rebuild, ret=%d\n", in hclgevf_reset_done()
2218 hdev->reset_type = HNAE3_NONE_RESET; in hclgevf_reset_done()
2219 clear_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state); in hclgevf_reset_done()
2220 up(&hdev->reset_sem); in hclgevf_reset_done()
2225 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_fw_version() local
2227 return hdev->fw_version; in hclgevf_get_fw_version()
2230 static void hclgevf_get_misc_vector(struct hclgevf_dev *hdev) in hclgevf_get_misc_vector() argument
2232 struct hclgevf_misc_vector *vector = &hdev->misc_vector; in hclgevf_get_misc_vector()
2234 vector->vector_irq = pci_irq_vector(hdev->pdev, in hclgevf_get_misc_vector()
2236 vector->addr = hdev->hw.io_base + HCLGEVF_MISC_VECTOR_REG_BASE; in hclgevf_get_misc_vector()
2238 hdev->vector_status[HCLGEVF_MISC_VECTOR_NUM] = 0; in hclgevf_get_misc_vector()
2239 hdev->vector_irq[HCLGEVF_MISC_VECTOR_NUM] = vector->vector_irq; in hclgevf_get_misc_vector()
2241 hdev->num_msi_left -= 1; in hclgevf_get_misc_vector()
2242 hdev->num_msi_used += 1; in hclgevf_get_misc_vector()
2245 void hclgevf_reset_task_schedule(struct hclgevf_dev *hdev) in hclgevf_reset_task_schedule() argument
2247 if (!test_bit(HCLGEVF_STATE_REMOVING, &hdev->state) && in hclgevf_reset_task_schedule()
2248 test_bit(HCLGEVF_STATE_SERVICE_INITED, &hdev->state) && in hclgevf_reset_task_schedule()
2250 &hdev->state)) in hclgevf_reset_task_schedule()
2251 mod_delayed_work(hclgevf_wq, &hdev->service_task, 0); in hclgevf_reset_task_schedule()
2254 void hclgevf_mbx_task_schedule(struct hclgevf_dev *hdev) in hclgevf_mbx_task_schedule() argument
2256 if (!test_bit(HCLGEVF_STATE_REMOVING, &hdev->state) && in hclgevf_mbx_task_schedule()
2258 &hdev->state)) in hclgevf_mbx_task_schedule()
2259 mod_delayed_work(hclgevf_wq, &hdev->service_task, 0); in hclgevf_mbx_task_schedule()
2262 static void hclgevf_task_schedule(struct hclgevf_dev *hdev, in hclgevf_task_schedule() argument
2265 if (!test_bit(HCLGEVF_STATE_REMOVING, &hdev->state) && in hclgevf_task_schedule()
2266 !test_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state)) in hclgevf_task_schedule()
2267 mod_delayed_work(hclgevf_wq, &hdev->service_task, delay); in hclgevf_task_schedule()
2270 static void hclgevf_reset_service_task(struct hclgevf_dev *hdev) in hclgevf_reset_service_task() argument
2274 if (!test_and_clear_bit(HCLGEVF_STATE_RST_SERVICE_SCHED, &hdev->state)) in hclgevf_reset_service_task()
2277 down(&hdev->reset_sem); in hclgevf_reset_service_task()
2278 set_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state); in hclgevf_reset_service_task()
2281 &hdev->reset_state)) { in hclgevf_reset_service_task()
2287 hdev->reset_attempts = 0; in hclgevf_reset_service_task()
2289 hdev->last_reset_time = jiffies; in hclgevf_reset_service_task()
2290 hdev->reset_type = in hclgevf_reset_service_task()
2291 hclgevf_get_reset_level(hdev, &hdev->reset_pending); in hclgevf_reset_service_task()
2292 if (hdev->reset_type != HNAE3_NONE_RESET) in hclgevf_reset_service_task()
2293 hclgevf_reset(hdev); in hclgevf_reset_service_task()
2295 &hdev->reset_state)) { in hclgevf_reset_service_task()
2319 if (hdev->reset_attempts > HCLGEVF_MAX_RESET_ATTEMPTS_CNT) { in hclgevf_reset_service_task()
2321 set_bit(HNAE3_VF_FULL_RESET, &hdev->reset_pending); in hclgevf_reset_service_task()
2324 set_bit(HCLGEVF_RESET_PENDING, &hdev->reset_state); in hclgevf_reset_service_task()
2326 hdev->reset_attempts++; in hclgevf_reset_service_task()
2328 set_bit(hdev->reset_level, &hdev->reset_pending); in hclgevf_reset_service_task()
2329 set_bit(HCLGEVF_RESET_PENDING, &hdev->reset_state); in hclgevf_reset_service_task()
2331 hclgevf_reset_task_schedule(hdev); in hclgevf_reset_service_task()
2334 hdev->reset_type = HNAE3_NONE_RESET; in hclgevf_reset_service_task()
2335 clear_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state); in hclgevf_reset_service_task()
2336 up(&hdev->reset_sem); in hclgevf_reset_service_task()
2339 static void hclgevf_mailbox_service_task(struct hclgevf_dev *hdev) in hclgevf_mailbox_service_task() argument
2341 if (!test_and_clear_bit(HCLGEVF_STATE_MBX_SERVICE_SCHED, &hdev->state)) in hclgevf_mailbox_service_task()
2344 if (test_and_set_bit(HCLGEVF_STATE_MBX_HANDLING, &hdev->state)) in hclgevf_mailbox_service_task()
2347 hclgevf_mbx_async_handler(hdev); in hclgevf_mailbox_service_task()
2349 clear_bit(HCLGEVF_STATE_MBX_HANDLING, &hdev->state); in hclgevf_mailbox_service_task()
2352 static void hclgevf_keep_alive(struct hclgevf_dev *hdev) in hclgevf_keep_alive() argument
2357 if (test_bit(HCLGEVF_STATE_CMD_DISABLE, &hdev->state)) in hclgevf_keep_alive()
2361 ret = hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_keep_alive()
2363 dev_err(&hdev->pdev->dev, in hclgevf_keep_alive()
2367 static void hclgevf_periodic_service_task(struct hclgevf_dev *hdev) in hclgevf_periodic_service_task() argument
2370 struct hnae3_handle *handle = &hdev->nic; in hclgevf_periodic_service_task()
2372 if (test_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state)) in hclgevf_periodic_service_task()
2375 if (time_is_after_jiffies(hdev->last_serv_processed + HZ)) { in hclgevf_periodic_service_task()
2376 delta = jiffies - hdev->last_serv_processed; in hclgevf_periodic_service_task()
2384 hdev->serv_processed_cnt++; in hclgevf_periodic_service_task()
2385 if (!(hdev->serv_processed_cnt % HCLGEVF_KEEP_ALIVE_TASK_INTERVAL)) in hclgevf_periodic_service_task()
2386 hclgevf_keep_alive(hdev); in hclgevf_periodic_service_task()
2388 if (test_bit(HCLGEVF_STATE_DOWN, &hdev->state)) { in hclgevf_periodic_service_task()
2389 hdev->last_serv_processed = jiffies; in hclgevf_periodic_service_task()
2393 if (!(hdev->serv_processed_cnt % HCLGEVF_STATS_TIMER_INTERVAL)) in hclgevf_periodic_service_task()
2399 if (!test_bit(HCLGEVF_STATE_PF_PUSH_LINK_STATUS, &hdev->state)) in hclgevf_periodic_service_task()
2400 hclgevf_request_link_info(hdev); in hclgevf_periodic_service_task()
2402 hclgevf_update_link_mode(hdev); in hclgevf_periodic_service_task()
2404 hclgevf_sync_vlan_filter(hdev); in hclgevf_periodic_service_task()
2406 hclgevf_sync_mac_table(hdev); in hclgevf_periodic_service_task()
2408 hclgevf_sync_promisc_mode(hdev); in hclgevf_periodic_service_task()
2410 hdev->last_serv_processed = jiffies; in hclgevf_periodic_service_task()
2413 hclgevf_task_schedule(hdev, delta); in hclgevf_periodic_service_task()
2418 struct hclgevf_dev *hdev = container_of(work, struct hclgevf_dev, in hclgevf_service_task() local
2421 hclgevf_reset_service_task(hdev); in hclgevf_service_task()
2422 hclgevf_mailbox_service_task(hdev); in hclgevf_service_task()
2423 hclgevf_periodic_service_task(hdev); in hclgevf_service_task()
2429 hclgevf_reset_service_task(hdev); in hclgevf_service_task()
2430 hclgevf_mailbox_service_task(hdev); in hclgevf_service_task()
2433 static void hclgevf_clear_event_cause(struct hclgevf_dev *hdev, u32 regclr) in hclgevf_clear_event_cause() argument
2435 hclgevf_write_dev(&hdev->hw, HCLGEVF_VECTOR0_CMDQ_SRC_REG, regclr); in hclgevf_clear_event_cause()
2438 static enum hclgevf_evt_cause hclgevf_check_evt_cause(struct hclgevf_dev *hdev, in hclgevf_check_evt_cause() argument
2444 cmdq_stat_reg = hclgevf_read_dev(&hdev->hw, in hclgevf_check_evt_cause()
2447 rst_ing_reg = hclgevf_read_dev(&hdev->hw, HCLGEVF_RST_ING); in hclgevf_check_evt_cause()
2448 dev_info(&hdev->pdev->dev, in hclgevf_check_evt_cause()
2450 set_bit(HNAE3_VF_RESET, &hdev->reset_pending); in hclgevf_check_evt_cause()
2451 set_bit(HCLGEVF_RESET_PENDING, &hdev->reset_state); in hclgevf_check_evt_cause()
2452 set_bit(HCLGEVF_STATE_CMD_DISABLE, &hdev->state); in hclgevf_check_evt_cause()
2454 hdev->rst_stats.vf_rst_cnt++; in hclgevf_check_evt_cause()
2458 val = hclgevf_read_dev(&hdev->hw, HCLGEVF_VF_RST_ING); in hclgevf_check_evt_cause()
2459 hclgevf_write_dev(&hdev->hw, HCLGEVF_VF_RST_ING, in hclgevf_check_evt_cause()
2473 if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) in hclgevf_check_evt_cause()
2483 dev_info(&hdev->pdev->dev, in hclgevf_check_evt_cause()
2492 struct hclgevf_dev *hdev = from_timer(hdev, t, reset_timer); in hclgevf_reset_timer() local
2494 hclgevf_clear_event_cause(hdev, HCLGEVF_VECTOR0_EVENT_RST); in hclgevf_reset_timer()
2495 hclgevf_reset_task_schedule(hdev); in hclgevf_reset_timer()
2503 struct hclgevf_dev *hdev = data; in hclgevf_misc_irq_handle() local
2506 hclgevf_enable_vector(&hdev->misc_vector, false); in hclgevf_misc_irq_handle()
2507 event_cause = hclgevf_check_evt_cause(hdev, &clearval); in hclgevf_misc_irq_handle()
2509 hclgevf_clear_event_cause(hdev, clearval); in hclgevf_misc_irq_handle()
2513 mod_timer(&hdev->reset_timer, in hclgevf_misc_irq_handle()
2517 hclgevf_mbx_handler(hdev); in hclgevf_misc_irq_handle()
2523 hclgevf_enable_vector(&hdev->misc_vector, true); in hclgevf_misc_irq_handle()
2528 static int hclgevf_configure(struct hclgevf_dev *hdev) in hclgevf_configure() argument
2532 hdev->gro_en = true; in hclgevf_configure()
2534 ret = hclgevf_get_basic_info(hdev); in hclgevf_configure()
2539 ret = hclgevf_get_port_base_vlan_filter_state(hdev); in hclgevf_configure()
2544 ret = hclgevf_get_queue_info(hdev); in hclgevf_configure()
2549 ret = hclgevf_get_queue_depth(hdev); in hclgevf_configure()
2553 return hclgevf_get_pf_media_type(hdev); in hclgevf_configure()
2559 struct hclgevf_dev *hdev; in hclgevf_alloc_hdev() local
2561 hdev = devm_kzalloc(&pdev->dev, sizeof(*hdev), GFP_KERNEL); in hclgevf_alloc_hdev()
2562 if (!hdev) in hclgevf_alloc_hdev()
2565 hdev->pdev = pdev; in hclgevf_alloc_hdev()
2566 hdev->ae_dev = ae_dev; in hclgevf_alloc_hdev()
2567 ae_dev->priv = hdev; in hclgevf_alloc_hdev()
2572 static int hclgevf_init_roce_base_info(struct hclgevf_dev *hdev) in hclgevf_init_roce_base_info() argument
2574 struct hnae3_handle *roce = &hdev->roce; in hclgevf_init_roce_base_info()
2575 struct hnae3_handle *nic = &hdev->nic; in hclgevf_init_roce_base_info()
2577 roce->rinfo.num_vectors = hdev->num_roce_msix; in hclgevf_init_roce_base_info()
2579 if (hdev->num_msi_left < roce->rinfo.num_vectors || in hclgevf_init_roce_base_info()
2580 hdev->num_msi_left == 0) in hclgevf_init_roce_base_info()
2583 roce->rinfo.base_vector = hdev->roce_base_msix_offset; in hclgevf_init_roce_base_info()
2586 roce->rinfo.roce_io_base = hdev->hw.io_base; in hclgevf_init_roce_base_info()
2587 roce->rinfo.roce_mem_base = hdev->hw.mem_base; in hclgevf_init_roce_base_info()
2596 static int hclgevf_config_gro(struct hclgevf_dev *hdev) in hclgevf_config_gro() argument
2602 if (!hnae3_dev_gro_supported(hdev)) in hclgevf_config_gro()
2609 req->gro_en = hdev->gro_en ? 1 : 0; in hclgevf_config_gro()
2611 ret = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_config_gro()
2613 dev_err(&hdev->pdev->dev, in hclgevf_config_gro()
2619 static int hclgevf_rss_init_cfg(struct hclgevf_dev *hdev) in hclgevf_rss_init_cfg() argument
2621 u16 rss_ind_tbl_size = hdev->ae_dev->dev_specs.rss_ind_tbl_size; in hclgevf_rss_init_cfg()
2622 struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_rss_init_cfg()
2627 rss_cfg->rss_size = hdev->nic.kinfo.rss_size; in hclgevf_rss_init_cfg()
2629 if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) { in hclgevf_rss_init_cfg()
2634 rss_ind_tbl = devm_kcalloc(&hdev->pdev->dev, rss_ind_tbl_size, in hclgevf_rss_init_cfg()
2650 hdev->ae_dev->dev_version <= HNAE3_DEVICE_VERSION_V2 ? in hclgevf_rss_init_cfg()
2663 static int hclgevf_rss_init_hw(struct hclgevf_dev *hdev) in hclgevf_rss_init_hw() argument
2665 struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_rss_init_hw()
2668 if (hdev->ae_dev->dev_version >= HNAE3_DEVICE_VERSION_V2) { in hclgevf_rss_init_hw()
2669 ret = hclgevf_set_rss_algo_key(hdev, rss_cfg->hash_algo, in hclgevf_rss_init_hw()
2674 ret = hclgevf_set_rss_input_tuple(hdev, rss_cfg); in hclgevf_rss_init_hw()
2679 ret = hclgevf_set_rss_indir_table(hdev); in hclgevf_rss_init_hw()
2683 return hclgevf_set_rss_tc_mode(hdev, rss_cfg->rss_size); in hclgevf_rss_init_hw()
2686 static int hclgevf_init_vlan_config(struct hclgevf_dev *hdev) in hclgevf_init_vlan_config() argument
2688 struct hnae3_handle *nic = &hdev->nic; in hclgevf_init_vlan_config()
2693 dev_err(&hdev->pdev->dev, in hclgevf_init_vlan_config()
2698 return hclgevf_set_vlan_filter(&hdev->nic, htons(ETH_P_8021Q), 0, in hclgevf_init_vlan_config()
2702 static void hclgevf_flush_link_update(struct hclgevf_dev *hdev) in hclgevf_flush_link_update() argument
2706 unsigned long last = hdev->serv_processed_cnt; in hclgevf_flush_link_update()
2709 while (test_bit(HCLGEVF_STATE_LINK_UPDATING, &hdev->state) && in hclgevf_flush_link_update()
2711 last == hdev->serv_processed_cnt) in hclgevf_flush_link_update()
2717 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_timer_task() local
2720 hclgevf_task_schedule(hdev, 0); in hclgevf_set_timer_task()
2722 set_bit(HCLGEVF_STATE_DOWN, &hdev->state); in hclgevf_set_timer_task()
2726 hclgevf_flush_link_update(hdev); in hclgevf_set_timer_task()
2732 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_ae_start() local
2734 clear_bit(HCLGEVF_STATE_DOWN, &hdev->state); in hclgevf_ae_start()
2735 clear_bit(HCLGEVF_STATE_PF_PUSH_LINK_STATUS, &hdev->state); in hclgevf_ae_start()
2739 hclgevf_request_link_info(hdev); in hclgevf_ae_start()
2741 hclgevf_update_link_mode(hdev); in hclgevf_ae_start()
2748 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_ae_stop() local
2750 set_bit(HCLGEVF_STATE_DOWN, &hdev->state); in hclgevf_ae_stop()
2752 if (hdev->reset_type != HNAE3_VF_RESET) in hclgevf_ae_stop()
2756 hclgevf_update_link_status(hdev, 0); in hclgevf_ae_stop()
2764 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_alive() local
2770 return hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_set_alive()
2780 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_client_stop() local
2785 dev_warn(&hdev->pdev->dev, in hclgevf_client_stop()
2789 static void hclgevf_state_init(struct hclgevf_dev *hdev) in hclgevf_state_init() argument
2791 clear_bit(HCLGEVF_STATE_MBX_SERVICE_SCHED, &hdev->state); in hclgevf_state_init()
2792 clear_bit(HCLGEVF_STATE_MBX_HANDLING, &hdev->state); in hclgevf_state_init()
2793 clear_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state); in hclgevf_state_init()
2795 INIT_DELAYED_WORK(&hdev->service_task, hclgevf_service_task); in hclgevf_state_init()
2797 mutex_init(&hdev->mbx_resp.mbx_mutex); in hclgevf_state_init()
2798 sema_init(&hdev->reset_sem, 1); in hclgevf_state_init()
2800 spin_lock_init(&hdev->mac_table.mac_list_lock); in hclgevf_state_init()
2801 INIT_LIST_HEAD(&hdev->mac_table.uc_mac_list); in hclgevf_state_init()
2802 INIT_LIST_HEAD(&hdev->mac_table.mc_mac_list); in hclgevf_state_init()
2805 set_bit(HCLGEVF_STATE_DOWN, &hdev->state); in hclgevf_state_init()
2808 static void hclgevf_state_uninit(struct hclgevf_dev *hdev) in hclgevf_state_uninit() argument
2810 set_bit(HCLGEVF_STATE_DOWN, &hdev->state); in hclgevf_state_uninit()
2811 set_bit(HCLGEVF_STATE_REMOVING, &hdev->state); in hclgevf_state_uninit()
2813 if (hdev->service_task.work.func) in hclgevf_state_uninit()
2814 cancel_delayed_work_sync(&hdev->service_task); in hclgevf_state_uninit()
2816 mutex_destroy(&hdev->mbx_resp.mbx_mutex); in hclgevf_state_uninit()
2819 static int hclgevf_init_msi(struct hclgevf_dev *hdev) in hclgevf_init_msi() argument
2821 struct pci_dev *pdev = hdev->pdev; in hclgevf_init_msi()
2825 if (hnae3_dev_roce_supported(hdev)) in hclgevf_init_msi()
2827 hdev->roce_base_msix_offset + 1, in hclgevf_init_msi()
2828 hdev->num_msi, in hclgevf_init_msi()
2832 hdev->num_msi, in hclgevf_init_msi()
2841 if (vectors < hdev->num_msi) in hclgevf_init_msi()
2842 dev_warn(&hdev->pdev->dev, in hclgevf_init_msi()
2844 hdev->num_msi, vectors); in hclgevf_init_msi()
2846 hdev->num_msi = vectors; in hclgevf_init_msi()
2847 hdev->num_msi_left = vectors; in hclgevf_init_msi()
2849 hdev->vector_status = devm_kcalloc(&pdev->dev, hdev->num_msi, in hclgevf_init_msi()
2851 if (!hdev->vector_status) { in hclgevf_init_msi()
2856 for (i = 0; i < hdev->num_msi; i++) in hclgevf_init_msi()
2857 hdev->vector_status[i] = HCLGEVF_INVALID_VPORT; in hclgevf_init_msi()
2859 hdev->vector_irq = devm_kcalloc(&pdev->dev, hdev->num_msi, in hclgevf_init_msi()
2861 if (!hdev->vector_irq) { in hclgevf_init_msi()
2862 devm_kfree(&pdev->dev, hdev->vector_status); in hclgevf_init_msi()
2870 static void hclgevf_uninit_msi(struct hclgevf_dev *hdev) in hclgevf_uninit_msi() argument
2872 struct pci_dev *pdev = hdev->pdev; in hclgevf_uninit_msi()
2874 devm_kfree(&pdev->dev, hdev->vector_status); in hclgevf_uninit_msi()
2875 devm_kfree(&pdev->dev, hdev->vector_irq); in hclgevf_uninit_msi()
2879 static int hclgevf_misc_irq_init(struct hclgevf_dev *hdev) in hclgevf_misc_irq_init() argument
2883 hclgevf_get_misc_vector(hdev); in hclgevf_misc_irq_init()
2885 snprintf(hdev->misc_vector.name, HNAE3_INT_NAME_LEN, "%s-misc-%s", in hclgevf_misc_irq_init()
2886 HCLGEVF_NAME, pci_name(hdev->pdev)); in hclgevf_misc_irq_init()
2887 ret = request_irq(hdev->misc_vector.vector_irq, hclgevf_misc_irq_handle, in hclgevf_misc_irq_init()
2888 0, hdev->misc_vector.name, hdev); in hclgevf_misc_irq_init()
2890 dev_err(&hdev->pdev->dev, "VF failed to request misc irq(%d)\n", in hclgevf_misc_irq_init()
2891 hdev->misc_vector.vector_irq); in hclgevf_misc_irq_init()
2895 hclgevf_clear_event_cause(hdev, 0); in hclgevf_misc_irq_init()
2898 hclgevf_enable_vector(&hdev->misc_vector, true); in hclgevf_misc_irq_init()
2903 static void hclgevf_misc_irq_uninit(struct hclgevf_dev *hdev) in hclgevf_misc_irq_uninit() argument
2906 hclgevf_enable_vector(&hdev->misc_vector, false); in hclgevf_misc_irq_uninit()
2907 synchronize_irq(hdev->misc_vector.vector_irq); in hclgevf_misc_irq_uninit()
2908 free_irq(hdev->misc_vector.vector_irq, hdev); in hclgevf_misc_irq_uninit()
2909 hclgevf_free_vector(hdev, 0); in hclgevf_misc_irq_uninit()
2912 static void hclgevf_info_show(struct hclgevf_dev *hdev) in hclgevf_info_show() argument
2914 struct device *dev = &hdev->pdev->dev; in hclgevf_info_show()
2918 dev_info(dev, "Task queue pairs numbers: %u\n", hdev->num_tqps); in hclgevf_info_show()
2919 dev_info(dev, "Desc num per TX queue: %u\n", hdev->num_tx_desc); in hclgevf_info_show()
2920 dev_info(dev, "Desc num per RX queue: %u\n", hdev->num_rx_desc); in hclgevf_info_show()
2921 dev_info(dev, "Numbers of vports: %u\n", hdev->num_alloc_vport); in hclgevf_info_show()
2922 dev_info(dev, "HW tc map: 0x%x\n", hdev->hw_tc_map); in hclgevf_info_show()
2924 hdev->hw.mac.media_type); in hclgevf_info_show()
2932 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_init_nic_client_instance() local
2933 int rst_cnt = hdev->rst_stats.rst_cnt; in hclgevf_init_nic_client_instance()
2936 ret = client->ops->init_instance(&hdev->nic); in hclgevf_init_nic_client_instance()
2940 set_bit(HCLGEVF_STATE_NIC_REGISTERED, &hdev->state); in hclgevf_init_nic_client_instance()
2941 if (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state) || in hclgevf_init_nic_client_instance()
2942 rst_cnt != hdev->rst_stats.rst_cnt) { in hclgevf_init_nic_client_instance()
2943 clear_bit(HCLGEVF_STATE_NIC_REGISTERED, &hdev->state); in hclgevf_init_nic_client_instance()
2945 client->ops->uninit_instance(&hdev->nic, 0); in hclgevf_init_nic_client_instance()
2951 if (netif_msg_drv(&hdev->nic)) in hclgevf_init_nic_client_instance()
2952 hclgevf_info_show(hdev); in hclgevf_init_nic_client_instance()
2960 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_init_roce_client_instance() local
2963 if (!hnae3_dev_roce_supported(hdev) || !hdev->roce_client || in hclgevf_init_roce_client_instance()
2964 !hdev->nic_client) in hclgevf_init_roce_client_instance()
2967 ret = hclgevf_init_roce_base_info(hdev); in hclgevf_init_roce_client_instance()
2971 ret = client->ops->init_instance(&hdev->roce); in hclgevf_init_roce_client_instance()
2975 set_bit(HCLGEVF_STATE_ROCE_REGISTERED, &hdev->state); in hclgevf_init_roce_client_instance()
2984 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_init_client_instance() local
2989 hdev->nic_client = client; in hclgevf_init_client_instance()
2990 hdev->nic.client = client; in hclgevf_init_client_instance()
2997 hdev->roce_client); in hclgevf_init_client_instance()
3003 if (hnae3_dev_roce_supported(hdev)) { in hclgevf_init_client_instance()
3004 hdev->roce_client = client; in hclgevf_init_client_instance()
3005 hdev->roce.client = client; in hclgevf_init_client_instance()
3020 hdev->nic_client = NULL; in hclgevf_init_client_instance()
3021 hdev->nic.client = NULL; in hclgevf_init_client_instance()
3024 hdev->roce_client = NULL; in hclgevf_init_client_instance()
3025 hdev->roce.client = NULL; in hclgevf_init_client_instance()
3032 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_uninit_client_instance() local
3035 if (hdev->roce_client) { in hclgevf_uninit_client_instance()
3036 while (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state)) in hclgevf_uninit_client_instance()
3038 clear_bit(HCLGEVF_STATE_ROCE_REGISTERED, &hdev->state); in hclgevf_uninit_client_instance()
3040 hdev->roce_client->ops->uninit_instance(&hdev->roce, 0); in hclgevf_uninit_client_instance()
3041 hdev->roce_client = NULL; in hclgevf_uninit_client_instance()
3042 hdev->roce.client = NULL; in hclgevf_uninit_client_instance()
3046 if (client->ops->uninit_instance && hdev->nic_client && in hclgevf_uninit_client_instance()
3048 while (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state)) in hclgevf_uninit_client_instance()
3050 clear_bit(HCLGEVF_STATE_NIC_REGISTERED, &hdev->state); in hclgevf_uninit_client_instance()
3052 client->ops->uninit_instance(&hdev->nic, 0); in hclgevf_uninit_client_instance()
3053 hdev->nic_client = NULL; in hclgevf_uninit_client_instance()
3054 hdev->nic.client = NULL; in hclgevf_uninit_client_instance()
3058 static int hclgevf_dev_mem_map(struct hclgevf_dev *hdev) in hclgevf_dev_mem_map() argument
3062 struct pci_dev *pdev = hdev->pdev; in hclgevf_dev_mem_map()
3063 struct hclgevf_hw *hw = &hdev->hw; in hclgevf_dev_mem_map()
3081 static int hclgevf_pci_init(struct hclgevf_dev *hdev) in hclgevf_pci_init() argument
3083 struct pci_dev *pdev = hdev->pdev; in hclgevf_pci_init()
3106 hw = &hdev->hw; in hclgevf_pci_init()
3107 hw->hdev = hdev; in hclgevf_pci_init()
3115 ret = hclgevf_dev_mem_map(hdev); in hclgevf_pci_init()
3122 pci_iounmap(pdev, hdev->hw.io_base); in hclgevf_pci_init()
3132 static void hclgevf_pci_uninit(struct hclgevf_dev *hdev) in hclgevf_pci_uninit() argument
3134 struct pci_dev *pdev = hdev->pdev; in hclgevf_pci_uninit()
3136 if (hdev->hw.mem_base) in hclgevf_pci_uninit()
3137 devm_iounmap(&pdev->dev, hdev->hw.mem_base); in hclgevf_pci_uninit()
3139 pci_iounmap(pdev, hdev->hw.io_base); in hclgevf_pci_uninit()
3145 static int hclgevf_query_vf_resource(struct hclgevf_dev *hdev) in hclgevf_query_vf_resource() argument
3152 ret = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_query_vf_resource()
3154 dev_err(&hdev->pdev->dev, in hclgevf_query_vf_resource()
3161 if (hnae3_dev_roce_supported(hdev)) { in hclgevf_query_vf_resource()
3162 hdev->roce_base_msix_offset = in hclgevf_query_vf_resource()
3166 hdev->num_roce_msix = in hclgevf_query_vf_resource()
3171 hdev->num_nic_msix = hdev->num_roce_msix; in hclgevf_query_vf_resource()
3176 hdev->num_msi = hdev->num_roce_msix + in hclgevf_query_vf_resource()
3177 hdev->roce_base_msix_offset; in hclgevf_query_vf_resource()
3179 hdev->num_msi = in hclgevf_query_vf_resource()
3183 hdev->num_nic_msix = hdev->num_msi; in hclgevf_query_vf_resource()
3186 if (hdev->num_nic_msix < HNAE3_MIN_VECTOR_NUM) { in hclgevf_query_vf_resource()
3187 dev_err(&hdev->pdev->dev, in hclgevf_query_vf_resource()
3189 hdev->num_nic_msix); in hclgevf_query_vf_resource()
3196 static void hclgevf_set_default_dev_specs(struct hclgevf_dev *hdev) in hclgevf_set_default_dev_specs() argument
3200 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev); in hclgevf_set_default_dev_specs()
3210 static void hclgevf_parse_dev_specs(struct hclgevf_dev *hdev, in hclgevf_parse_dev_specs() argument
3213 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev); in hclgevf_parse_dev_specs()
3229 static void hclgevf_check_dev_specs(struct hclgevf_dev *hdev) in hclgevf_check_dev_specs() argument
3231 struct hnae3_dev_specs *dev_specs = &hdev->ae_dev->dev_specs; in hclgevf_check_dev_specs()
3245 static int hclgevf_query_dev_specs(struct hclgevf_dev *hdev) in hclgevf_query_dev_specs() argument
3254 if (hdev->ae_dev->dev_version < HNAE3_DEVICE_VERSION_V3) { in hclgevf_query_dev_specs()
3255 hclgevf_set_default_dev_specs(hdev); in hclgevf_query_dev_specs()
3267 ret = hclgevf_cmd_send(&hdev->hw, desc, HCLGEVF_QUERY_DEV_SPECS_BD_NUM); in hclgevf_query_dev_specs()
3271 hclgevf_parse_dev_specs(hdev, desc); in hclgevf_query_dev_specs()
3272 hclgevf_check_dev_specs(hdev); in hclgevf_query_dev_specs()
3277 static int hclgevf_pci_reset(struct hclgevf_dev *hdev) in hclgevf_pci_reset() argument
3279 struct pci_dev *pdev = hdev->pdev; in hclgevf_pci_reset()
3282 if ((hdev->reset_type == HNAE3_VF_FULL_RESET || in hclgevf_pci_reset()
3283 hdev->reset_type == HNAE3_FLR_RESET) && in hclgevf_pci_reset()
3284 test_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state)) { in hclgevf_pci_reset()
3285 hclgevf_misc_irq_uninit(hdev); in hclgevf_pci_reset()
3286 hclgevf_uninit_msi(hdev); in hclgevf_pci_reset()
3287 clear_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state); in hclgevf_pci_reset()
3290 if (!test_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state)) { in hclgevf_pci_reset()
3292 ret = hclgevf_init_msi(hdev); in hclgevf_pci_reset()
3299 ret = hclgevf_misc_irq_init(hdev); in hclgevf_pci_reset()
3301 hclgevf_uninit_msi(hdev); in hclgevf_pci_reset()
3307 set_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state); in hclgevf_pci_reset()
3313 static int hclgevf_clear_vport_list(struct hclgevf_dev *hdev) in hclgevf_clear_vport_list() argument
3319 return hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_clear_vport_list()
3322 static void hclgevf_init_rxd_adv_layout(struct hclgevf_dev *hdev) in hclgevf_init_rxd_adv_layout() argument
3324 if (hnae3_ae_dev_rxd_adv_layout_supported(hdev->ae_dev)) in hclgevf_init_rxd_adv_layout()
3325 hclgevf_write_dev(&hdev->hw, HCLGEVF_RXD_ADV_LAYOUT_EN_REG, 1); in hclgevf_init_rxd_adv_layout()
3328 static void hclgevf_uninit_rxd_adv_layout(struct hclgevf_dev *hdev) in hclgevf_uninit_rxd_adv_layout() argument
3330 if (hnae3_ae_dev_rxd_adv_layout_supported(hdev->ae_dev)) in hclgevf_uninit_rxd_adv_layout()
3331 hclgevf_write_dev(&hdev->hw, HCLGEVF_RXD_ADV_LAYOUT_EN_REG, 0); in hclgevf_uninit_rxd_adv_layout()
3334 static int hclgevf_reset_hdev(struct hclgevf_dev *hdev) in hclgevf_reset_hdev() argument
3336 struct pci_dev *pdev = hdev->pdev; in hclgevf_reset_hdev()
3339 ret = hclgevf_pci_reset(hdev); in hclgevf_reset_hdev()
3345 ret = hclgevf_cmd_init(hdev); in hclgevf_reset_hdev()
3351 ret = hclgevf_rss_init_hw(hdev); in hclgevf_reset_hdev()
3353 dev_err(&hdev->pdev->dev, in hclgevf_reset_hdev()
3358 ret = hclgevf_config_gro(hdev); in hclgevf_reset_hdev()
3362 ret = hclgevf_init_vlan_config(hdev); in hclgevf_reset_hdev()
3364 dev_err(&hdev->pdev->dev, in hclgevf_reset_hdev()
3370 ret = hclgevf_get_port_base_vlan_filter_state(hdev); in hclgevf_reset_hdev()
3374 set_bit(HCLGEVF_STATE_PROMISC_CHANGED, &hdev->state); in hclgevf_reset_hdev()
3376 hclgevf_init_rxd_adv_layout(hdev); in hclgevf_reset_hdev()
3378 dev_info(&hdev->pdev->dev, "Reset done\n"); in hclgevf_reset_hdev()
3383 static int hclgevf_init_hdev(struct hclgevf_dev *hdev) in hclgevf_init_hdev() argument
3385 struct pci_dev *pdev = hdev->pdev; in hclgevf_init_hdev()
3388 ret = hclgevf_pci_init(hdev); in hclgevf_init_hdev()
3392 ret = hclgevf_devlink_init(hdev); in hclgevf_init_hdev()
3396 ret = hclgevf_cmd_queue_init(hdev); in hclgevf_init_hdev()
3400 ret = hclgevf_cmd_init(hdev); in hclgevf_init_hdev()
3405 ret = hclgevf_query_vf_resource(hdev); in hclgevf_init_hdev()
3409 ret = hclgevf_query_dev_specs(hdev); in hclgevf_init_hdev()
3416 ret = hclgevf_init_msi(hdev); in hclgevf_init_hdev()
3422 hclgevf_state_init(hdev); in hclgevf_init_hdev()
3423 hdev->reset_level = HNAE3_VF_FUNC_RESET; in hclgevf_init_hdev()
3424 hdev->reset_type = HNAE3_NONE_RESET; in hclgevf_init_hdev()
3426 ret = hclgevf_misc_irq_init(hdev); in hclgevf_init_hdev()
3430 set_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state); in hclgevf_init_hdev()
3432 ret = hclgevf_configure(hdev); in hclgevf_init_hdev()
3438 ret = hclgevf_alloc_tqps(hdev); in hclgevf_init_hdev()
3444 ret = hclgevf_set_handle_info(hdev); in hclgevf_init_hdev()
3448 ret = hclgevf_config_gro(hdev); in hclgevf_init_hdev()
3453 ret = hclgevf_rss_init_cfg(hdev); in hclgevf_init_hdev()
3459 ret = hclgevf_rss_init_hw(hdev); in hclgevf_init_hdev()
3461 dev_err(&hdev->pdev->dev, in hclgevf_init_hdev()
3467 ret = hclgevf_clear_vport_list(hdev); in hclgevf_init_hdev()
3475 ret = hclgevf_init_vlan_config(hdev); in hclgevf_init_hdev()
3477 dev_err(&hdev->pdev->dev, in hclgevf_init_hdev()
3482 hclgevf_init_rxd_adv_layout(hdev); in hclgevf_init_hdev()
3484 set_bit(HCLGEVF_STATE_SERVICE_INITED, &hdev->state); in hclgevf_init_hdev()
3486 hdev->last_reset_time = jiffies; in hclgevf_init_hdev()
3487 dev_info(&hdev->pdev->dev, "finished initializing %s driver\n", in hclgevf_init_hdev()
3490 hclgevf_task_schedule(hdev, round_jiffies_relative(HZ)); in hclgevf_init_hdev()
3491 timer_setup(&hdev->reset_timer, hclgevf_reset_timer, 0); in hclgevf_init_hdev()
3496 hclgevf_misc_irq_uninit(hdev); in hclgevf_init_hdev()
3498 hclgevf_state_uninit(hdev); in hclgevf_init_hdev()
3499 hclgevf_uninit_msi(hdev); in hclgevf_init_hdev()
3501 hclgevf_cmd_uninit(hdev); in hclgevf_init_hdev()
3503 hclgevf_devlink_uninit(hdev); in hclgevf_init_hdev()
3505 hclgevf_pci_uninit(hdev); in hclgevf_init_hdev()
3506 clear_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state); in hclgevf_init_hdev()
3510 static void hclgevf_uninit_hdev(struct hclgevf_dev *hdev) in hclgevf_uninit_hdev() argument
3514 hclgevf_state_uninit(hdev); in hclgevf_uninit_hdev()
3515 hclgevf_uninit_rxd_adv_layout(hdev); in hclgevf_uninit_hdev()
3518 hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_uninit_hdev()
3520 if (test_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state)) { in hclgevf_uninit_hdev()
3521 hclgevf_misc_irq_uninit(hdev); in hclgevf_uninit_hdev()
3522 hclgevf_uninit_msi(hdev); in hclgevf_uninit_hdev()
3525 hclgevf_cmd_uninit(hdev); in hclgevf_uninit_hdev()
3526 hclgevf_devlink_uninit(hdev); in hclgevf_uninit_hdev()
3527 hclgevf_pci_uninit(hdev); in hclgevf_uninit_hdev()
3528 hclgevf_uninit_mac_list(hdev); in hclgevf_uninit_hdev()
3553 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_uninit_ae_dev() local
3555 hclgevf_uninit_hdev(hdev); in hclgevf_uninit_ae_dev()
3559 static u32 hclgevf_get_max_channels(struct hclgevf_dev *hdev) in hclgevf_get_max_channels() argument
3561 struct hnae3_handle *nic = &hdev->nic; in hclgevf_get_max_channels()
3564 return min_t(u32, hdev->rss_size_max, in hclgevf_get_max_channels()
3565 hdev->num_tqps / kinfo->tc_info.num_tc); in hclgevf_get_max_channels()
3581 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_channels() local
3583 ch->max_combined = hclgevf_get_max_channels(hdev); in hclgevf_get_channels()
3592 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_tqps_and_rss_info() local
3594 *alloc_tqps = hdev->num_tqps; in hclgevf_get_tqps_and_rss_info()
3595 *max_rss_size = hdev->rss_size_max; in hclgevf_get_tqps_and_rss_info()
3602 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_update_rss_size() local
3607 max_rss_size = min_t(u16, hdev->rss_size_max, in hclgevf_update_rss_size()
3608 hdev->num_tqps / kinfo->tc_info.num_tc); in hclgevf_update_rss_size()
3626 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_channels() local
3636 ret = hclgevf_set_rss_tc_mode(hdev, kinfo->rss_size); in hclgevf_set_channels()
3645 rss_indir = kcalloc(hdev->ae_dev->dev_specs.rss_ind_tbl_size, in hclgevf_set_channels()
3650 for (i = 0; i < hdev->ae_dev->dev_specs.rss_ind_tbl_size; i++) in hclgevf_set_channels()
3653 hdev->rss_cfg.rss_size = kinfo->rss_size; in hclgevf_set_channels()
3657 dev_err(&hdev->pdev->dev, "set rss indir table fail, ret=%d\n", in hclgevf_set_channels()
3664 dev_info(&hdev->pdev->dev, in hclgevf_set_channels()
3674 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_status() local
3676 return hdev->hw.mac.link; in hclgevf_get_status()
3683 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_ksettings_an_result() local
3686 *speed = hdev->hw.mac.speed; in hclgevf_get_ksettings_an_result()
3688 *duplex = hdev->hw.mac.duplex; in hclgevf_get_ksettings_an_result()
3693 void hclgevf_update_speed_duplex(struct hclgevf_dev *hdev, u32 speed, in hclgevf_update_speed_duplex() argument
3696 hdev->hw.mac.speed = speed; in hclgevf_update_speed_duplex()
3697 hdev->hw.mac.duplex = duplex; in hclgevf_update_speed_duplex()
3702 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_gro_en() local
3703 bool gro_en_old = hdev->gro_en; in hclgevf_gro_en()
3706 hdev->gro_en = enable; in hclgevf_gro_en()
3707 ret = hclgevf_config_gro(hdev); in hclgevf_gro_en()
3709 hdev->gro_en = gro_en_old; in hclgevf_gro_en()
3717 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_media_type() local
3720 *media_type = hdev->hw.mac.media_type; in hclgevf_get_media_type()
3723 *module_type = hdev->hw.mac.module_type; in hclgevf_get_media_type()
3728 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_hw_reset_stat() local
3730 return !!hclgevf_read_dev(&hdev->hw, HCLGEVF_RST_ING); in hclgevf_get_hw_reset_stat()
3735 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_cmdq_stat() local
3737 return test_bit(HCLGEVF_STATE_CMD_DISABLE, &hdev->state); in hclgevf_get_cmdq_stat()
3742 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_ae_dev_resetting() local
3744 return test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state); in hclgevf_ae_dev_resetting()
3749 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_ae_dev_reset_cnt() local
3751 return hdev->rst_stats.hw_rst_done_cnt; in hclgevf_ae_dev_reset_cnt()
3758 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_link_mode() local
3760 *supported = hdev->hw.mac.supported; in hclgevf_get_link_mode()
3761 *advertising = hdev->hw.mac.advertising; in hclgevf_get_link_mode()
3772 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_regs_len() local
3779 return (cmdq_lines + common_lines + ring_lines * hdev->num_tqps + in hclgevf_get_regs_len()
3780 tqp_intr_lines * (hdev->num_msi_used - 1)) * REG_LEN_PER_LINE; in hclgevf_get_regs_len()
3786 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_regs() local
3790 *version = hdev->fw_version; in hclgevf_get_regs()
3796 *reg++ = hclgevf_read_dev(&hdev->hw, cmdq_reg_addr_list[i]); in hclgevf_get_regs()
3803 *reg++ = hclgevf_read_dev(&hdev->hw, common_reg_addr_list[i]); in hclgevf_get_regs()
3809 for (j = 0; j < hdev->num_tqps; j++) { in hclgevf_get_regs()
3811 *reg++ = hclgevf_read_dev(&hdev->hw, in hclgevf_get_regs()
3820 for (j = 0; j < hdev->num_msi_used - 1; j++) { in hclgevf_get_regs()
3822 *reg++ = hclgevf_read_dev(&hdev->hw, in hclgevf_get_regs()
3830 void hclgevf_update_port_base_vlan_info(struct hclgevf_dev *hdev, u16 state, in hclgevf_update_port_base_vlan_info() argument
3833 struct hnae3_handle *nic = &hdev->nic; in hclgevf_update_port_base_vlan_info()
3839 if (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state) || in hclgevf_update_port_base_vlan_info()
3840 test_bit(HCLGEVF_STATE_RST_FAIL, &hdev->state)) { in hclgevf_update_port_base_vlan_info()
3841 dev_warn(&hdev->pdev->dev, in hclgevf_update_port_base_vlan_info()
3847 ret = hclgevf_notify_client(hdev, HNAE3_DOWN_CLIENT); in hclgevf_update_port_base_vlan_info()
3857 ret = hclgevf_send_mbx_msg(hdev, &send_msg, false, NULL, 0); in hclgevf_update_port_base_vlan_info()
3865 hclgevf_notify_client(hdev, HNAE3_UP_CLIENT); in hclgevf_update_port_base_vlan_info()