浏览代码

IB/hns: Add & initialize "node_guid" parameter for RDMA CM

According to the Infiniband spec, NodeGUID uniquely identifies a
node. This must be initialized to some unique value. This patch
adds the support to the HNS RoCE driver to fetch the NodeGUID
value from DT or ACPI and then use this value to initialize the
node_guid parameter of IB device. This value shall be used by
RDMA CM.

Signed-off-by: Lijun Ou <oulijun@huawei.com>
Reviewed-by: Wei Hu <xavier.huwei@huawei.com>
Signed-off-by: Salil Mehta <salil.mehta@huawei.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Lijun Ou 9 年之前
父节点
当前提交
31644665d4
共有 2 个文件被更改,包括 10 次插入0 次删除
  1. 1 0
      drivers/infiniband/hw/hns/hns_roce_device.h
  2. 9 0
      drivers/infiniband/hw/hns/hns_roce_main.c

+ 1 - 0
drivers/infiniband/hw/hns/hns_roce_device.h

@@ -74,6 +74,7 @@
 #define MR_TYPE_DMA				0x03
 #define MR_TYPE_DMA				0x03
 
 
 #define PKEY_ID					0xffff
 #define PKEY_ID					0xffff
+#define GUID_LEN				8
 #define NODE_DESC_SIZE				64
 #define NODE_DESC_SIZE				64
 
 
 #define SERV_TYPE_RC				0
 #define SERV_TYPE_RC				0

+ 9 - 0
drivers/infiniband/hw/hns/hns_roce_main.c

@@ -797,6 +797,15 @@ static int hns_roce_get_cfg(struct hns_roce_dev *hr_dev)
 	if (IS_ERR(hr_dev->reg_base))
 	if (IS_ERR(hr_dev->reg_base))
 		return PTR_ERR(hr_dev->reg_base);
 		return PTR_ERR(hr_dev->reg_base);
 
 
+	/* read the node_guid of IB device from the DT or ACPI */
+	ret = device_property_read_u8_array(dev, "node-guid",
+					    (u8 *)&hr_dev->ib_dev.node_guid,
+					    GUID_LEN);
+	if (ret) {
+		dev_err(dev, "couldn't get node_guid from DT or ACPI!\n");
+		return ret;
+	}
+
 	/* get the RoCE associated ethernet ports or netdevices */
 	/* get the RoCE associated ethernet ports or netdevices */
 	for (i = 0; i < HNS_ROCE_MAX_PORTS; i++) {
 	for (i = 0; i < HNS_ROCE_MAX_PORTS; i++) {
 		if (dev_of_node(dev)) {
 		if (dev_of_node(dev)) {