Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
[linux-2.6-microblaze.git] / drivers / net / ethernet / hisilicon / hns3 / hns3pf / hclge_main.c
index 0e03c3a..a758f9a 100644 (file)
@@ -824,6 +824,8 @@ static void hclge_get_mac_stat(struct hnae3_handle *handle,
 static int hclge_parse_func_status(struct hclge_dev *hdev,
                                   struct hclge_func_status_cmd *status)
 {
+#define HCLGE_MAC_ID_MASK      0xF
+
        if (!(status->pf_state & HCLGE_PF_STATE_DONE))
                return -EINVAL;
 
@@ -833,6 +835,7 @@ static int hclge_parse_func_status(struct hclge_dev *hdev,
        else
                hdev->flag &= ~HCLGE_FLAG_MAIN;
 
+       hdev->hw.mac.mac_id = status->mac_id & HCLGE_MAC_ID_MASK;
        return 0;
 }
 
@@ -3441,7 +3444,7 @@ static void hclge_do_reset(struct hclge_dev *hdev)
        u32 val;
 
        if (hclge_get_hw_reset_stat(handle)) {
-               dev_info(&pdev->dev, "Hardware reset not finish\n");
+               dev_info(&pdev->dev, "hardware reset not finish\n");
                dev_info(&pdev->dev, "func_rst_reg:0x%x, global_rst_reg:0x%x\n",
                         hclge_read_dev(&hdev->hw, HCLGE_FUN_RST_ING),
                         hclge_read_dev(&hdev->hw, HCLGE_GLOBAL_RESET_REG));
@@ -3450,20 +3453,20 @@ static void hclge_do_reset(struct hclge_dev *hdev)
 
        switch (hdev->reset_type) {
        case HNAE3_GLOBAL_RESET:
+               dev_info(&pdev->dev, "global reset requested\n");
                val = hclge_read_dev(&hdev->hw, HCLGE_GLOBAL_RESET_REG);
                hnae3_set_bit(val, HCLGE_GLOBAL_RESET_BIT, 1);
                hclge_write_dev(&hdev->hw, HCLGE_GLOBAL_RESET_REG, val);
-               dev_info(&pdev->dev, "Global Reset requested\n");
                break;
        case HNAE3_FUNC_RESET:
-               dev_info(&pdev->dev, "PF Reset requested\n");
+               dev_info(&pdev->dev, "PF reset requested\n");
                /* schedule again to check later */
                set_bit(HNAE3_FUNC_RESET, &hdev->reset_pending);
                hclge_reset_task_schedule(hdev);
                break;
        default:
                dev_warn(&pdev->dev,
-                        "Unsupported reset type: %d\n", hdev->reset_type);
+                        "unsupported reset type: %d\n", hdev->reset_type);
                break;
        }
 }
@@ -7353,7 +7356,6 @@ int hclge_add_mc_addr_common(struct hclge_vport *vport,
                return -EINVAL;
        }
        memset(&req, 0, sizeof(req));
-       hnae3_set_bit(req.entry_type, HCLGE_MAC_VLAN_BIT0_EN_B, 0);
        hclge_prepare_mac_addr(&req, addr, true);
        status = hclge_lookup_mac_vlan_tbl(vport, &req, desc, true);
        if (status) {
@@ -7398,7 +7400,6 @@ int hclge_rm_mc_addr_common(struct hclge_vport *vport,
        }
 
        memset(&req, 0, sizeof(req));
-       hnae3_set_bit(req.entry_type, HCLGE_MAC_VLAN_BIT0_EN_B, 0);
        hclge_prepare_mac_addr(&req, addr, true);
        status = hclge_lookup_mac_vlan_tbl(vport, &req, desc, true);
        if (!status) {
@@ -7618,11 +7619,17 @@ static int hclge_set_vf_mac(struct hnae3_handle *handle, int vf,
        }
 
        ether_addr_copy(vport->vf_info.mac, mac_addr);
-       dev_info(&hdev->pdev->dev,
-                "MAC of VF %d has been set to %pM, and it will be reinitialized!\n",
-                vf, mac_addr);
 
-       return hclge_inform_reset_assert_to_vf(vport);
+       if (test_bit(HCLGE_VPORT_STATE_ALIVE, &vport->state)) {
+               dev_info(&hdev->pdev->dev,
+                        "MAC of VF %d has been set to %pM, and it will be reinitialized!\n",
+                        vf, mac_addr);
+               return hclge_inform_reset_assert_to_vf(vport);
+       }
+
+       dev_info(&hdev->pdev->dev, "MAC of VF %d has been set to %pM\n",
+                vf, mac_addr);
+       return 0;
 }
 
 static int hclge_add_mgr_tbl(struct hclge_dev *hdev,
@@ -9115,8 +9122,8 @@ init_nic_err:
 static int hclge_init_roce_client_instance(struct hnae3_ae_dev *ae_dev,
                                           struct hclge_vport *vport)
 {
-       struct hnae3_client *client = vport->roce.client;
        struct hclge_dev *hdev = ae_dev->priv;
+       struct hnae3_client *client;
        int rst_cnt;
        int ret;
 
@@ -10292,8 +10299,9 @@ static int hclge_dfx_reg_fetch_data(struct hclge_desc *desc_src, int bd_num,
 static int hclge_get_dfx_reg_len(struct hclge_dev *hdev, int *len)
 {
        u32 dfx_reg_type_num = ARRAY_SIZE(hclge_dfx_bd_offset_list);
-       int data_len_per_desc, data_len, bd_num, i;
+       int data_len_per_desc, bd_num, i;
        int bd_num_list[BD_LIST_MAX_NUM];
+       u32 data_len;
        int ret;
 
        ret = hclge_get_dfx_reg_bd_num(hdev, bd_num_list, dfx_reg_type_num);