MLX5_CAP_ROCE(mdev, fl_rc_qp_when_roce_enabled);
        }
 
+       caps->isolate_vl_tc = MLX5_CAP_GEN(mdev, isolate_vl_tc_new);
+
        if (caps->flex_protocols & MLX5_FLEX_PARSER_ICMP_V4_ENABLED) {
                caps->flex_parser_id_icmp_dw0 = MLX5_CAP_GEN(mdev, flex_parser_id_icmp_dw0);
                caps->flex_parser_id_icmp_dw1 = MLX5_CAP_GEN(mdev, flex_parser_id_icmp_dw1);
 
        u32 pdn;
        u32 max_send_wr;
        struct mlx5_uars_page *uar;
+       u8 isolate_vl_tc:1;
 };
 
 static int dr_parse_cqe(struct mlx5dr_cq *dr_cq, struct mlx5_cqe64 *cqe64)
        qpc = MLX5_ADDR_OF(create_qp_in, in, qpc);
        MLX5_SET(qpc, qpc, st, MLX5_QP_ST_RC);
        MLX5_SET(qpc, qpc, pm_state, MLX5_QP_PM_MIGRATED);
+       MLX5_SET(qpc, qpc, isolate_vl_tc, attr->isolate_vl_tc);
        MLX5_SET(qpc, qpc, pd, attr->pdn);
        MLX5_SET(qpc, qpc, uar_page, attr->uar->index);
        MLX5_SET(qpc, qpc, log_page_size,
        init_attr.pdn = dmn->pdn;
        init_attr.uar = dmn->uar;
        init_attr.max_send_wr = QUEUE_SIZE;
+
+       /* Isolated VL is applicable only if force loopback is supported */
+       if (dr_send_allow_fl(&dmn->info.caps))
+               init_attr.isolate_vl_tc = dmn->info.caps.isolate_vl_tc;
+
        spin_lock_init(&dmn->send_ring->lock);
 
        dmn->send_ring->qp = dr_create_rc_qp(dmn->mdev, &init_attr);
 
        struct mlx5dr_cmd_vport_cap *vports_caps;
        bool prio_tag_required;
        struct mlx5dr_roce_cap roce_caps;
+       u8 isolate_vl_tc:1;
 };
 
 struct mlx5dr_domain_rx_tx {
        u32 sq_wqe_cnt;
        u32 rq_wqe_cnt;
        u32 rq_wqe_shift;
+       u8 isolate_vl_tc:1;
 };
 
 int mlx5dr_cmd_query_gid(struct mlx5_core_dev *mdev, u8 vhca_port_num,
 
        u8         log_max_srq_sz[0x8];
        u8         log_max_qp_sz[0x8];
        u8         event_cap[0x1];
-       u8         reserved_at_91[0x7];
+       u8         reserved_at_91[0x2];
+       u8         isolate_vl_tc_new[0x1];
+       u8         reserved_at_94[0x4];
        u8         prio_tag_required[0x1];
        u8         reserved_at_99[0x2];
        u8         log_max_qp[0x5];