| From 0bfa2ca0cedfd9877b1592ed19f28c310b94e805 Mon Sep 17 00:00:00 2001 |
| From: Lang Cheng <chenglang@huawei.com> |
| Date: Fri, 8 May 2020 17:45:52 +0800 |
| Subject: [PATCH] RDMA/hns: Fix cmdq parameter of querying pf timer resource |
| |
| commit 441c88d5b3ff80108ff536c6cf80591187015403 upstream. |
| |
| The firmware has reduced the number of descriptions of command |
| HNS_ROCE_OPC_QUERY_PF_TIMER_RES to 1. The driver needs to adapt, otherwise |
| the hardware will report error 4(CMD_NEXT_ERR). |
| |
| Fixes: 0e40dc2f70cd ("RDMA/hns: Add timer allocation support for hip08") |
| Link: https://lore.kernel.org/r/1588931159-56875-3-git-send-email-liweihang@huawei.com |
| Signed-off-by: Lang Cheng <chenglang@huawei.com> |
| Signed-off-by: Weihang Li <liweihang@huawei.com> |
| Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c |
| index 565e6ad2fb40..ff0e5a3df724 100644 |
| --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c |
| +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c |
| @@ -1221,34 +1221,26 @@ static int hns_roce_query_pf_resource(struct hns_roce_dev *hr_dev) |
| static int hns_roce_query_pf_timer_resource(struct hns_roce_dev *hr_dev) |
| { |
| struct hns_roce_pf_timer_res_a *req_a; |
| - struct hns_roce_cmq_desc desc[2]; |
| - int ret, i; |
| - |
| - for (i = 0; i < 2; i++) { |
| - hns_roce_cmq_setup_basic_desc(&desc[i], |
| - HNS_ROCE_OPC_QUERY_PF_TIMER_RES, |
| - true); |
| + struct hns_roce_cmq_desc desc; |
| + int ret; |
| |
| - if (i == 0) |
| - desc[i].flag |= cpu_to_le16(HNS_ROCE_CMD_FLAG_NEXT); |
| - else |
| - desc[i].flag &= ~cpu_to_le16(HNS_ROCE_CMD_FLAG_NEXT); |
| - } |
| + hns_roce_cmq_setup_basic_desc(&desc, HNS_ROCE_OPC_QUERY_PF_TIMER_RES, |
| + true); |
| |
| - ret = hns_roce_cmq_send(hr_dev, desc, 2); |
| + ret = hns_roce_cmq_send(hr_dev, &desc, 1); |
| if (ret) |
| return ret; |
| |
| - req_a = (struct hns_roce_pf_timer_res_a *)desc[0].data; |
| + req_a = (struct hns_roce_pf_timer_res_a *)desc.data; |
| |
| hr_dev->caps.qpc_timer_bt_num = |
| - roce_get_field(req_a->qpc_timer_bt_idx_num, |
| - PF_RES_DATA_1_PF_QPC_TIMER_BT_NUM_M, |
| - PF_RES_DATA_1_PF_QPC_TIMER_BT_NUM_S); |
| + roce_get_field(req_a->qpc_timer_bt_idx_num, |
| + PF_RES_DATA_1_PF_QPC_TIMER_BT_NUM_M, |
| + PF_RES_DATA_1_PF_QPC_TIMER_BT_NUM_S); |
| hr_dev->caps.cqc_timer_bt_num = |
| - roce_get_field(req_a->cqc_timer_bt_idx_num, |
| - PF_RES_DATA_2_PF_CQC_TIMER_BT_NUM_M, |
| - PF_RES_DATA_2_PF_CQC_TIMER_BT_NUM_S); |
| + roce_get_field(req_a->cqc_timer_bt_idx_num, |
| + PF_RES_DATA_2_PF_CQC_TIMER_BT_NUM_M, |
| + PF_RES_DATA_2_PF_CQC_TIMER_BT_NUM_S); |
| |
| return 0; |
| } |
| -- |
| 2.27.0 |
| |