Blob Blame History Raw
From: Or Gerlitz <ogerlitz@mellanox.com>
Date: Thu, 4 Jan 2018 12:26:21 +0200
Subject: net/mlx5: Enable setting hairpin queue size
Patch-mainline: v4.16-rc1
Git-commit: 4d533e0f86952eb97f66f2c9548313f6e51066c0
References: bsc#1103990 FATE#326006

Allow to specify the size of the hairpin queues along with the
packet buffer data size from the core setup code.

If the driver doesn't provide this, the FW applies proper value that
matches the provided data size and a FW chosen RQ stride size.

Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
---
 drivers/net/ethernet/mellanox/mlx5/core/transobj.c |    2 ++
 include/linux/mlx5/mlx5_ifc.h                      |    8 ++++++--
 include/linux/mlx5/transobj.h                      |    1 +
 3 files changed, 9 insertions(+), 2 deletions(-)

--- a/drivers/net/ethernet/mellanox/mlx5/core/transobj.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/transobj.c
@@ -413,6 +413,7 @@ static int mlx5_hairpin_create_rq(struct
 	MLX5_SET(rqc, rqc, counter_set_id, params->q_counter);
 
 	MLX5_SET(wq, wq, log_hairpin_data_sz, params->log_data_size);
+	MLX5_SET(wq, wq, log_hairpin_num_packets, params->log_num_packets);
 
 	return mlx5_core_create_rq(mdev, in, MLX5_ST_SZ_BYTES(create_rq_in), rqn);
 }
@@ -430,6 +431,7 @@ static int mlx5_hairpin_create_sq(struct
 	MLX5_SET(sqc, sqc, state, MLX5_SQC_STATE_RST);
 
 	MLX5_SET(wq, wq, log_hairpin_data_sz, params->log_data_size);
+	MLX5_SET(wq, wq, log_hairpin_num_packets, params->log_num_packets);
 
 	return mlx5_core_create_sq(mdev, in, MLX5_ST_SZ_BYTES(create_sq_in), sqn);
 }
--- a/include/linux/mlx5/mlx5_ifc.h
+++ b/include/linux/mlx5/mlx5_ifc.h
@@ -1031,7 +1031,9 @@ struct mlx5_ifc_cmd_hca_cap_bits {
 	u8         log_max_hairpin_queues[0x5];
 	u8         reserved_at_3c8[0x3];
 	u8         log_max_hairpin_wq_data_sz[0x5];
-	u8         reserved_at_3d0[0xb];
+	u8         reserved_at_3d0[0x3];
+	u8         log_max_hairpin_num_packets[0x5];
+	u8         reserved_at_3d8[0x3];
 	u8         log_max_wq_sz[0x5];
 
 	u8         nic_vport_change_event[0x1];
@@ -1178,7 +1180,9 @@ struct mlx5_ifc_wq_bits {
 	u8         reserved_at_118[0x3];
 	u8         log_wq_sz[0x5];
 
-	u8         reserved_at_120[0xb];
+	u8         reserved_at_120[0x3];
+	u8         log_hairpin_num_packets[0x5];
+	u8         reserved_at_128[0x3];
 	u8         log_hairpin_data_sz[0x5];
 	u8         reserved_at_130[0x5];
 
--- a/include/linux/mlx5/transobj.h
+++ b/include/linux/mlx5/transobj.h
@@ -77,6 +77,7 @@ void mlx5_core_destroy_rqt(struct mlx5_c
 
 struct mlx5_hairpin_params {
 	u8  log_data_size;
+	u8  log_num_packets;
 	u16 q_counter;
 	int num_channels;
 };