lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 484/800] RDMA/hns: Clear extended doorbell info before using
    Date
    From: Xi Wang <wangxi11@huawei.com>

    [ Upstream commit 7e78dd816e458fbc2928a068d70009178d5d070d ]

    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>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 21 +++++++++++++++++++++
    drivers/infiniband/hw/hns/hns_roce_hw_v2.h | 1 +
    2 files changed, 22 insertions(+)

    diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
    index d7289b6587f1..78f3e05cc1f5 100644
    --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
    +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
    @@ -1619,6 +1619,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;
    @@ -2732,6 +2748,11 @@ static int hns_roce_v2_init(struct hns_roce_dev *hr_dev)
    struct hns_roce_v2_priv *priv = hr_dev->priv;
    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;
    diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.h b/drivers/infiniband/hw/hns/hns_roce_hw_v2.h
    index a2100a629859..028bc41cb45c 100644
    --- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.h
    +++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.h
    @@ -248,6 +248,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,
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-07-12 10:43    [W:4.022 / U:0.168 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site