|
|
@@ -143,7 +143,8 @@ static void dump_dev_cap_flags2(struct mlx4_dev *dev, u64 flags)
|
|
|
[18] = "More than 80 VFs support",
|
|
|
[19] = "Performance optimized for limited rule configuration flow steering support",
|
|
|
[20] = "Recoverable error events support",
|
|
|
- [21] = "Port Remap support"
|
|
|
+ [21] = "Port Remap support",
|
|
|
+ [22] = "QCN support"
|
|
|
};
|
|
|
int i;
|
|
|
|
|
|
@@ -675,7 +676,7 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
|
|
|
#define QUERY_DEV_CAP_FLOW_STEERING_RANGE_EN_OFFSET 0x76
|
|
|
#define QUERY_DEV_CAP_FLOW_STEERING_MAX_QP_OFFSET 0x77
|
|
|
#define QUERY_DEV_CAP_CQ_EQ_CACHE_LINE_STRIDE 0x7a
|
|
|
-#define QUERY_DEV_CAP_ETH_PROT_CTRL_OFFSET 0x7a
|
|
|
+#define QUERY_DEV_CAP_ECN_QCN_VER_OFFSET 0x7b
|
|
|
#define QUERY_DEV_CAP_RDMARC_ENTRY_SZ_OFFSET 0x80
|
|
|
#define QUERY_DEV_CAP_QPC_ENTRY_SZ_OFFSET 0x82
|
|
|
#define QUERY_DEV_CAP_AUX_ENTRY_SZ_OFFSET 0x84
|
|
|
@@ -777,6 +778,9 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
|
|
|
dev_cap->flags2 |= MLX4_DEV_CAP_FLAG2_DMFS_IPOIB;
|
|
|
MLX4_GET(field, outbox, QUERY_DEV_CAP_FLOW_STEERING_MAX_QP_OFFSET);
|
|
|
dev_cap->fs_max_num_qp_per_entry = field;
|
|
|
+ MLX4_GET(field, outbox, QUERY_DEV_CAP_ECN_QCN_VER_OFFSET);
|
|
|
+ if (field & 0x1)
|
|
|
+ dev_cap->flags2 |= MLX4_DEV_CAP_FLAG2_QCN;
|
|
|
MLX4_GET(stat_rate, outbox, QUERY_DEV_CAP_RATE_SUPPORT_OFFSET);
|
|
|
dev_cap->stat_rate_support = stat_rate;
|
|
|
MLX4_GET(field, outbox, QUERY_DEV_CAP_CQ_TS_SUPPORT_OFFSET);
|
|
|
@@ -1149,6 +1153,11 @@ int mlx4_QUERY_DEV_CAP_wrapper(struct mlx4_dev *dev, int slave,
|
|
|
DEV_CAP_EXT_2_FLAG_FSM);
|
|
|
MLX4_PUT(outbox->buf, field32, QUERY_DEV_CAP_EXT_2_FLAGS_OFFSET);
|
|
|
|
|
|
+ /* turn off QCN for guests */
|
|
|
+ MLX4_GET(field, outbox->buf, QUERY_DEV_CAP_ECN_QCN_VER_OFFSET);
|
|
|
+ field &= 0xfe;
|
|
|
+ MLX4_PUT(outbox->buf, field, QUERY_DEV_CAP_ECN_QCN_VER_OFFSET);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|