OSDN Git Service

RDMA/hns: Clear extended doorbell info before using
authorXi Wang <wangxi11@huawei.com>
Fri, 11 Jun 2021 06:14:49 +0000 (14:14 +0800)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 18 Jun 2021 16:54:25 +0000 (13:54 -0300)
Both of HIP08 and HIP09 require the extended doorbell information to be
cleared before being used.

Fixes: 6b63597d3540 ("RDMA/hns: Add TSQ link table support")
Link: https://lore.kernel.org/r/1623392089-35639-1-git-send-email-liweihang@huawei.com
Signed-off-by: Xi Wang <wangxi11@huawei.com>
Signed-off-by: Weihang Li <liweihang@huawei.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/hw/hns/hns_roce_hw_v2.c
drivers/infiniband/hw/hns/hns_roce_hw_v2.h

index 4d3da31..f67b175 100644 (file)
@@ -1572,6 +1572,22 @@ static void hns_roce_function_clear(struct hns_roce_dev *hr_dev)
        }
 }
 
+static int hns_roce_clear_extdb_list_info(struct hns_roce_dev *hr_dev)
+{
+       struct hns_roce_cmq_desc desc;
+       int ret;
+
+       hns_roce_cmq_setup_basic_desc(&desc, HNS_ROCE_OPC_CLEAR_EXTDB_LIST_INFO,
+                                     false);
+       ret = hns_roce_cmq_send(hr_dev, &desc, 1);
+       if (ret)
+               ibdev_err(&hr_dev->ib_dev,
+                         "failed to clear extended doorbell info, ret = %d.\n",
+                         ret);
+
+       return ret;
+}
+
 static int hns_roce_query_fw_ver(struct hns_roce_dev *hr_dev)
 {
        struct hns_roce_query_fw_info *resp;
@@ -2756,6 +2772,11 @@ static int hns_roce_v2_init(struct hns_roce_dev *hr_dev)
 {
        int ret;
 
+       /* The hns ROCEE requires the extdb info to be cleared before using */
+       ret = hns_roce_clear_extdb_list_info(hr_dev);
+       if (ret)
+               return ret;
+
        ret = get_hem_table(hr_dev);
        if (ret)
                return ret;
index 66269b3..28df962 100644 (file)
@@ -250,6 +250,7 @@ enum hns_roce_opcode_type {
        HNS_ROCE_OPC_CLR_SCCC                           = 0x8509,
        HNS_ROCE_OPC_QUERY_SCCC                         = 0x850a,
        HNS_ROCE_OPC_RESET_SCCC                         = 0x850b,
+       HNS_ROCE_OPC_CLEAR_EXTDB_LIST_INFO              = 0x850d,
        HNS_ROCE_OPC_QUERY_VF_RES                       = 0x850e,
        HNS_ROCE_OPC_CFG_GMV_TBL                        = 0x850f,
        HNS_ROCE_OPC_CFG_GMV_BT                         = 0x8510,