diff options
author | Jian Shen <shenjian15@huawei.com> | 2018-08-03 05:56:31 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-08-03 12:53:24 -0400 |
commit | 375dd5e432128ee071227e3ab0071ca11d01ac8c (patch) | |
tree | 07f508e55176a24b1c4411d97db0e430d3850d67 | |
parent | 07acf909ee33983fe22334446dd5c2adf0fdca26 (diff) |
net: hns3: Refine the MSIX allocation for PF
The offset of msix number for roce is different between different
revision id. We should get it from firmware, instead of a fix value.
This patch refines the msix allocation, make it compatible.
Signed-off-by: Jian Shen <shenjian15@huawei.com>
Signed-off-by: Peng Li <lipeng321@huawei.com>
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/hns3pf/hclge_cmd.h | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | 8 | ||||
-rw-r--r-- | drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h | 3 |
3 files changed, 9 insertions, 4 deletions
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h index 5cd22f9bbdec..cd0a4f228470 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_cmd.h | |||
@@ -358,6 +358,8 @@ struct hclge_pf_res_cmd { | |||
358 | __le16 buf_size; | 358 | __le16 buf_size; |
359 | __le16 msixcap_localid_ba_nic; | 359 | __le16 msixcap_localid_ba_nic; |
360 | __le16 msixcap_localid_ba_rocee; | 360 | __le16 msixcap_localid_ba_rocee; |
361 | #define HCLGE_MSIX_OFT_ROCEE_S 0 | ||
362 | #define HCLGE_MSIX_OFT_ROCEE_M GENMASK(15, 0) | ||
361 | #define HCLGE_PF_VEC_NUM_S 0 | 363 | #define HCLGE_PF_VEC_NUM_S 0 |
362 | #define HCLGE_PF_VEC_NUM_M GENMASK(7, 0) | 364 | #define HCLGE_PF_VEC_NUM_M GENMASK(7, 0) |
363 | __le16 pf_intr_vector_number; | 365 | __le16 pf_intr_vector_number; |
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c index a9b888f1544a..fc813b7f20e8 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c | |||
@@ -932,6 +932,9 @@ static int hclge_query_pf_resource(struct hclge_dev *hdev) | |||
932 | hdev->pkt_buf_size = __le16_to_cpu(req->buf_size) << HCLGE_BUF_UNIT_S; | 932 | hdev->pkt_buf_size = __le16_to_cpu(req->buf_size) << HCLGE_BUF_UNIT_S; |
933 | 933 | ||
934 | if (hnae3_dev_roce_supported(hdev)) { | 934 | if (hnae3_dev_roce_supported(hdev)) { |
935 | hdev->roce_base_msix_offset = | ||
936 | hnae3_get_field(__le16_to_cpu(req->msixcap_localid_ba_rocee), | ||
937 | HCLGE_MSIX_OFT_ROCEE_M, HCLGE_MSIX_OFT_ROCEE_S); | ||
935 | hdev->num_roce_msi = | 938 | hdev->num_roce_msi = |
936 | hnae3_get_field(__le16_to_cpu(req->pf_intr_vector_number), | 939 | hnae3_get_field(__le16_to_cpu(req->pf_intr_vector_number), |
937 | HCLGE_PF_VEC_NUM_M, HCLGE_PF_VEC_NUM_S); | 940 | HCLGE_PF_VEC_NUM_M, HCLGE_PF_VEC_NUM_S); |
@@ -939,7 +942,8 @@ static int hclge_query_pf_resource(struct hclge_dev *hdev) | |||
939 | /* PF should have NIC vectors and Roce vectors, | 942 | /* PF should have NIC vectors and Roce vectors, |
940 | * NIC vectors are queued before Roce vectors. | 943 | * NIC vectors are queued before Roce vectors. |
941 | */ | 944 | */ |
942 | hdev->num_msi = hdev->num_roce_msi + HCLGE_ROCE_VECTOR_OFFSET; | 945 | hdev->num_msi = hdev->num_roce_msi + |
946 | hdev->roce_base_msix_offset; | ||
943 | } else { | 947 | } else { |
944 | hdev->num_msi = | 948 | hdev->num_msi = |
945 | hnae3_get_field(__le16_to_cpu(req->pf_intr_vector_number), | 949 | hnae3_get_field(__le16_to_cpu(req->pf_intr_vector_number), |
@@ -2037,7 +2041,7 @@ static int hclge_init_msi(struct hclge_dev *hdev) | |||
2037 | hdev->num_msi_left = vectors; | 2041 | hdev->num_msi_left = vectors; |
2038 | hdev->base_msi_vector = pdev->irq; | 2042 | hdev->base_msi_vector = pdev->irq; |
2039 | hdev->roce_base_vector = hdev->base_msi_vector + | 2043 | hdev->roce_base_vector = hdev->base_msi_vector + |
2040 | HCLGE_ROCE_VECTOR_OFFSET; | 2044 | hdev->roce_base_msix_offset; |
2041 | 2045 | ||
2042 | hdev->vector_status = devm_kcalloc(&pdev->dev, hdev->num_msi, | 2046 | hdev->vector_status = devm_kcalloc(&pdev->dev, hdev->num_msi, |
2043 | sizeof(u16), GFP_KERNEL); | 2047 | sizeof(u16), GFP_KERNEL); |
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h index dfa5c9456d22..1528fb3fa6be 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.h | |||
@@ -16,8 +16,6 @@ | |||
16 | 16 | ||
17 | #define HCLGE_INVALID_VPORT 0xffff | 17 | #define HCLGE_INVALID_VPORT 0xffff |
18 | 18 | ||
19 | #define HCLGE_ROCE_VECTOR_OFFSET 96 | ||
20 | |||
21 | #define HCLGE_PF_CFG_BLOCK_SIZE 32 | 19 | #define HCLGE_PF_CFG_BLOCK_SIZE 32 |
22 | #define HCLGE_PF_CFG_DESC_NUM \ | 20 | #define HCLGE_PF_CFG_DESC_NUM \ |
23 | (HCLGE_PF_CFG_BLOCK_SIZE / HCLGE_CFG_RD_LEN_BYTES) | 21 | (HCLGE_PF_CFG_BLOCK_SIZE / HCLGE_CFG_RD_LEN_BYTES) |
@@ -509,6 +507,7 @@ struct hclge_dev { | |||
509 | u16 num_msi; | 507 | u16 num_msi; |
510 | u16 num_msi_left; | 508 | u16 num_msi_left; |
511 | u16 num_msi_used; | 509 | u16 num_msi_used; |
510 | u16 roce_base_msix_offset; | ||
512 | u32 base_msi_vector; | 511 | u32 base_msi_vector; |
513 | u16 *vector_status; | 512 | u16 *vector_status; |
514 | int *vector_irq; | 513 | int *vector_irq; |