|
@@ -1,11 +1,5 @@
|
|
|
-/*
|
|
|
- * Copyright (c) 2016-2017 Hisilicon Limited.
|
|
|
- *
|
|
|
- * This program is free software; you can redistribute it and/or modify
|
|
|
- * it under the terms of the GNU General Public License as published by
|
|
|
- * the Free Software Foundation; either version 2 of the License, or
|
|
|
- * (at your option) any later version.
|
|
|
- */
|
|
|
+// SPDX-License-Identifier: GPL-2.0+
|
|
|
+// Copyright (c) 2016-2017 Hisilicon Limited.
|
|
|
|
|
|
#include <linux/acpi.h>
|
|
|
#include <linux/device.h>
|
|
@@ -1108,12 +1102,12 @@ static int hclge_get_cfg(struct hclge_dev *hdev, struct hclge_cfg *hcfg)
|
|
|
|
|
|
ret = hclge_cmd_send(&hdev->hw, desc, HCLGE_PF_CFG_DESC_NUM);
|
|
|
if (ret) {
|
|
|
- dev_err(&hdev->pdev->dev,
|
|
|
- "get config failed %d.\n", ret);
|
|
|
+ dev_err(&hdev->pdev->dev, "get config failed %d.\n", ret);
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
hclge_parse_cfg(hcfg, desc);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -1130,13 +1124,10 @@ static int hclge_get_cap(struct hclge_dev *hdev)
|
|
|
|
|
|
/* get pf resource */
|
|
|
ret = hclge_query_pf_resource(hdev);
|
|
|
- if (ret) {
|
|
|
- dev_err(&hdev->pdev->dev,
|
|
|
- "query pf resource error %d.\n", ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
+ if (ret)
|
|
|
+ dev_err(&hdev->pdev->dev, "query pf resource error %d.\n", ret);
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int hclge_configure(struct hclge_dev *hdev)
|
|
@@ -1265,13 +1256,10 @@ static int hclge_map_tqps_to_func(struct hclge_dev *hdev, u16 func_id,
|
|
|
req->tqp_vid = cpu_to_le16(tqp_vid);
|
|
|
|
|
|
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
|
|
- if (ret) {
|
|
|
- dev_err(&hdev->pdev->dev, "TQP map failed %d.\n",
|
|
|
- ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
+ if (ret)
|
|
|
+ dev_err(&hdev->pdev->dev, "TQP map failed %d.\n", ret);
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int hclge_assign_tqp(struct hclge_vport *vport,
|
|
@@ -1330,12 +1318,10 @@ static int hclge_knic_setup(struct hclge_vport *vport, u16 num_tqps)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
ret = hclge_assign_tqp(vport, kinfo->tqp, kinfo->num_tqps);
|
|
|
- if (ret) {
|
|
|
+ if (ret)
|
|
|
dev_err(&hdev->pdev->dev, "fail to assign TQPs %d.\n", ret);
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int hclge_map_tqp_to_vport(struct hclge_dev *hdev,
|
|
@@ -1487,13 +1473,11 @@ static int hclge_cmd_alloc_tx_buff(struct hclge_dev *hdev,
|
|
|
}
|
|
|
|
|
|
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
|
|
- if (ret) {
|
|
|
+ if (ret)
|
|
|
dev_err(&hdev->pdev->dev, "tx buffer alloc cmd failed %d.\n",
|
|
|
ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int hclge_tx_buffer_alloc(struct hclge_dev *hdev,
|
|
@@ -1501,13 +1485,10 @@ static int hclge_tx_buffer_alloc(struct hclge_dev *hdev,
|
|
|
{
|
|
|
int ret = hclge_cmd_alloc_tx_buff(hdev, buf_alloc);
|
|
|
|
|
|
- if (ret) {
|
|
|
- dev_err(&hdev->pdev->dev,
|
|
|
- "tx buffer alloc failed %d\n", ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
+ if (ret)
|
|
|
+ dev_err(&hdev->pdev->dev, "tx buffer alloc failed %d\n", ret);
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int hclge_get_tc_num(struct hclge_dev *hdev)
|
|
@@ -1825,13 +1806,11 @@ static int hclge_rx_priv_buf_alloc(struct hclge_dev *hdev,
|
|
|
(1 << HCLGE_TC0_PRI_BUF_EN_B));
|
|
|
|
|
|
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
|
|
- if (ret) {
|
|
|
+ if (ret)
|
|
|
dev_err(&hdev->pdev->dev,
|
|
|
"rx private buffer alloc cmd failed %d\n", ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int hclge_rx_priv_wl_config(struct hclge_dev *hdev,
|
|
@@ -1871,13 +1850,11 @@ static int hclge_rx_priv_wl_config(struct hclge_dev *hdev,
|
|
|
|
|
|
/* Send 2 descriptor at one time */
|
|
|
ret = hclge_cmd_send(&hdev->hw, desc, 2);
|
|
|
- if (ret) {
|
|
|
+ if (ret)
|
|
|
dev_err(&hdev->pdev->dev,
|
|
|
"rx private waterline config cmd failed %d\n",
|
|
|
ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int hclge_common_thrd_config(struct hclge_dev *hdev,
|
|
@@ -1917,12 +1894,10 @@ static int hclge_common_thrd_config(struct hclge_dev *hdev,
|
|
|
|
|
|
/* Send 2 descriptors at one time */
|
|
|
ret = hclge_cmd_send(&hdev->hw, desc, 2);
|
|
|
- if (ret) {
|
|
|
+ if (ret)
|
|
|
dev_err(&hdev->pdev->dev,
|
|
|
"common threshold config cmd failed %d\n", ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int hclge_common_wl_config(struct hclge_dev *hdev,
|
|
@@ -1943,13 +1918,11 @@ static int hclge_common_wl_config(struct hclge_dev *hdev,
|
|
|
req->com_wl.low |= cpu_to_le16(BIT(HCLGE_RX_PRIV_EN_B));
|
|
|
|
|
|
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
|
|
- if (ret) {
|
|
|
+ if (ret)
|
|
|
dev_err(&hdev->pdev->dev,
|
|
|
"common waterline config cmd failed %d\n", ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
int hclge_buffer_alloc(struct hclge_dev *hdev)
|
|
@@ -2196,13 +2169,11 @@ static int hclge_query_mac_an_speed_dup(struct hclge_dev *hdev, int *speed,
|
|
|
HCLGE_QUERY_SPEED_S);
|
|
|
|
|
|
ret = hclge_parse_speed(speed_tmp, speed);
|
|
|
- if (ret) {
|
|
|
+ if (ret)
|
|
|
dev_err(&hdev->pdev->dev,
|
|
|
"could not parse speed(=%d), %d\n", speed_tmp, ret);
|
|
|
- return -EIO;
|
|
|
- }
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int hclge_set_autoneg_en(struct hclge_dev *hdev, bool enable)
|
|
@@ -2219,13 +2190,11 @@ static int hclge_set_autoneg_en(struct hclge_dev *hdev, bool enable)
|
|
|
req->cfg_an_cmd_flag = cpu_to_le32(flag);
|
|
|
|
|
|
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
|
|
- if (ret) {
|
|
|
+ if (ret)
|
|
|
dev_err(&hdev->pdev->dev, "auto neg set cmd failed %d.\n",
|
|
|
ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int hclge_set_autoneg(struct hnae3_handle *handle, bool enable)
|
|
@@ -2331,13 +2300,11 @@ static int hclge_mac_init(struct hclge_dev *hdev)
|
|
|
mtu = ETH_DATA_LEN;
|
|
|
|
|
|
ret = hclge_set_mtu(handle, mtu);
|
|
|
- if (ret) {
|
|
|
+ if (ret)
|
|
|
dev_err(&hdev->pdev->dev,
|
|
|
"set mtu failed ret=%d\n", ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static void hclge_mbx_task_schedule(struct hclge_dev *hdev)
|
|
@@ -2376,7 +2343,7 @@ static int hclge_get_mac_link_status(struct hclge_dev *hdev)
|
|
|
}
|
|
|
|
|
|
req = (struct hclge_link_status_cmd *)desc.data;
|
|
|
- link_status = req->status & HCLGE_LINK_STATUS;
|
|
|
+ link_status = req->status & HCLGE_LINK_STATUS_UP_M;
|
|
|
|
|
|
return !!link_status;
|
|
|
}
|
|
@@ -3121,13 +3088,11 @@ static int hclge_set_rss_tc_mode(struct hclge_dev *hdev, u16 *tc_valid,
|
|
|
}
|
|
|
|
|
|
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
|
|
- if (ret) {
|
|
|
+ if (ret)
|
|
|
dev_err(&hdev->pdev->dev,
|
|
|
"Configure rss tc mode fail, status = %d\n", ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int hclge_set_rss_input_tuple(struct hclge_dev *hdev)
|
|
@@ -3150,13 +3115,10 @@ static int hclge_set_rss_input_tuple(struct hclge_dev *hdev)
|
|
|
req->ipv6_sctp_en = hdev->vport[0].rss_tuple_sets.ipv6_sctp_en;
|
|
|
req->ipv6_fragment_en = hdev->vport[0].rss_tuple_sets.ipv6_fragment_en;
|
|
|
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
|
|
- if (ret) {
|
|
|
+ if (ret)
|
|
|
dev_err(&hdev->pdev->dev,
|
|
|
"Configure rss input fail, status = %d\n", ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int hclge_get_rss(struct hnae3_handle *handle, u32 *indir,
|
|
@@ -3604,12 +3566,11 @@ int hclge_cmd_set_promisc_mode(struct hclge_dev *hdev,
|
|
|
HCLGE_PROMISC_TX_EN_B | HCLGE_PROMISC_RX_EN_B;
|
|
|
|
|
|
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
|
|
- if (ret) {
|
|
|
+ if (ret)
|
|
|
dev_err(&hdev->pdev->dev,
|
|
|
"Set promisc mode fail, status is %d.\n", ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
- return 0;
|
|
|
+
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
void hclge_promisc_param_init(struct hclge_promisc_param *param, bool en_uc,
|
|
@@ -3960,14 +3921,12 @@ static int hclge_set_mta_filter_mode(struct hclge_dev *hdev,
|
|
|
HCLGE_CFG_MTA_MAC_SEL_S, mta_mac_sel);
|
|
|
|
|
|
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
|
|
- if (ret) {
|
|
|
+ if (ret)
|
|
|
dev_err(&hdev->pdev->dev,
|
|
|
"Config mat filter mode failed for cmd_send, ret =%d.\n",
|
|
|
ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
int hclge_cfg_func_mta_filter(struct hclge_dev *hdev,
|
|
@@ -3986,14 +3945,12 @@ int hclge_cfg_func_mta_filter(struct hclge_dev *hdev,
|
|
|
req->function_id = func_id;
|
|
|
|
|
|
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
|
|
- if (ret) {
|
|
|
+ if (ret)
|
|
|
dev_err(&hdev->pdev->dev,
|
|
|
"Config func_id enable failed for cmd_send, ret =%d.\n",
|
|
|
ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int hclge_set_mta_table_item(struct hclge_vport *vport,
|
|
@@ -4325,7 +4282,7 @@ static int hclge_add_mc_addr(struct hnae3_handle *handle,
|
|
|
{
|
|
|
struct hclge_vport *vport = hclge_get_vport(handle);
|
|
|
|
|
|
- return hclge_add_mc_addr_common(vport, addr);
|
|
|
+ return hclge_add_mc_addr_common(vport, addr);
|
|
|
}
|
|
|
|
|
|
int hclge_add_mc_addr_common(struct hclge_vport *vport,
|
|
@@ -4598,13 +4555,11 @@ static int hclge_set_vlan_filter_ctrl(struct hclge_dev *hdev, u8 vlan_type,
|
|
|
req->vlan_fe = filter_en;
|
|
|
|
|
|
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
|
|
- if (ret) {
|
|
|
+ if (ret)
|
|
|
dev_err(&hdev->pdev->dev, "set vlan filter fail, ret =%d.\n",
|
|
|
ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
#define HCLGE_FILTER_TYPE_VF 0
|
|
@@ -4996,14 +4951,12 @@ static int hclge_set_mac_mtu(struct hclge_dev *hdev, int new_mtu)
|
|
|
req->min_frm_size = HCLGE_MAC_MIN_FRAME;
|
|
|
|
|
|
ret = hclge_cmd_send(&hdev->hw, &desc, 1);
|
|
|
- if (ret) {
|
|
|
+ if (ret)
|
|
|
dev_err(&hdev->pdev->dev, "set mtu fail, ret =%d.\n", ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
-
|
|
|
- hdev->mps = max_frm_size;
|
|
|
+ else
|
|
|
+ hdev->mps = max_frm_size;
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static int hclge_set_mtu(struct hnae3_handle *handle, int new_mtu)
|
|
@@ -5595,8 +5548,6 @@ static int hclge_init_ae_dev(struct hnae3_ae_dev *ae_dev)
|
|
|
hdev->pdev = pdev;
|
|
|
hdev->ae_dev = ae_dev;
|
|
|
hdev->reset_type = HNAE3_NONE_RESET;
|
|
|
- hdev->reset_request = 0;
|
|
|
- hdev->reset_pending = 0;
|
|
|
ae_dev->priv = hdev;
|
|
|
|
|
|
ret = hclge_pci_init(hdev);
|
|
@@ -5909,6 +5860,7 @@ static int hclge_set_channels(struct hnae3_handle *handle, u32 new_tqps_num)
|
|
|
u32 *rss_indir;
|
|
|
int ret, i;
|
|
|
|
|
|
+ /* Free old tqps, and reallocate with new tqp number when nic setup */
|
|
|
hclge_release_tqp(vport);
|
|
|
|
|
|
ret = hclge_knic_setup(vport, new_tqps_num);
|