aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSalil Mehta <salil.mehta@huawei.com>2018-03-22 10:28:55 -0400
committerDavid S. Miller <davem@davemloft.net>2018-03-22 15:29:03 -0400
commita8dedb65926005e99ab23716b1c77586de83c4f4 (patch)
tree923135bcde62d637cf71bcf659b371a60aa5050f
parent436667d2e1793995267915d2562f7b14f26c1f63 (diff)
net: hns3: Add support to request VF Reset to PF
VF driver depends upon PF to eventually reset the hardware. This request is made using the mailbox command. This patch adds the required function to acheive above. Signed-off-by: Salil Mehta <salil.mehta@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
index 0d204e2f6fcd..b64831169253 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
@@ -832,6 +832,20 @@ static void hclgevf_reset_tqp(struct hnae3_handle *handle, u16 queue_id)
832 2, true, NULL, 0); 832 2, true, NULL, 0);
833} 833}
834 834
835static int hclgevf_do_reset(struct hclgevf_dev *hdev)
836{
837 int status;
838 u8 respmsg;
839
840 status = hclgevf_send_mbx_msg(hdev, HCLGE_MBX_RESET, 0, NULL,
841 0, false, &respmsg, sizeof(u8));
842 if (status)
843 dev_err(&hdev->pdev->dev,
844 "VF reset request to PF failed(=%d)\n", status);
845
846 return status;
847}
848
835static void hclgevf_reset_event(struct hnae3_handle *handle) 849static void hclgevf_reset_event(struct hnae3_handle *handle)
836{ 850{
837 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle); 851 struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
@@ -910,6 +924,7 @@ static void hclgevf_reset_service_task(struct work_struct *work)
910{ 924{
911 struct hclgevf_dev *hdev = 925 struct hclgevf_dev *hdev =
912 container_of(work, struct hclgevf_dev, rst_service_task); 926 container_of(work, struct hclgevf_dev, rst_service_task);
927 int ret;
913 928
914 if (test_and_set_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state)) 929 if (test_and_set_bit(HCLGEVF_STATE_RST_HANDLING, &hdev->state))
915 return; 930 return;
@@ -965,6 +980,10 @@ static void hclgevf_reset_service_task(struct work_struct *work)
965 hdev->reset_attempts++; 980 hdev->reset_attempts++;
966 981
967 /* request PF for resetting this VF via mailbox */ 982 /* request PF for resetting this VF via mailbox */
983 ret = hclgevf_do_reset(hdev);
984 if (ret)
985 dev_warn(&hdev->pdev->dev,
986 "VF rst fail, stack will call\n");
968 } 987 }
969 } 988 }
970 989