Lines Matching refs:hdev

16 static int hclgevf_reset_hdev(struct hclgevf_dev *hdev);
101 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_tqps_update_stats() local
114 status = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_tqps_update_stats()
116 dev_err(&hdev->pdev->dev, in hclgevf_tqps_update_stats()
128 status = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_tqps_update_stats()
130 dev_err(&hdev->pdev->dev, in hclgevf_tqps_update_stats()
196 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_update_stats() local
201 dev_err(&hdev->pdev->dev, in hclgevf_update_stats()
230 static int hclgevf_get_tc_info(struct hclgevf_dev *hdev) in hclgevf_get_tc_info() argument
235 status = hclgevf_send_mbx_msg(hdev, HCLGE_MBX_GET_TCINFO, 0, NULL, 0, in hclgevf_get_tc_info()
238 dev_err(&hdev->pdev->dev, in hclgevf_get_tc_info()
244 hdev->hw_tc_map = resp_msg; in hclgevf_get_tc_info()
249 static int hclgevf_get_port_base_vlan_filter_state(struct hclgevf_dev *hdev) in hclgevf_get_port_base_vlan_filter_state() argument
251 struct hnae3_handle *nic = &hdev->nic; in hclgevf_get_port_base_vlan_filter_state()
255 ret = hclgevf_send_mbx_msg(hdev, HCLGE_MBX_SET_VLAN, in hclgevf_get_port_base_vlan_filter_state()
259 dev_err(&hdev->pdev->dev, in hclgevf_get_port_base_vlan_filter_state()
270 static int hclgevf_get_queue_info(struct hclgevf_dev *hdev) in hclgevf_get_queue_info() argument
276 status = hclgevf_send_mbx_msg(hdev, HCLGE_MBX_GET_QINFO, 0, NULL, 0, in hclgevf_get_queue_info()
280 dev_err(&hdev->pdev->dev, in hclgevf_get_queue_info()
286 memcpy(&hdev->num_tqps, &resp_msg[0], sizeof(u16)); in hclgevf_get_queue_info()
287 memcpy(&hdev->rss_size_max, &resp_msg[2], sizeof(u16)); in hclgevf_get_queue_info()
288 memcpy(&hdev->rx_buf_len, &resp_msg[4], sizeof(u16)); in hclgevf_get_queue_info()
293 static int hclgevf_get_queue_depth(struct hclgevf_dev *hdev) in hclgevf_get_queue_depth() argument
299 ret = hclgevf_send_mbx_msg(hdev, HCLGE_MBX_GET_QDEPTH, 0, NULL, 0, in hclgevf_get_queue_depth()
303 dev_err(&hdev->pdev->dev, in hclgevf_get_queue_depth()
309 memcpy(&hdev->num_tx_desc, &resp_msg[0], sizeof(u16)); in hclgevf_get_queue_depth()
310 memcpy(&hdev->num_rx_desc, &resp_msg[2], sizeof(u16)); in hclgevf_get_queue_depth()
317 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_qid_global() local
324 ret = hclgevf_send_mbx_msg(hdev, HCLGE_MBX_GET_QID_IN_PF, 0, msg_data, in hclgevf_get_qid_global()
333 static int hclgevf_get_pf_media_type(struct hclgevf_dev *hdev) in hclgevf_get_pf_media_type() argument
338 ret = hclgevf_send_mbx_msg(hdev, HCLGE_MBX_GET_MEDIA_TYPE, 0, NULL, 0, in hclgevf_get_pf_media_type()
341 dev_err(&hdev->pdev->dev, in hclgevf_get_pf_media_type()
347 hdev->hw.mac.media_type = resp_msg[0]; in hclgevf_get_pf_media_type()
348 hdev->hw.mac.module_type = resp_msg[1]; in hclgevf_get_pf_media_type()
353 static int hclgevf_alloc_tqps(struct hclgevf_dev *hdev) in hclgevf_alloc_tqps() argument
358 hdev->htqp = devm_kcalloc(&hdev->pdev->dev, hdev->num_tqps, in hclgevf_alloc_tqps()
360 if (!hdev->htqp) in hclgevf_alloc_tqps()
363 tqp = hdev->htqp; in hclgevf_alloc_tqps()
365 for (i = 0; i < hdev->num_tqps; i++) { in hclgevf_alloc_tqps()
366 tqp->dev = &hdev->pdev->dev; in hclgevf_alloc_tqps()
370 tqp->q.buf_size = hdev->rx_buf_len; in hclgevf_alloc_tqps()
371 tqp->q.tx_desc_num = hdev->num_tx_desc; in hclgevf_alloc_tqps()
372 tqp->q.rx_desc_num = hdev->num_rx_desc; in hclgevf_alloc_tqps()
373 tqp->q.io_base = hdev->hw.io_base + HCLGEVF_TQP_REG_OFFSET + in hclgevf_alloc_tqps()
382 static int hclgevf_knic_setup(struct hclgevf_dev *hdev) in hclgevf_knic_setup() argument
384 struct hnae3_handle *nic = &hdev->nic; in hclgevf_knic_setup()
386 u16 new_tqps = hdev->num_tqps; in hclgevf_knic_setup()
391 kinfo->num_tx_desc = hdev->num_tx_desc; in hclgevf_knic_setup()
392 kinfo->num_rx_desc = hdev->num_rx_desc; in hclgevf_knic_setup()
393 kinfo->rx_buf_len = hdev->rx_buf_len; in hclgevf_knic_setup()
395 if (hdev->hw_tc_map & BIT(i)) in hclgevf_knic_setup()
399 = min_t(u16, hdev->rss_size_max, new_tqps / kinfo->num_tc); in hclgevf_knic_setup()
401 kinfo->num_tqps = min(new_tqps, hdev->num_tqps); in hclgevf_knic_setup()
403 kinfo->tqp = devm_kcalloc(&hdev->pdev->dev, kinfo->num_tqps, in hclgevf_knic_setup()
409 hdev->htqp[i].q.handle = &hdev->nic; in hclgevf_knic_setup()
410 hdev->htqp[i].q.tqp_index = i; in hclgevf_knic_setup()
411 kinfo->tqp[i] = &hdev->htqp[i].q; in hclgevf_knic_setup()
417 kinfo->num_tqps = min_t(u16, hdev->num_nic_msix - 1, kinfo->num_tqps); in hclgevf_knic_setup()
424 static void hclgevf_request_link_info(struct hclgevf_dev *hdev) in hclgevf_request_link_info() argument
429 status = hclgevf_send_mbx_msg(hdev, HCLGE_MBX_GET_LINK_STATUS, 0, NULL, in hclgevf_request_link_info()
432 dev_err(&hdev->pdev->dev, in hclgevf_request_link_info()
436 void hclgevf_update_link_status(struct hclgevf_dev *hdev, int link_state) in hclgevf_update_link_status() argument
438 struct hnae3_handle *rhandle = &hdev->roce; in hclgevf_update_link_status()
439 struct hnae3_handle *handle = &hdev->nic; in hclgevf_update_link_status()
444 rclient = hdev->roce_client; in hclgevf_update_link_status()
447 test_bit(HCLGEVF_STATE_DOWN, &hdev->state) ? 0 : link_state; in hclgevf_update_link_status()
449 if (link_state != hdev->hw.mac.link) { in hclgevf_update_link_status()
453 hdev->hw.mac.link = link_state; in hclgevf_update_link_status()
457 static void hclgevf_update_link_mode(struct hclgevf_dev *hdev) in hclgevf_update_link_mode() argument
465 hclgevf_send_mbx_msg(hdev, HCLGE_MBX_GET_LINK_MODE, 0, in hclgevf_update_link_mode()
469 hclgevf_send_mbx_msg(hdev, HCLGE_MBX_GET_LINK_MODE, 0, in hclgevf_update_link_mode()
474 static int hclgevf_set_handle_info(struct hclgevf_dev *hdev) in hclgevf_set_handle_info() argument
476 struct hnae3_handle *nic = &hdev->nic; in hclgevf_set_handle_info()
480 nic->pdev = hdev->pdev; in hclgevf_set_handle_info()
481 nic->numa_node_mask = hdev->numa_node_mask; in hclgevf_set_handle_info()
484 ret = hclgevf_knic_setup(hdev); in hclgevf_set_handle_info()
486 dev_err(&hdev->pdev->dev, "VF knic setup failed %d\n", in hclgevf_set_handle_info()
491 static void hclgevf_free_vector(struct hclgevf_dev *hdev, int vector_id) in hclgevf_free_vector() argument
493 if (hdev->vector_status[vector_id] == HCLGEVF_INVALID_VPORT) { in hclgevf_free_vector()
494 dev_warn(&hdev->pdev->dev, in hclgevf_free_vector()
499 hdev->vector_status[vector_id] = HCLGEVF_INVALID_VPORT; in hclgevf_free_vector()
500 hdev->num_msi_left += 1; in hclgevf_free_vector()
501 hdev->num_msi_used -= 1; in hclgevf_free_vector()
507 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_vector() local
512 vector_num = min_t(u16, hdev->num_nic_msix - 1, vector_num); in hclgevf_get_vector()
513 vector_num = min(hdev->num_msi_left, vector_num); in hclgevf_get_vector()
516 for (i = HCLGEVF_MISC_VECTOR_NUM + 1; i < hdev->num_msi; i++) { in hclgevf_get_vector()
517 if (hdev->vector_status[i] == HCLGEVF_INVALID_VPORT) { in hclgevf_get_vector()
518 vector->vector = pci_irq_vector(hdev->pdev, i); in hclgevf_get_vector()
519 vector->io_addr = hdev->hw.io_base + in hclgevf_get_vector()
522 hdev->vector_status[i] = 0; in hclgevf_get_vector()
523 hdev->vector_irq[i] = vector->vector; in hclgevf_get_vector()
532 hdev->num_msi_left -= alloc; in hclgevf_get_vector()
533 hdev->num_msi_used += alloc; in hclgevf_get_vector()
538 static int hclgevf_get_vector_index(struct hclgevf_dev *hdev, int vector) in hclgevf_get_vector_index() argument
542 for (i = 0; i < hdev->num_msi; i++) in hclgevf_get_vector_index()
543 if (vector == hdev->vector_irq[i]) in hclgevf_get_vector_index()
549 static int hclgevf_set_rss_algo_key(struct hclgevf_dev *hdev, in hclgevf_set_rss_algo_key() argument
577 ret = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_set_rss_algo_key()
579 dev_err(&hdev->pdev->dev, in hclgevf_set_rss_algo_key()
599 static int hclgevf_set_rss_indir_table(struct hclgevf_dev *hdev) in hclgevf_set_rss_indir_table() argument
601 const u8 *indir = hdev->rss_cfg.rss_indirection_tbl; in hclgevf_set_rss_indir_table()
618 status = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_set_rss_indir_table()
620 dev_err(&hdev->pdev->dev, in hclgevf_set_rss_indir_table()
630 static int hclgevf_set_rss_tc_mode(struct hclgevf_dev *hdev, u16 rss_size) in hclgevf_set_rss_tc_mode() argument
647 tc_valid[i] = !!(hdev->hw_tc_map & BIT(i)); in hclgevf_set_rss_tc_mode()
661 status = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_set_rss_tc_mode()
663 dev_err(&hdev->pdev->dev, in hclgevf_set_rss_tc_mode()
670 static int hclgevf_get_rss_hash_key(struct hclgevf_dev *hdev) in hclgevf_get_rss_hash_key() argument
674 struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_get_rss_hash_key()
683 ret = hclgevf_send_mbx_msg(hdev, HCLGE_MBX_GET_RSS_KEY, 0, in hclgevf_get_rss_hash_key()
688 dev_err(&hdev->pdev->dev, in hclgevf_get_rss_hash_key()
710 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_rss() local
711 struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_get_rss()
738 ret = hclgevf_get_rss_hash_key(hdev); in hclgevf_get_rss()
756 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_rss() local
757 struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_set_rss()
778 ret = hclgevf_set_rss_algo_key(hdev, rss_cfg->hash_algo, in hclgevf_set_rss()
794 return hclgevf_set_rss_indir_table(hdev); in hclgevf_set_rss()
825 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_rss_tuple() local
826 struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_set_rss_tuple()
885 ret = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_set_rss_tuple()
887 dev_err(&hdev->pdev->dev, in hclgevf_set_rss_tuple()
906 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_rss_tuple() local
907 struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_get_rss_tuple()
957 static int hclgevf_set_rss_input_tuple(struct hclgevf_dev *hdev, in hclgevf_set_rss_input_tuple() argument
977 ret = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_set_rss_input_tuple()
979 dev_err(&hdev->pdev->dev, in hclgevf_set_rss_input_tuple()
986 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_tc_size() local
987 struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_get_tc_size()
996 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_bind_ring_to_vector() local
1034 status = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_bind_ring_to_vector()
1036 dev_err(&hdev->pdev->dev, in hclgevf_bind_ring_to_vector()
1056 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_map_ring_to_vector() local
1059 vector_id = hclgevf_get_vector_index(hdev, vector); in hclgevf_map_ring_to_vector()
1074 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_unmap_ring_from_vector() local
1077 if (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state)) in hclgevf_unmap_ring_from_vector()
1080 vector_id = hclgevf_get_vector_index(hdev, vector); in hclgevf_unmap_ring_from_vector()
1099 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_put_vector() local
1102 vector_id = hclgevf_get_vector_index(hdev, vector); in hclgevf_put_vector()
1110 hclgevf_free_vector(hdev, vector_id); in hclgevf_put_vector()
1115 static int hclgevf_cmd_set_promisc_mode(struct hclgevf_dev *hdev, in hclgevf_cmd_set_promisc_mode() argument
1128 ret = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_cmd_set_promisc_mode()
1130 dev_err(&hdev->pdev->dev, in hclgevf_cmd_set_promisc_mode()
1136 static int hclgevf_set_promisc_mode(struct hclgevf_dev *hdev, bool en_bc_pmc) in hclgevf_set_promisc_mode() argument
1138 return hclgevf_cmd_set_promisc_mode(hdev, en_bc_pmc); in hclgevf_set_promisc_mode()
1141 static int hclgevf_tqp_enable(struct hclgevf_dev *hdev, unsigned int tqp_id, in hclgevf_tqp_enable() argument
1157 status = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_tqp_enable()
1159 dev_err(&hdev->pdev->dev, in hclgevf_tqp_enable()
1179 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_mac_addr() local
1181 ether_addr_copy(p, hdev->hw.mac.mac_addr); in hclgevf_get_mac_addr()
1187 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_mac_addr() local
1188 u8 *old_mac_addr = (u8 *)hdev->hw.mac.mac_addr; in hclgevf_set_mac_addr()
1200 status = hclgevf_send_mbx_msg(hdev, HCLGE_MBX_SET_UNICAST, in hclgevf_set_mac_addr()
1204 ether_addr_copy(hdev->hw.mac.mac_addr, new_mac_addr); in hclgevf_set_mac_addr()
1212 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_add_uc_addr() local
1214 return hclgevf_send_mbx_msg(hdev, HCLGE_MBX_SET_UNICAST, in hclgevf_add_uc_addr()
1222 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_rm_uc_addr() local
1224 return hclgevf_send_mbx_msg(hdev, HCLGE_MBX_SET_UNICAST, in hclgevf_rm_uc_addr()
1232 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_add_mc_addr() local
1234 return hclgevf_send_mbx_msg(hdev, HCLGE_MBX_SET_MULTICAST, in hclgevf_add_mc_addr()
1242 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_rm_mc_addr() local
1244 return hclgevf_send_mbx_msg(hdev, HCLGE_MBX_SET_MULTICAST, in hclgevf_rm_mc_addr()
1254 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_vlan_filter() local
1268 if (test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state) && is_kill) { in hclgevf_set_vlan_filter()
1269 set_bit(vlan_id, hdev->vlan_del_fail_bmap); in hclgevf_set_vlan_filter()
1276 ret = hclgevf_send_mbx_msg(hdev, HCLGE_MBX_SET_VLAN, in hclgevf_set_vlan_filter()
1285 set_bit(vlan_id, hdev->vlan_del_fail_bmap); in hclgevf_set_vlan_filter()
1290 static void hclgevf_sync_vlan_filter(struct hclgevf_dev *hdev) in hclgevf_sync_vlan_filter() argument
1293 struct hnae3_handle *handle = &hdev->nic; in hclgevf_sync_vlan_filter()
1297 vlan_id = find_first_bit(hdev->vlan_del_fail_bmap, VLAN_N_VID); in hclgevf_sync_vlan_filter()
1304 clear_bit(vlan_id, hdev->vlan_del_fail_bmap); in hclgevf_sync_vlan_filter()
1309 vlan_id = find_first_bit(hdev->vlan_del_fail_bmap, VLAN_N_VID); in hclgevf_sync_vlan_filter()
1315 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_en_hw_strip_rxvtag() local
1319 return hclgevf_send_mbx_msg(hdev, HCLGE_MBX_SET_VLAN, in hclgevf_en_hw_strip_rxvtag()
1326 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_reset_tqp() local
1333 ret = hclgevf_tqp_enable(hdev, queue_id, 0, false); in hclgevf_reset_tqp()
1337 return hclgevf_send_mbx_msg(hdev, HCLGE_MBX_QUEUE_RESET, 0, msg_data, in hclgevf_reset_tqp()
1343 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_mtu() local
1345 return hclgevf_send_mbx_msg(hdev, HCLGE_MBX_SET_MTU, 0, (u8 *)&new_mtu, in hclgevf_set_mtu()
1349 static int hclgevf_notify_client(struct hclgevf_dev *hdev, in hclgevf_notify_client() argument
1352 struct hnae3_client *client = hdev->nic_client; in hclgevf_notify_client()
1353 struct hnae3_handle *handle = &hdev->nic; in hclgevf_notify_client()
1356 if (!test_bit(HCLGEVF_STATE_NIC_REGISTERED, &hdev->state) || in hclgevf_notify_client()
1365 dev_err(&hdev->pdev->dev, "notify nic client failed %d(%d)\n", in hclgevf_notify_client()
1373 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_flr_done() local
1375 set_bit(HNAE3_FLR_DONE, &hdev->flr_state); in hclgevf_flr_done()
1378 static int hclgevf_flr_poll_timeout(struct hclgevf_dev *hdev, in hclgevf_flr_poll_timeout() argument
1384 while (!test_bit(HNAE3_FLR_DONE, &hdev->flr_state) && in hclgevf_flr_poll_timeout()
1388 if (!test_bit(HNAE3_FLR_DONE, &hdev->flr_state)) { in hclgevf_flr_poll_timeout()
1389 dev_err(&hdev->pdev->dev, in hclgevf_flr_poll_timeout()
1397 static int hclgevf_reset_wait(struct hclgevf_dev *hdev) in hclgevf_reset_wait() argument
1407 if (hdev->reset_type == HNAE3_FLR_RESET) in hclgevf_reset_wait()
1408 return hclgevf_flr_poll_timeout(hdev, in hclgevf_reset_wait()
1411 else if (hdev->reset_type == HNAE3_VF_RESET) in hclgevf_reset_wait()
1412 ret = readl_poll_timeout(hdev->hw.io_base + in hclgevf_reset_wait()
1418 ret = readl_poll_timeout(hdev->hw.io_base + in hclgevf_reset_wait()
1426 dev_err(&hdev->pdev->dev, in hclgevf_reset_wait()
1440 static void hclgevf_reset_handshake(struct hclgevf_dev *hdev, bool enable) in hclgevf_reset_handshake() argument
1444 reg_val = hclgevf_read_dev(&hdev->hw, HCLGEVF_NIC_CSQ_DEPTH_REG); in hclgevf_reset_handshake()
1450 hclgevf_write_dev(&hdev->hw, HCLGEVF_NIC_CSQ_DEPTH_REG, in hclgevf_reset_handshake()
1454 static int hclgevf_reset_stack(struct hclgevf_dev *hdev) in hclgevf_reset_stack() argument
1459 ret = hclgevf_notify_client(hdev, HNAE3_UNINIT_CLIENT); in hclgevf_reset_stack()
1464 ret = hclgevf_reset_hdev(hdev); in hclgevf_reset_stack()
1466 dev_err(&hdev->pdev->dev, in hclgevf_reset_stack()
1472 ret = hclgevf_notify_client(hdev, HNAE3_INIT_CLIENT); in hclgevf_reset_stack()
1476 ret = hclgevf_notify_client(hdev, HNAE3_RESTORE_CLIENT); in hclgevf_reset_stack()
1481 hclgevf_reset_handshake(hdev, false); in hclgevf_reset_stack()
1486 static int hclgevf_reset_prepare_wait(struct hclgevf_dev *hdev) in hclgevf_reset_prepare_wait() argument
1492 switch (hdev->reset_type) { in hclgevf_reset_prepare_wait()
1494 ret = hclgevf_send_mbx_msg(hdev, HCLGE_MBX_RESET, 0, NULL, in hclgevf_reset_prepare_wait()
1496 hdev->rst_stats.vf_func_rst_cnt++; in hclgevf_reset_prepare_wait()
1499 set_bit(HNAE3_FLR_DOWN, &hdev->flr_state); in hclgevf_reset_prepare_wait()
1500 hdev->rst_stats.flr_rst_cnt++; in hclgevf_reset_prepare_wait()
1506 set_bit(HCLGEVF_STATE_CMD_DISABLE, &hdev->state); in hclgevf_reset_prepare_wait()
1509 hclgevf_reset_handshake(hdev, true); in hclgevf_reset_prepare_wait()
1510 dev_info(&hdev->pdev->dev, "prepare reset(%d) wait done, ret:%d\n", in hclgevf_reset_prepare_wait()
1511 hdev->reset_type, ret); in hclgevf_reset_prepare_wait()
1516 static void hclgevf_reset_err_handle(struct hclgevf_dev *hdev) in hclgevf_reset_err_handle() argument
1519 hclgevf_reset_handshake(hdev, true); in hclgevf_reset_err_handle()
1520 hdev->rst_stats.rst_fail_cnt++; in hclgevf_reset_err_handle()
1521 dev_err(&hdev->pdev->dev, "failed to reset VF(%d)\n", in hclgevf_reset_err_handle()
1522 hdev->rst_stats.rst_fail_cnt); in hclgevf_reset_err_handle()
1524 if (hdev->rst_stats.rst_fail_cnt < HCLGEVF_RESET_MAX_FAIL_CNT) in hclgevf_reset_err_handle()
1525 set_bit(hdev->reset_type, &hdev->reset_pending); in hclgevf_reset_err_handle()
1527 if (hclgevf_is_reset_pending(hdev)) { in hclgevf_reset_err_handle()
1528 set_bit(HCLGEVF_RESET_PENDING, &hdev->reset_state); in hclgevf_reset_err_handle()
1529 hclgevf_reset_task_schedule(hdev); in hclgevf_reset_err_handle()
1533 static int hclgevf_reset(struct hclgevf_dev *hdev) in hclgevf_reset() argument
1535 struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev); in hclgevf_reset()
1541 ae_dev->reset_type = hdev->reset_type; in hclgevf_reset()
1542 hdev->rst_stats.rst_cnt++; in hclgevf_reset()
1546 ret = hclgevf_notify_client(hdev, HNAE3_DOWN_CLIENT); in hclgevf_reset()
1552 ret = hclgevf_reset_prepare_wait(hdev); in hclgevf_reset()
1559 ret = hclgevf_reset_wait(hdev); in hclgevf_reset()
1562 dev_err(&hdev->pdev->dev, in hclgevf_reset()
1568 hdev->rst_stats.hw_rst_done_cnt++; in hclgevf_reset()
1573 ret = hclgevf_reset_stack(hdev); in hclgevf_reset()
1575 dev_err(&hdev->pdev->dev, "failed to reset VF stack\n"); in hclgevf_reset()
1580 ret = hclgevf_notify_client(hdev, HNAE3_UP_CLIENT); in hclgevf_reset()
1586 hdev->last_reset_time = jiffies; in hclgevf_reset()
1588 hdev->rst_stats.rst_done_cnt++; in hclgevf_reset()
1589 hdev->rst_stats.rst_fail_cnt = 0; in hclgevf_reset()
1595 hclgevf_reset_err_handle(hdev); in hclgevf_reset()
1600 static enum hnae3_reset_type hclgevf_get_reset_level(struct hclgevf_dev *hdev, in hclgevf_get_reset_level() argument
1634 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_reset_event() local
1636 dev_info(&hdev->pdev->dev, "received reset request from VF enet\n"); in hclgevf_reset_event()
1638 if (hdev->default_reset_request) in hclgevf_reset_event()
1639 hdev->reset_level = in hclgevf_reset_event()
1640 hclgevf_get_reset_level(hdev, in hclgevf_reset_event()
1641 &hdev->default_reset_request); in hclgevf_reset_event()
1643 hdev->reset_level = HNAE3_VF_FUNC_RESET; in hclgevf_reset_event()
1646 set_bit(HCLGEVF_RESET_REQUESTED, &hdev->reset_state); in hclgevf_reset_event()
1647 hclgevf_reset_task_schedule(hdev); in hclgevf_reset_event()
1649 hdev->last_reset_time = jiffies; in hclgevf_reset_event()
1655 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_set_def_reset_request() local
1657 set_bit(rst_type, &hdev->default_reset_request); in hclgevf_set_def_reset_request()
1664 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_flr_prepare() local
1667 clear_bit(HNAE3_FLR_DOWN, &hdev->flr_state); in hclgevf_flr_prepare()
1668 clear_bit(HNAE3_FLR_DONE, &hdev->flr_state); in hclgevf_flr_prepare()
1669 set_bit(HNAE3_FLR_RESET, &hdev->default_reset_request); in hclgevf_flr_prepare()
1670 hclgevf_reset_event(hdev->pdev, NULL); in hclgevf_flr_prepare()
1672 while (!test_bit(HNAE3_FLR_DOWN, &hdev->flr_state) && in hclgevf_flr_prepare()
1676 if (!test_bit(HNAE3_FLR_DOWN, &hdev->flr_state)) in hclgevf_flr_prepare()
1677 dev_err(&hdev->pdev->dev, in hclgevf_flr_prepare()
1683 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_fw_version() local
1685 return hdev->fw_version; in hclgevf_get_fw_version()
1688 static void hclgevf_get_misc_vector(struct hclgevf_dev *hdev) in hclgevf_get_misc_vector() argument
1690 struct hclgevf_misc_vector *vector = &hdev->misc_vector; in hclgevf_get_misc_vector()
1692 vector->vector_irq = pci_irq_vector(hdev->pdev, in hclgevf_get_misc_vector()
1694 vector->addr = hdev->hw.io_base + HCLGEVF_MISC_VECTOR_REG_BASE; in hclgevf_get_misc_vector()
1696 hdev->vector_status[HCLGEVF_MISC_VECTOR_NUM] = 0; in hclgevf_get_misc_vector()
1697 hdev->vector_irq[HCLGEVF_MISC_VECTOR_NUM] = vector->vector_irq; in hclgevf_get_misc_vector()
1699 hdev->num_msi_left -= 1; in hclgevf_get_misc_vector()
1700 hdev->num_msi_used += 1; in hclgevf_get_misc_vector()
1703 void hclgevf_reset_task_schedule(struct hclgevf_dev *hdev) in hclgevf_reset_task_schedule() argument
1705 if (!test_bit(HCLGEVF_STATE_RST_SERVICE_SCHED, &hdev->state) && in hclgevf_reset_task_schedule()
1706 !test_bit(HCLGEVF_STATE_REMOVING, &hdev->state)) { in hclgevf_reset_task_schedule()
1707 set_bit(HCLGEVF_STATE_RST_SERVICE_SCHED, &hdev->state); in hclgevf_reset_task_schedule()
1708 schedule_work(&hdev->rst_service_task); in hclgevf_reset_task_schedule()
1712 void hclgevf_mbx_task_schedule(struct hclgevf_dev *hdev) in hclgevf_mbx_task_schedule() argument
1714 if (!test_bit(HCLGEVF_STATE_MBX_SERVICE_SCHED, &hdev->state) && in hclgevf_mbx_task_schedule()
1715 !test_bit(HCLGEVF_STATE_MBX_HANDLING, &hdev->state)) { in hclgevf_mbx_task_schedule()
1716 set_bit(HCLGEVF_STATE_MBX_SERVICE_SCHED, &hdev->state); in hclgevf_mbx_task_schedule()
1717 schedule_work(&hdev->mbx_service_task); in hclgevf_mbx_task_schedule()
1721 static void hclgevf_task_schedule(struct hclgevf_dev *hdev) in hclgevf_task_schedule() argument
1723 if (!test_bit(HCLGEVF_STATE_DOWN, &hdev->state) && in hclgevf_task_schedule()
1724 !test_and_set_bit(HCLGEVF_STATE_SERVICE_SCHED, &hdev->state)) in hclgevf_task_schedule()
1725 schedule_work(&hdev->service_task); in hclgevf_task_schedule()
1728 static void hclgevf_deferred_task_schedule(struct hclgevf_dev *hdev) in hclgevf_deferred_task_schedule() argument
1731 if (hdev->mbx_event_pending) in hclgevf_deferred_task_schedule()
1732 hclgevf_mbx_task_schedule(hdev); in hclgevf_deferred_task_schedule()
1734 if (test_bit(HCLGEVF_RESET_PENDING, &hdev->reset_state)) in hclgevf_deferred_task_schedule()
1735 hclgevf_reset_task_schedule(hdev); in hclgevf_deferred_task_schedule()
1740 struct hclgevf_dev *hdev = from_timer(hdev, t, service_timer); in hclgevf_service_timer() local
1742 mod_timer(&hdev->service_timer, jiffies + in hclgevf_service_timer()
1745 hdev->stats_timer++; in hclgevf_service_timer()
1746 hclgevf_task_schedule(hdev); in hclgevf_service_timer()
1751 struct hclgevf_dev *hdev = in hclgevf_reset_service_task() local
1755 if (test_and_set_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state)) in hclgevf_reset_service_task()
1758 clear_bit(HCLGEVF_STATE_RST_SERVICE_SCHED, &hdev->state); in hclgevf_reset_service_task()
1761 &hdev->reset_state)) { in hclgevf_reset_service_task()
1767 hdev->reset_attempts = 0; in hclgevf_reset_service_task()
1769 hdev->last_reset_time = jiffies; in hclgevf_reset_service_task()
1770 while ((hdev->reset_type = in hclgevf_reset_service_task()
1771 hclgevf_get_reset_level(hdev, &hdev->reset_pending)) in hclgevf_reset_service_task()
1773 ret = hclgevf_reset(hdev); in hclgevf_reset_service_task()
1775 dev_err(&hdev->pdev->dev, in hclgevf_reset_service_task()
1779 &hdev->reset_state)) { in hclgevf_reset_service_task()
1803 if (hdev->reset_attempts > 3) { in hclgevf_reset_service_task()
1805 set_bit(HNAE3_VF_FULL_RESET, &hdev->reset_pending); in hclgevf_reset_service_task()
1808 set_bit(HCLGEVF_RESET_PENDING, &hdev->reset_state); in hclgevf_reset_service_task()
1810 hdev->reset_attempts++; in hclgevf_reset_service_task()
1812 set_bit(hdev->reset_level, &hdev->reset_pending); in hclgevf_reset_service_task()
1813 set_bit(HCLGEVF_RESET_PENDING, &hdev->reset_state); in hclgevf_reset_service_task()
1815 hclgevf_reset_task_schedule(hdev); in hclgevf_reset_service_task()
1818 clear_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state); in hclgevf_reset_service_task()
1823 struct hclgevf_dev *hdev; in hclgevf_mailbox_service_task() local
1825 hdev = container_of(work, struct hclgevf_dev, mbx_service_task); in hclgevf_mailbox_service_task()
1827 if (test_and_set_bit(HCLGEVF_STATE_MBX_HANDLING, &hdev->state)) in hclgevf_mailbox_service_task()
1830 clear_bit(HCLGEVF_STATE_MBX_SERVICE_SCHED, &hdev->state); in hclgevf_mailbox_service_task()
1832 hclgevf_mbx_async_handler(hdev); in hclgevf_mailbox_service_task()
1834 clear_bit(HCLGEVF_STATE_MBX_HANDLING, &hdev->state); in hclgevf_mailbox_service_task()
1839 struct hclgevf_dev *hdev = from_timer(hdev, t, keep_alive_timer); in hclgevf_keep_alive_timer() local
1841 schedule_work(&hdev->keep_alive_task); in hclgevf_keep_alive_timer()
1842 mod_timer(&hdev->keep_alive_timer, jiffies + in hclgevf_keep_alive_timer()
1848 struct hclgevf_dev *hdev; in hclgevf_keep_alive_task() local
1852 hdev = container_of(work, struct hclgevf_dev, keep_alive_task); in hclgevf_keep_alive_task()
1854 if (test_bit(HCLGEVF_STATE_CMD_DISABLE, &hdev->state)) in hclgevf_keep_alive_task()
1857 ret = hclgevf_send_mbx_msg(hdev, HCLGE_MBX_KEEP_ALIVE, 0, NULL, in hclgevf_keep_alive_task()
1860 dev_err(&hdev->pdev->dev, in hclgevf_keep_alive_task()
1867 struct hclgevf_dev *hdev; in hclgevf_service_task() local
1869 hdev = container_of(work, struct hclgevf_dev, service_task); in hclgevf_service_task()
1870 handle = &hdev->nic; in hclgevf_service_task()
1872 if (hdev->stats_timer >= HCLGEVF_STATS_TIMER_INTERVAL) { in hclgevf_service_task()
1874 hdev->stats_timer = 0; in hclgevf_service_task()
1880 hclgevf_request_link_info(hdev); in hclgevf_service_task()
1882 hclgevf_update_link_mode(hdev); in hclgevf_service_task()
1884 hclgevf_sync_vlan_filter(hdev); in hclgevf_service_task()
1886 hclgevf_deferred_task_schedule(hdev); in hclgevf_service_task()
1888 clear_bit(HCLGEVF_STATE_SERVICE_SCHED, &hdev->state); in hclgevf_service_task()
1891 static void hclgevf_clear_event_cause(struct hclgevf_dev *hdev, u32 regclr) in hclgevf_clear_event_cause() argument
1893 hclgevf_write_dev(&hdev->hw, HCLGEVF_VECTOR0_CMDQ_SRC_REG, regclr); in hclgevf_clear_event_cause()
1896 static enum hclgevf_evt_cause hclgevf_check_evt_cause(struct hclgevf_dev *hdev, in hclgevf_check_evt_cause() argument
1902 cmdq_stat_reg = hclgevf_read_dev(&hdev->hw, in hclgevf_check_evt_cause()
1906 rst_ing_reg = hclgevf_read_dev(&hdev->hw, HCLGEVF_RST_ING); in hclgevf_check_evt_cause()
1907 dev_info(&hdev->pdev->dev, in hclgevf_check_evt_cause()
1909 set_bit(HNAE3_VF_RESET, &hdev->reset_pending); in hclgevf_check_evt_cause()
1910 set_bit(HCLGEVF_RESET_PENDING, &hdev->reset_state); in hclgevf_check_evt_cause()
1911 set_bit(HCLGEVF_STATE_CMD_DISABLE, &hdev->state); in hclgevf_check_evt_cause()
1913 hdev->rst_stats.vf_rst_cnt++; in hclgevf_check_evt_cause()
1917 val = hclgevf_read_dev(&hdev->hw, HCLGEVF_VF_RST_ING); in hclgevf_check_evt_cause()
1918 hclgevf_write_dev(&hdev->hw, HCLGEVF_VF_RST_ING, in hclgevf_check_evt_cause()
1932 if (hdev->pdev->revision >= 0x21) in hclgevf_check_evt_cause()
1941 dev_dbg(&hdev->pdev->dev, "vector 0 interrupt from unknown source\n"); in hclgevf_check_evt_cause()
1954 struct hclgevf_dev *hdev = data; in hclgevf_misc_irq_handle() local
1957 hclgevf_enable_vector(&hdev->misc_vector, false); in hclgevf_misc_irq_handle()
1958 event_cause = hclgevf_check_evt_cause(hdev, &clearval); in hclgevf_misc_irq_handle()
1962 hclgevf_reset_task_schedule(hdev); in hclgevf_misc_irq_handle()
1965 hclgevf_mbx_handler(hdev); in hclgevf_misc_irq_handle()
1972 hclgevf_clear_event_cause(hdev, clearval); in hclgevf_misc_irq_handle()
1973 hclgevf_enable_vector(&hdev->misc_vector, true); in hclgevf_misc_irq_handle()
1979 static int hclgevf_configure(struct hclgevf_dev *hdev) in hclgevf_configure() argument
1984 ret = hclgevf_get_port_base_vlan_filter_state(hdev); in hclgevf_configure()
1989 ret = hclgevf_get_queue_info(hdev); in hclgevf_configure()
1994 ret = hclgevf_get_queue_depth(hdev); in hclgevf_configure()
1998 ret = hclgevf_get_pf_media_type(hdev); in hclgevf_configure()
2003 return hclgevf_get_tc_info(hdev); in hclgevf_configure()
2009 struct hclgevf_dev *hdev; in hclgevf_alloc_hdev() local
2011 hdev = devm_kzalloc(&pdev->dev, sizeof(*hdev), GFP_KERNEL); in hclgevf_alloc_hdev()
2012 if (!hdev) in hclgevf_alloc_hdev()
2015 hdev->pdev = pdev; in hclgevf_alloc_hdev()
2016 hdev->ae_dev = ae_dev; in hclgevf_alloc_hdev()
2017 ae_dev->priv = hdev; in hclgevf_alloc_hdev()
2022 static int hclgevf_init_roce_base_info(struct hclgevf_dev *hdev) in hclgevf_init_roce_base_info() argument
2024 struct hnae3_handle *roce = &hdev->roce; in hclgevf_init_roce_base_info()
2025 struct hnae3_handle *nic = &hdev->nic; in hclgevf_init_roce_base_info()
2027 roce->rinfo.num_vectors = hdev->num_roce_msix; in hclgevf_init_roce_base_info()
2029 if (hdev->num_msi_left < roce->rinfo.num_vectors || in hclgevf_init_roce_base_info()
2030 hdev->num_msi_left == 0) in hclgevf_init_roce_base_info()
2033 roce->rinfo.base_vector = hdev->roce_base_vector; in hclgevf_init_roce_base_info()
2036 roce->rinfo.roce_io_base = hdev->hw.io_base; in hclgevf_init_roce_base_info()
2045 static int hclgevf_config_gro(struct hclgevf_dev *hdev, bool en) in hclgevf_config_gro() argument
2051 if (!hnae3_dev_gro_supported(hdev)) in hclgevf_config_gro()
2060 ret = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_config_gro()
2062 dev_err(&hdev->pdev->dev, in hclgevf_config_gro()
2068 static int hclgevf_rss_init_hw(struct hclgevf_dev *hdev) in hclgevf_rss_init_hw() argument
2070 struct hclgevf_rss_cfg *rss_cfg = &hdev->rss_cfg; in hclgevf_rss_init_hw()
2074 rss_cfg->rss_size = hdev->nic.kinfo.rss_size; in hclgevf_rss_init_hw()
2076 if (hdev->pdev->revision >= 0x21) { in hclgevf_rss_init_hw()
2081 ret = hclgevf_set_rss_algo_key(hdev, rss_cfg->hash_algo, in hclgevf_rss_init_hw()
2103 ret = hclgevf_set_rss_input_tuple(hdev, rss_cfg); in hclgevf_rss_init_hw()
2113 ret = hclgevf_set_rss_indir_table(hdev); in hclgevf_rss_init_hw()
2117 return hclgevf_set_rss_tc_mode(hdev, rss_cfg->rss_size); in hclgevf_rss_init_hw()
2120 static int hclgevf_init_vlan_config(struct hclgevf_dev *hdev) in hclgevf_init_vlan_config() argument
2122 return hclgevf_set_vlan_filter(&hdev->nic, htons(ETH_P_8021Q), 0, in hclgevf_init_vlan_config()
2128 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_timer_task() local
2131 mod_timer(&hdev->service_timer, jiffies + HZ); in hclgevf_set_timer_task()
2133 del_timer_sync(&hdev->service_timer); in hclgevf_set_timer_task()
2134 cancel_work_sync(&hdev->service_task); in hclgevf_set_timer_task()
2135 clear_bit(HCLGEVF_STATE_SERVICE_SCHED, &hdev->state); in hclgevf_set_timer_task()
2141 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_ae_start() local
2145 hclgevf_request_link_info(hdev); in hclgevf_ae_start()
2147 hclgevf_update_link_mode(hdev); in hclgevf_ae_start()
2149 clear_bit(HCLGEVF_STATE_DOWN, &hdev->state); in hclgevf_ae_start()
2156 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_ae_stop() local
2159 set_bit(HCLGEVF_STATE_DOWN, &hdev->state); in hclgevf_ae_stop()
2161 if (hdev->reset_type != HNAE3_VF_RESET) in hclgevf_ae_stop()
2167 hclgevf_update_link_status(hdev, 0); in hclgevf_ae_stop()
2172 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_alive() local
2176 return hclgevf_send_mbx_msg(hdev, HCLGE_MBX_SET_ALIVE, in hclgevf_set_alive()
2182 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_client_start() local
2189 mod_timer(&hdev->keep_alive_timer, jiffies + in hclgevf_client_start()
2197 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_client_stop() local
2202 dev_warn(&hdev->pdev->dev, in hclgevf_client_stop()
2205 del_timer_sync(&hdev->keep_alive_timer); in hclgevf_client_stop()
2206 cancel_work_sync(&hdev->keep_alive_task); in hclgevf_client_stop()
2209 static void hclgevf_state_init(struct hclgevf_dev *hdev) in hclgevf_state_init() argument
2212 INIT_WORK(&hdev->mbx_service_task, hclgevf_mailbox_service_task); in hclgevf_state_init()
2213 clear_bit(HCLGEVF_STATE_MBX_SERVICE_SCHED, &hdev->state); in hclgevf_state_init()
2214 clear_bit(HCLGEVF_STATE_MBX_HANDLING, &hdev->state); in hclgevf_state_init()
2217 timer_setup(&hdev->service_timer, hclgevf_service_timer, 0); in hclgevf_state_init()
2219 INIT_WORK(&hdev->service_task, hclgevf_service_task); in hclgevf_state_init()
2220 clear_bit(HCLGEVF_STATE_SERVICE_SCHED, &hdev->state); in hclgevf_state_init()
2222 INIT_WORK(&hdev->rst_service_task, hclgevf_reset_service_task); in hclgevf_state_init()
2224 mutex_init(&hdev->mbx_resp.mbx_mutex); in hclgevf_state_init()
2227 set_bit(HCLGEVF_STATE_DOWN, &hdev->state); in hclgevf_state_init()
2230 static void hclgevf_state_uninit(struct hclgevf_dev *hdev) in hclgevf_state_uninit() argument
2232 set_bit(HCLGEVF_STATE_DOWN, &hdev->state); in hclgevf_state_uninit()
2233 set_bit(HCLGEVF_STATE_REMOVING, &hdev->state); in hclgevf_state_uninit()
2235 if (hdev->keep_alive_timer.function) in hclgevf_state_uninit()
2236 del_timer_sync(&hdev->keep_alive_timer); in hclgevf_state_uninit()
2237 if (hdev->keep_alive_task.func) in hclgevf_state_uninit()
2238 cancel_work_sync(&hdev->keep_alive_task); in hclgevf_state_uninit()
2239 if (hdev->service_timer.function) in hclgevf_state_uninit()
2240 del_timer_sync(&hdev->service_timer); in hclgevf_state_uninit()
2241 if (hdev->service_task.func) in hclgevf_state_uninit()
2242 cancel_work_sync(&hdev->service_task); in hclgevf_state_uninit()
2243 if (hdev->mbx_service_task.func) in hclgevf_state_uninit()
2244 cancel_work_sync(&hdev->mbx_service_task); in hclgevf_state_uninit()
2245 if (hdev->rst_service_task.func) in hclgevf_state_uninit()
2246 cancel_work_sync(&hdev->rst_service_task); in hclgevf_state_uninit()
2248 mutex_destroy(&hdev->mbx_resp.mbx_mutex); in hclgevf_state_uninit()
2251 static int hclgevf_init_msi(struct hclgevf_dev *hdev) in hclgevf_init_msi() argument
2253 struct pci_dev *pdev = hdev->pdev; in hclgevf_init_msi()
2257 if (hnae3_dev_roce_supported(hdev)) in hclgevf_init_msi()
2259 hdev->roce_base_msix_offset + 1, in hclgevf_init_msi()
2260 hdev->num_msi, in hclgevf_init_msi()
2264 hdev->num_msi, in hclgevf_init_msi()
2273 if (vectors < hdev->num_msi) in hclgevf_init_msi()
2274 dev_warn(&hdev->pdev->dev, in hclgevf_init_msi()
2276 hdev->num_msi, vectors); in hclgevf_init_msi()
2278 hdev->num_msi = vectors; in hclgevf_init_msi()
2279 hdev->num_msi_left = vectors; in hclgevf_init_msi()
2281 hdev->base_msi_vector = pdev->irq; in hclgevf_init_msi()
2282 hdev->roce_base_vector = pdev->irq + hdev->roce_base_msix_offset; in hclgevf_init_msi()
2284 hdev->vector_status = devm_kcalloc(&pdev->dev, hdev->num_msi, in hclgevf_init_msi()
2286 if (!hdev->vector_status) { in hclgevf_init_msi()
2291 for (i = 0; i < hdev->num_msi; i++) in hclgevf_init_msi()
2292 hdev->vector_status[i] = HCLGEVF_INVALID_VPORT; in hclgevf_init_msi()
2294 hdev->vector_irq = devm_kcalloc(&pdev->dev, hdev->num_msi, in hclgevf_init_msi()
2296 if (!hdev->vector_irq) { in hclgevf_init_msi()
2297 devm_kfree(&pdev->dev, hdev->vector_status); in hclgevf_init_msi()
2305 static void hclgevf_uninit_msi(struct hclgevf_dev *hdev) in hclgevf_uninit_msi() argument
2307 struct pci_dev *pdev = hdev->pdev; in hclgevf_uninit_msi()
2309 devm_kfree(&pdev->dev, hdev->vector_status); in hclgevf_uninit_msi()
2310 devm_kfree(&pdev->dev, hdev->vector_irq); in hclgevf_uninit_msi()
2314 static int hclgevf_misc_irq_init(struct hclgevf_dev *hdev) in hclgevf_misc_irq_init() argument
2318 hclgevf_get_misc_vector(hdev); in hclgevf_misc_irq_init()
2320 ret = request_irq(hdev->misc_vector.vector_irq, hclgevf_misc_irq_handle, in hclgevf_misc_irq_init()
2321 0, "hclgevf_cmd", hdev); in hclgevf_misc_irq_init()
2323 dev_err(&hdev->pdev->dev, "VF failed to request misc irq(%d)\n", in hclgevf_misc_irq_init()
2324 hdev->misc_vector.vector_irq); in hclgevf_misc_irq_init()
2328 hclgevf_clear_event_cause(hdev, 0); in hclgevf_misc_irq_init()
2331 hclgevf_enable_vector(&hdev->misc_vector, true); in hclgevf_misc_irq_init()
2336 static void hclgevf_misc_irq_uninit(struct hclgevf_dev *hdev) in hclgevf_misc_irq_uninit() argument
2339 hclgevf_enable_vector(&hdev->misc_vector, false); in hclgevf_misc_irq_uninit()
2340 synchronize_irq(hdev->misc_vector.vector_irq); in hclgevf_misc_irq_uninit()
2341 free_irq(hdev->misc_vector.vector_irq, hdev); in hclgevf_misc_irq_uninit()
2342 hclgevf_free_vector(hdev, 0); in hclgevf_misc_irq_uninit()
2345 static void hclgevf_info_show(struct hclgevf_dev *hdev) in hclgevf_info_show() argument
2347 struct device *dev = &hdev->pdev->dev; in hclgevf_info_show()
2351 dev_info(dev, "Task queue pairs numbers: %d\n", hdev->num_tqps); in hclgevf_info_show()
2352 dev_info(dev, "Desc num per TX queue: %d\n", hdev->num_tx_desc); in hclgevf_info_show()
2353 dev_info(dev, "Desc num per RX queue: %d\n", hdev->num_rx_desc); in hclgevf_info_show()
2354 dev_info(dev, "Numbers of vports: %d\n", hdev->num_alloc_vport); in hclgevf_info_show()
2355 dev_info(dev, "HW tc map: %d\n", hdev->hw_tc_map); in hclgevf_info_show()
2357 hdev->hw.mac.media_type); in hclgevf_info_show()
2365 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_init_nic_client_instance() local
2368 ret = client->ops->init_instance(&hdev->nic); in hclgevf_init_nic_client_instance()
2372 set_bit(HCLGEVF_STATE_NIC_REGISTERED, &hdev->state); in hclgevf_init_nic_client_instance()
2375 if (netif_msg_drv(&hdev->nic)) in hclgevf_init_nic_client_instance()
2376 hclgevf_info_show(hdev); in hclgevf_init_nic_client_instance()
2384 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_init_roce_client_instance() local
2387 if (!hnae3_dev_roce_supported(hdev) || !hdev->roce_client || in hclgevf_init_roce_client_instance()
2388 !hdev->nic_client) in hclgevf_init_roce_client_instance()
2391 ret = hclgevf_init_roce_base_info(hdev); in hclgevf_init_roce_client_instance()
2395 ret = client->ops->init_instance(&hdev->roce); in hclgevf_init_roce_client_instance()
2407 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_init_client_instance() local
2412 hdev->nic_client = client; in hclgevf_init_client_instance()
2413 hdev->nic.client = client; in hclgevf_init_client_instance()
2420 hdev->roce_client); in hclgevf_init_client_instance()
2426 if (hnae3_dev_roce_supported(hdev)) { in hclgevf_init_client_instance()
2427 hdev->roce_client = client; in hclgevf_init_client_instance()
2428 hdev->roce.client = client; in hclgevf_init_client_instance()
2443 hdev->nic_client = NULL; in hclgevf_init_client_instance()
2444 hdev->nic.client = NULL; in hclgevf_init_client_instance()
2447 hdev->roce_client = NULL; in hclgevf_init_client_instance()
2448 hdev->roce.client = NULL; in hclgevf_init_client_instance()
2455 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_uninit_client_instance() local
2458 if (hdev->roce_client) { in hclgevf_uninit_client_instance()
2459 hdev->roce_client->ops->uninit_instance(&hdev->roce, 0); in hclgevf_uninit_client_instance()
2460 hdev->roce_client = NULL; in hclgevf_uninit_client_instance()
2461 hdev->roce.client = NULL; in hclgevf_uninit_client_instance()
2465 if (client->ops->uninit_instance && hdev->nic_client && in hclgevf_uninit_client_instance()
2467 clear_bit(HCLGEVF_STATE_NIC_REGISTERED, &hdev->state); in hclgevf_uninit_client_instance()
2469 client->ops->uninit_instance(&hdev->nic, 0); in hclgevf_uninit_client_instance()
2470 hdev->nic_client = NULL; in hclgevf_uninit_client_instance()
2471 hdev->nic.client = NULL; in hclgevf_uninit_client_instance()
2475 static int hclgevf_pci_init(struct hclgevf_dev *hdev) in hclgevf_pci_init() argument
2477 struct pci_dev *pdev = hdev->pdev; in hclgevf_pci_init()
2500 hw = &hdev->hw; in hclgevf_pci_init()
2501 hw->hdev = hdev; in hclgevf_pci_init()
2520 static void hclgevf_pci_uninit(struct hclgevf_dev *hdev) in hclgevf_pci_uninit() argument
2522 struct pci_dev *pdev = hdev->pdev; in hclgevf_pci_uninit()
2524 pci_iounmap(pdev, hdev->hw.io_base); in hclgevf_pci_uninit()
2530 static int hclgevf_query_vf_resource(struct hclgevf_dev *hdev) in hclgevf_query_vf_resource() argument
2537 ret = hclgevf_cmd_send(&hdev->hw, &desc, 1); in hclgevf_query_vf_resource()
2539 dev_err(&hdev->pdev->dev, in hclgevf_query_vf_resource()
2546 if (hnae3_dev_roce_supported(hdev)) { in hclgevf_query_vf_resource()
2547 hdev->roce_base_msix_offset = in hclgevf_query_vf_resource()
2551 hdev->num_roce_msix = in hclgevf_query_vf_resource()
2556 hdev->num_nic_msix = hdev->num_roce_msix; in hclgevf_query_vf_resource()
2561 hdev->num_msi = hdev->num_roce_msix + in hclgevf_query_vf_resource()
2562 hdev->roce_base_msix_offset; in hclgevf_query_vf_resource()
2564 hdev->num_msi = in hclgevf_query_vf_resource()
2568 hdev->num_nic_msix = hdev->num_msi; in hclgevf_query_vf_resource()
2571 if (hdev->num_nic_msix < HNAE3_MIN_VECTOR_NUM) { in hclgevf_query_vf_resource()
2572 dev_err(&hdev->pdev->dev, in hclgevf_query_vf_resource()
2574 hdev->num_nic_msix); in hclgevf_query_vf_resource()
2581 static int hclgevf_pci_reset(struct hclgevf_dev *hdev) in hclgevf_pci_reset() argument
2583 struct pci_dev *pdev = hdev->pdev; in hclgevf_pci_reset()
2586 if (hdev->reset_type == HNAE3_VF_FULL_RESET && in hclgevf_pci_reset()
2587 test_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state)) { in hclgevf_pci_reset()
2588 hclgevf_misc_irq_uninit(hdev); in hclgevf_pci_reset()
2589 hclgevf_uninit_msi(hdev); in hclgevf_pci_reset()
2590 clear_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state); in hclgevf_pci_reset()
2593 if (!test_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state)) { in hclgevf_pci_reset()
2595 ret = hclgevf_init_msi(hdev); in hclgevf_pci_reset()
2602 ret = hclgevf_misc_irq_init(hdev); in hclgevf_pci_reset()
2604 hclgevf_uninit_msi(hdev); in hclgevf_pci_reset()
2610 set_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state); in hclgevf_pci_reset()
2616 static int hclgevf_reset_hdev(struct hclgevf_dev *hdev) in hclgevf_reset_hdev() argument
2618 struct pci_dev *pdev = hdev->pdev; in hclgevf_reset_hdev()
2621 ret = hclgevf_pci_reset(hdev); in hclgevf_reset_hdev()
2627 ret = hclgevf_cmd_init(hdev); in hclgevf_reset_hdev()
2633 ret = hclgevf_rss_init_hw(hdev); in hclgevf_reset_hdev()
2635 dev_err(&hdev->pdev->dev, in hclgevf_reset_hdev()
2640 ret = hclgevf_config_gro(hdev, true); in hclgevf_reset_hdev()
2644 ret = hclgevf_init_vlan_config(hdev); in hclgevf_reset_hdev()
2646 dev_err(&hdev->pdev->dev, in hclgevf_reset_hdev()
2652 ret = hclgevf_set_promisc_mode(hdev, true); in hclgevf_reset_hdev()
2657 dev_info(&hdev->pdev->dev, "Reset done\n"); in hclgevf_reset_hdev()
2662 static int hclgevf_init_hdev(struct hclgevf_dev *hdev) in hclgevf_init_hdev() argument
2664 struct pci_dev *pdev = hdev->pdev; in hclgevf_init_hdev()
2667 ret = hclgevf_pci_init(hdev); in hclgevf_init_hdev()
2673 ret = hclgevf_cmd_queue_init(hdev); in hclgevf_init_hdev()
2679 ret = hclgevf_cmd_init(hdev); in hclgevf_init_hdev()
2684 ret = hclgevf_query_vf_resource(hdev); in hclgevf_init_hdev()
2686 dev_err(&hdev->pdev->dev, in hclgevf_init_hdev()
2691 ret = hclgevf_init_msi(hdev); in hclgevf_init_hdev()
2697 hclgevf_state_init(hdev); in hclgevf_init_hdev()
2698 hdev->reset_level = HNAE3_VF_FUNC_RESET; in hclgevf_init_hdev()
2700 ret = hclgevf_misc_irq_init(hdev); in hclgevf_init_hdev()
2707 set_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state); in hclgevf_init_hdev()
2709 ret = hclgevf_configure(hdev); in hclgevf_init_hdev()
2715 ret = hclgevf_alloc_tqps(hdev); in hclgevf_init_hdev()
2721 ret = hclgevf_set_handle_info(hdev); in hclgevf_init_hdev()
2727 ret = hclgevf_config_gro(hdev, true); in hclgevf_init_hdev()
2737 ret = hclgevf_set_promisc_mode(hdev, true); in hclgevf_init_hdev()
2743 ret = hclgevf_rss_init_hw(hdev); in hclgevf_init_hdev()
2745 dev_err(&hdev->pdev->dev, in hclgevf_init_hdev()
2750 ret = hclgevf_init_vlan_config(hdev); in hclgevf_init_hdev()
2752 dev_err(&hdev->pdev->dev, in hclgevf_init_hdev()
2757 hdev->last_reset_time = jiffies; in hclgevf_init_hdev()
2758 dev_info(&hdev->pdev->dev, "finished initializing %s driver\n", in hclgevf_init_hdev()
2764 hclgevf_misc_irq_uninit(hdev); in hclgevf_init_hdev()
2766 hclgevf_state_uninit(hdev); in hclgevf_init_hdev()
2767 hclgevf_uninit_msi(hdev); in hclgevf_init_hdev()
2769 hclgevf_cmd_uninit(hdev); in hclgevf_init_hdev()
2771 hclgevf_pci_uninit(hdev); in hclgevf_init_hdev()
2772 clear_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state); in hclgevf_init_hdev()
2776 static void hclgevf_uninit_hdev(struct hclgevf_dev *hdev) in hclgevf_uninit_hdev() argument
2778 hclgevf_state_uninit(hdev); in hclgevf_uninit_hdev()
2780 if (test_bit(HCLGEVF_STATE_IRQ_INITED, &hdev->state)) { in hclgevf_uninit_hdev()
2781 hclgevf_misc_irq_uninit(hdev); in hclgevf_uninit_hdev()
2782 hclgevf_uninit_msi(hdev); in hclgevf_uninit_hdev()
2785 hclgevf_pci_uninit(hdev); in hclgevf_uninit_hdev()
2786 hclgevf_cmd_uninit(hdev); in hclgevf_uninit_hdev()
2792 struct hclgevf_dev *hdev; in hclgevf_init_ae_dev() local
2807 hdev = ae_dev->priv; in hclgevf_init_ae_dev()
2808 timer_setup(&hdev->keep_alive_timer, hclgevf_keep_alive_timer, 0); in hclgevf_init_ae_dev()
2809 INIT_WORK(&hdev->keep_alive_task, hclgevf_keep_alive_task); in hclgevf_init_ae_dev()
2816 struct hclgevf_dev *hdev = ae_dev->priv; in hclgevf_uninit_ae_dev() local
2818 hclgevf_uninit_hdev(hdev); in hclgevf_uninit_ae_dev()
2822 static u32 hclgevf_get_max_channels(struct hclgevf_dev *hdev) in hclgevf_get_max_channels() argument
2824 struct hnae3_handle *nic = &hdev->nic; in hclgevf_get_max_channels()
2827 return min_t(u32, hdev->rss_size_max, in hclgevf_get_max_channels()
2828 hdev->num_tqps / kinfo->num_tc); in hclgevf_get_max_channels()
2844 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_channels() local
2846 ch->max_combined = hclgevf_get_max_channels(hdev); in hclgevf_get_channels()
2855 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_tqps_and_rss_info() local
2857 *alloc_tqps = hdev->num_tqps; in hclgevf_get_tqps_and_rss_info()
2858 *max_rss_size = hdev->rss_size_max; in hclgevf_get_tqps_and_rss_info()
2865 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_update_rss_size() local
2870 max_rss_size = min_t(u16, hdev->rss_size_max, in hclgevf_update_rss_size()
2871 hdev->num_tqps / kinfo->num_tc); in hclgevf_update_rss_size()
2889 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_set_channels() local
2899 ret = hclgevf_set_rss_tc_mode(hdev, kinfo->rss_size); in hclgevf_set_channels()
2917 dev_err(&hdev->pdev->dev, "set rss indir table fail, ret=%d\n", in hclgevf_set_channels()
2924 dev_info(&hdev->pdev->dev, in hclgevf_set_channels()
2934 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_status() local
2936 return hdev->hw.mac.link; in hclgevf_get_status()
2943 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_ksettings_an_result() local
2946 *speed = hdev->hw.mac.speed; in hclgevf_get_ksettings_an_result()
2948 *duplex = hdev->hw.mac.duplex; in hclgevf_get_ksettings_an_result()
2953 void hclgevf_update_speed_duplex(struct hclgevf_dev *hdev, u32 speed, in hclgevf_update_speed_duplex() argument
2956 hdev->hw.mac.speed = speed; in hclgevf_update_speed_duplex()
2957 hdev->hw.mac.duplex = duplex; in hclgevf_update_speed_duplex()
2962 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_gro_en() local
2964 return hclgevf_config_gro(hdev, enable); in hclgevf_gro_en()
2970 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_media_type() local
2973 *media_type = hdev->hw.mac.media_type; in hclgevf_get_media_type()
2976 *module_type = hdev->hw.mac.module_type; in hclgevf_get_media_type()
2981 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_hw_reset_stat() local
2983 return !!hclgevf_read_dev(&hdev->hw, HCLGEVF_RST_ING); in hclgevf_get_hw_reset_stat()
2988 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_ae_dev_resetting() local
2990 return test_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state); in hclgevf_ae_dev_resetting()
2995 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_ae_dev_reset_cnt() local
2997 return hdev->rst_stats.hw_rst_done_cnt; in hclgevf_ae_dev_reset_cnt()
3004 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_link_mode() local
3006 *supported = hdev->hw.mac.supported; in hclgevf_get_link_mode()
3007 *advertising = hdev->hw.mac.advertising; in hclgevf_get_link_mode()
3018 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_regs_len() local
3025 return (cmdq_lines + common_lines + ring_lines * hdev->num_tqps + in hclgevf_get_regs_len()
3026 tqp_intr_lines * (hdev->num_msi_used - 1)) * REG_LEN_PER_LINE; in hclgevf_get_regs_len()
3032 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); in hclgevf_get_regs() local
3036 *version = hdev->fw_version; in hclgevf_get_regs()
3042 *reg++ = hclgevf_read_dev(&hdev->hw, cmdq_reg_addr_list[i]); in hclgevf_get_regs()
3049 *reg++ = hclgevf_read_dev(&hdev->hw, common_reg_addr_list[i]); in hclgevf_get_regs()
3055 for (j = 0; j < hdev->num_tqps; j++) { in hclgevf_get_regs()
3057 *reg++ = hclgevf_read_dev(&hdev->hw, in hclgevf_get_regs()
3066 for (j = 0; j < hdev->num_msi_used - 1; j++) { in hclgevf_get_regs()
3068 *reg++ = hclgevf_read_dev(&hdev->hw, in hclgevf_get_regs()
3076 void hclgevf_update_port_base_vlan_info(struct hclgevf_dev *hdev, u16 state, in hclgevf_update_port_base_vlan_info() argument
3079 struct hnae3_handle *nic = &hdev->nic; in hclgevf_update_port_base_vlan_info()
3082 hclgevf_notify_client(hdev, HNAE3_DOWN_CLIENT); in hclgevf_update_port_base_vlan_info()
3086 hclgevf_send_mbx_msg(hdev, HCLGE_MBX_SET_VLAN, in hclgevf_update_port_base_vlan_info()
3097 hclgevf_notify_client(hdev, HNAE3_UP_CLIENT); in hclgevf_update_port_base_vlan_info()