Commit 82930a8c authored by Jian Shen's avatar Jian Shen Committed by Zheng Zengkai
Browse files

net: hns3: add api capability bits for firmware

mainline inclusion
from mainline-v5.12-rc1-dontuse
commit 1cef42c8
category: feature
bugzilla: 173966
CVE: NA

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1cef42c8474f22d6a8509a19c0b578e5f60138d9



----------------------------------------------------------------------

To improve the compatibility of firmware for driver, help firmware
to deal with different api commands, add api capability bits when
initialize the command queue.

Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
Reviewed-by: default avatarYongxin Li <liyongxin1@huawei.com>
Signed-off-by: default avatarJunxin Chen <chenjunxin1@huawei.com>
Signed-off-by: default avatarZheng Zengkai <zhengzengkai@huawei.com>
parent 468164dd
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -363,6 +363,15 @@ static void hclge_parse_capability(struct hclge_dev *hdev,
		set_bit(HNAE3_DEV_SUPPORT_FD_FORWARD_TC_B, ae_dev->caps);
}

static __le32 hclge_build_api_caps(void)
{
	u32 api_caps = 0;

	hnae3_set_bit(api_caps, HCLGE_API_CAP_FLEX_RSS_TBL_B, 1);

	return cpu_to_le32(api_caps);
}

static enum hclge_cmd_status
hclge_cmd_query_version_and_capability(struct hclge_dev *hdev)
{
@@ -373,6 +382,7 @@ hclge_cmd_query_version_and_capability(struct hclge_dev *hdev)

	hclge_cmd_setup_basic_desc(&desc, HCLGE_OPC_QUERY_FW_VER, 1);
	resp = (struct hclge_query_version_cmd *)desc.data;
	resp->api_caps = hclge_build_api_caps();

	ret = hclge_cmd_send(&hdev->hw, &desc, 1);
	if (ret)
+5 −1
Original line number Diff line number Diff line
@@ -386,11 +386,15 @@ enum HCLGE_CAP_BITS {
	HCLGE_CAP_UDP_TUNNEL_CSUM_B,
};

enum HCLGE_API_CAP_BITS {
	HCLGE_API_CAP_FLEX_RSS_TBL_B,
};

#define HCLGE_QUERY_CAP_LENGTH		3
struct hclge_query_version_cmd {
	__le32 firmware;
	__le32 hardware;
	__le32 rsv;
	__le32 api_caps;
	__le32 caps[HCLGE_QUERY_CAP_LENGTH]; /* capabilities of device */
};

+10 −0
Original line number Diff line number Diff line
@@ -342,6 +342,15 @@ static void hclgevf_parse_capability(struct hclgevf_dev *hdev,
		set_bit(HNAE3_DEV_SUPPORT_UDP_TUNNEL_CSUM_B, ae_dev->caps);
}

static __le32 hclgevf_build_api_caps(void)
{
	u32 api_caps = 0;

	hnae3_set_bit(api_caps, HCLGEVF_API_CAP_FLEX_RSS_TBL_B, 1);

	return cpu_to_le32(api_caps);
}

static int hclgevf_cmd_query_version_and_capability(struct hclgevf_dev *hdev)
{
	struct hnae3_ae_dev *ae_dev = pci_get_drvdata(hdev->pdev);
@@ -352,6 +361,7 @@ static int hclgevf_cmd_query_version_and_capability(struct hclgevf_dev *hdev)
	resp = (struct hclgevf_query_version_cmd *)desc.data;

	hclgevf_cmd_setup_basic_desc(&desc, HCLGEVF_OPC_QUERY_FW_VER, 1);
	resp->api_caps = hclgevf_build_api_caps();
	status = hclgevf_cmd_send(&hdev->hw, &desc, 1);
	if (status)
		return status;
+5 −1
Original line number Diff line number Diff line
@@ -161,11 +161,15 @@ enum HCLGEVF_CAP_BITS {
	HCLGEVF_CAP_UDP_TUNNEL_CSUM_B,
};

enum HCLGEVF_API_CAP_BITS {
	HCLGEVF_API_CAP_FLEX_RSS_TBL_B,
};

#define HCLGEVF_QUERY_CAP_LENGTH		3
struct hclgevf_query_version_cmd {
	__le32 firmware;
	__le32 hardware;
	__le32 rsv;
	__le32 api_caps;
	__le32 caps[HCLGEVF_QUERY_CAP_LENGTH]; /* capabilities of device */
};