RDMA/hns: Configure ecn field of ip header
authorLijun Ou <oulijun@huawei.com>
Sun, 30 Sep 2018 09:00:32 +0000 (17:00 +0800)
committerJason Gunthorpe <jgg@mellanox.com>
Wed, 3 Oct 2018 22:21:17 +0000 (16:21 -0600)
In order to compatible with the third party RoCE device, The hardware
modify the set method for the ecn field of ip header in new hip08
version. The high 6bit of tclass be assigned for dscp field of packet.

Signed-off-by: Lijun Ou <oulijun@huawei.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/hns/hns_roce_hw_v2.c

index d563d29..3408fc5 100644 (file)
@@ -3640,8 +3640,15 @@ static int hns_roce_v2_modify_qp(struct ib_qp *ibqp,
                               V2_QPC_BYTE_24_HOP_LIMIT_M,
                               V2_QPC_BYTE_24_HOP_LIMIT_S, 0);
 
-               roce_set_field(context->byte_24_mtu_tc, V2_QPC_BYTE_24_TC_M,
-                              V2_QPC_BYTE_24_TC_S, grh->traffic_class);
+               if (hr_dev->pci_dev->revision == 0x21 &&
+                   gid_attr->gid_type == IB_GID_TYPE_ROCE_UDP_ENCAP)
+                       roce_set_field(context->byte_24_mtu_tc,
+                                      V2_QPC_BYTE_24_TC_M, V2_QPC_BYTE_24_TC_S,
+                                      grh->traffic_class >> 2);
+               else
+                       roce_set_field(context->byte_24_mtu_tc,
+                                      V2_QPC_BYTE_24_TC_M, V2_QPC_BYTE_24_TC_S,
+                                      grh->traffic_class);
                roce_set_field(qpc_mask->byte_24_mtu_tc, V2_QPC_BYTE_24_TC_M,
                               V2_QPC_BYTE_24_TC_S, 0);
                roce_set_field(context->byte_28_at_fl, V2_QPC_BYTE_28_FL_M,