diff options
| author | Shani Michaeli <shanim@mellanox.com> | 2015-03-05 13:16:12 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2015-03-06 21:50:02 -0500 |
| commit | d237baa1cbb3a2335357484c1d63a810a01947e2 (patch) | |
| tree | 4ac9ffdd5da9ddd6dd8db317b5854701be5da3e1 | |
| parent | c93682477bd861744589215515a63b81fdbd8948 (diff) | |
net/mlx4_core: Add basic elements for QCN
Add device capability, firmware command opcode and etc prior elements
needed for QCN suppprt. Disable SRIOV VF view/access for QCN is disabled.
While here, remove a redundant offset definition into the
QUERY_DEV_CAP mailbox.
Signed-off-by: Shani Michaeli <shanim@mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/cmd.c | 9 | ||||
| -rw-r--r-- | drivers/net/ethernet/mellanox/mlx4/fw.c | 13 | ||||
| -rw-r--r-- | include/linux/mlx4/cmd.h | 13 | ||||
| -rw-r--r-- | include/linux/mlx4/device.h | 3 |
4 files changed, 35 insertions, 3 deletions
diff --git a/drivers/net/ethernet/mellanox/mlx4/cmd.c b/drivers/net/ethernet/mellanox/mlx4/cmd.c index a681d7c0bb9f..20b3c7b21e63 100644 --- a/drivers/net/ethernet/mellanox/mlx4/cmd.c +++ b/drivers/net/ethernet/mellanox/mlx4/cmd.c | |||
| @@ -1499,6 +1499,15 @@ static struct mlx4_cmd_info cmd_info[] = { | |||
| 1499 | .verify = NULL, | 1499 | .verify = NULL, |
| 1500 | .wrapper = mlx4_ACCESS_REG_wrapper, | 1500 | .wrapper = mlx4_ACCESS_REG_wrapper, |
| 1501 | }, | 1501 | }, |
| 1502 | { | ||
| 1503 | .opcode = MLX4_CMD_CONGESTION_CTRL_OPCODE, | ||
| 1504 | .has_inbox = false, | ||
| 1505 | .has_outbox = false, | ||
| 1506 | .out_is_imm = false, | ||
| 1507 | .encode_slave_id = false, | ||
| 1508 | .verify = NULL, | ||
| 1509 | .wrapper = mlx4_CMD_EPERM_wrapper, | ||
| 1510 | }, | ||
| 1502 | /* Native multicast commands are not available for guests */ | 1511 | /* Native multicast commands are not available for guests */ |
| 1503 | { | 1512 | { |
| 1504 | .opcode = MLX4_CMD_QP_ATTACH, | 1513 | .opcode = MLX4_CMD_QP_ATTACH, |
diff --git a/drivers/net/ethernet/mellanox/mlx4/fw.c b/drivers/net/ethernet/mellanox/mlx4/fw.c index 5a21e5dc94cb..242bcee5d774 100644 --- a/drivers/net/ethernet/mellanox/mlx4/fw.c +++ b/drivers/net/ethernet/mellanox/mlx4/fw.c | |||
| @@ -143,7 +143,8 @@ static void dump_dev_cap_flags2(struct mlx4_dev *dev, u64 flags) | |||
| 143 | [18] = "More than 80 VFs support", | 143 | [18] = "More than 80 VFs support", |
| 144 | [19] = "Performance optimized for limited rule configuration flow steering support", | 144 | [19] = "Performance optimized for limited rule configuration flow steering support", |
| 145 | [20] = "Recoverable error events support", | 145 | [20] = "Recoverable error events support", |
| 146 | [21] = "Port Remap support" | 146 | [21] = "Port Remap support", |
| 147 | [22] = "QCN support" | ||
| 147 | }; | 148 | }; |
| 148 | int i; | 149 | int i; |
| 149 | 150 | ||
| @@ -675,7 +676,7 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) | |||
| 675 | #define QUERY_DEV_CAP_FLOW_STEERING_RANGE_EN_OFFSET 0x76 | 676 | #define QUERY_DEV_CAP_FLOW_STEERING_RANGE_EN_OFFSET 0x76 |
| 676 | #define QUERY_DEV_CAP_FLOW_STEERING_MAX_QP_OFFSET 0x77 | 677 | #define QUERY_DEV_CAP_FLOW_STEERING_MAX_QP_OFFSET 0x77 |
| 677 | #define QUERY_DEV_CAP_CQ_EQ_CACHE_LINE_STRIDE 0x7a | 678 | #define QUERY_DEV_CAP_CQ_EQ_CACHE_LINE_STRIDE 0x7a |
| 678 | #define QUERY_DEV_CAP_ETH_PROT_CTRL_OFFSET 0x7a | 679 | #define QUERY_DEV_CAP_ECN_QCN_VER_OFFSET 0x7b |
| 679 | #define QUERY_DEV_CAP_RDMARC_ENTRY_SZ_OFFSET 0x80 | 680 | #define QUERY_DEV_CAP_RDMARC_ENTRY_SZ_OFFSET 0x80 |
| 680 | #define QUERY_DEV_CAP_QPC_ENTRY_SZ_OFFSET 0x82 | 681 | #define QUERY_DEV_CAP_QPC_ENTRY_SZ_OFFSET 0x82 |
| 681 | #define QUERY_DEV_CAP_AUX_ENTRY_SZ_OFFSET 0x84 | 682 | #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) | |||
| 777 | dev_cap->flags2 |= MLX4_DEV_CAP_FLAG2_DMFS_IPOIB; | 778 | dev_cap->flags2 |= MLX4_DEV_CAP_FLAG2_DMFS_IPOIB; |
| 778 | MLX4_GET(field, outbox, QUERY_DEV_CAP_FLOW_STEERING_MAX_QP_OFFSET); | 779 | MLX4_GET(field, outbox, QUERY_DEV_CAP_FLOW_STEERING_MAX_QP_OFFSET); |
| 779 | dev_cap->fs_max_num_qp_per_entry = field; | 780 | dev_cap->fs_max_num_qp_per_entry = field; |
| 781 | MLX4_GET(field, outbox, QUERY_DEV_CAP_ECN_QCN_VER_OFFSET); | ||
| 782 | if (field & 0x1) | ||
| 783 | dev_cap->flags2 |= MLX4_DEV_CAP_FLAG2_QCN; | ||
| 780 | MLX4_GET(stat_rate, outbox, QUERY_DEV_CAP_RATE_SUPPORT_OFFSET); | 784 | MLX4_GET(stat_rate, outbox, QUERY_DEV_CAP_RATE_SUPPORT_OFFSET); |
| 781 | dev_cap->stat_rate_support = stat_rate; | 785 | dev_cap->stat_rate_support = stat_rate; |
| 782 | MLX4_GET(field, outbox, QUERY_DEV_CAP_CQ_TS_SUPPORT_OFFSET); | 786 | 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, | |||
| 1149 | DEV_CAP_EXT_2_FLAG_FSM); | 1153 | DEV_CAP_EXT_2_FLAG_FSM); |
| 1150 | MLX4_PUT(outbox->buf, field32, QUERY_DEV_CAP_EXT_2_FLAGS_OFFSET); | 1154 | MLX4_PUT(outbox->buf, field32, QUERY_DEV_CAP_EXT_2_FLAGS_OFFSET); |
| 1151 | 1155 | ||
| 1156 | /* turn off QCN for guests */ | ||
| 1157 | MLX4_GET(field, outbox->buf, QUERY_DEV_CAP_ECN_QCN_VER_OFFSET); | ||
| 1158 | field &= 0xfe; | ||
| 1159 | MLX4_PUT(outbox->buf, field, QUERY_DEV_CAP_ECN_QCN_VER_OFFSET); | ||
| 1160 | |||
| 1152 | return 0; | 1161 | return 0; |
| 1153 | } | 1162 | } |
| 1154 | 1163 | ||
diff --git a/include/linux/mlx4/cmd.h b/include/linux/mlx4/cmd.h index 7b6d4e9ff603..7299e9548906 100644 --- a/include/linux/mlx4/cmd.h +++ b/include/linux/mlx4/cmd.h | |||
| @@ -163,6 +163,9 @@ enum { | |||
| 163 | MLX4_QP_FLOW_STEERING_ATTACH = 0x65, | 163 | MLX4_QP_FLOW_STEERING_ATTACH = 0x65, |
| 164 | MLX4_QP_FLOW_STEERING_DETACH = 0x66, | 164 | MLX4_QP_FLOW_STEERING_DETACH = 0x66, |
| 165 | MLX4_FLOW_STEERING_IB_UC_QP_RANGE = 0x64, | 165 | MLX4_FLOW_STEERING_IB_UC_QP_RANGE = 0x64, |
| 166 | |||
| 167 | /* Update and read QCN parameters */ | ||
| 168 | MLX4_CMD_CONGESTION_CTRL_OPCODE = 0x68, | ||
| 166 | }; | 169 | }; |
| 167 | 170 | ||
| 168 | enum { | 171 | enum { |
| @@ -233,6 +236,16 @@ struct mlx4_config_dev_params { | |||
| 233 | u8 rx_csum_flags_port_2; | 236 | u8 rx_csum_flags_port_2; |
| 234 | }; | 237 | }; |
| 235 | 238 | ||
| 239 | enum mlx4_en_congestion_control_algorithm { | ||
| 240 | MLX4_CTRL_ALGO_802_1_QAU_REACTION_POINT = 0, | ||
| 241 | }; | ||
| 242 | |||
| 243 | enum mlx4_en_congestion_control_opmod { | ||
| 244 | MLX4_CONGESTION_CONTROL_GET_PARAMS, | ||
| 245 | MLX4_CONGESTION_CONTROL_GET_STATISTICS, | ||
| 246 | MLX4_CONGESTION_CONTROL_SET_PARAMS = 4, | ||
| 247 | }; | ||
| 248 | |||
| 236 | struct mlx4_dev; | 249 | struct mlx4_dev; |
| 237 | 250 | ||
| 238 | struct mlx4_cmd_mailbox { | 251 | struct mlx4_cmd_mailbox { |
diff --git a/include/linux/mlx4/device.h b/include/linux/mlx4/device.h index e4ebff7e9d02..1cc54822b931 100644 --- a/include/linux/mlx4/device.h +++ b/include/linux/mlx4/device.h | |||
| @@ -203,7 +203,8 @@ enum { | |||
| 203 | MLX4_DEV_CAP_FLAG2_80_VFS = 1LL << 18, | 203 | MLX4_DEV_CAP_FLAG2_80_VFS = 1LL << 18, |
| 204 | MLX4_DEV_CAP_FLAG2_FS_A0 = 1LL << 19, | 204 | MLX4_DEV_CAP_FLAG2_FS_A0 = 1LL << 19, |
| 205 | MLX4_DEV_CAP_FLAG2_RECOVERABLE_ERROR_EVENT = 1LL << 20, | 205 | MLX4_DEV_CAP_FLAG2_RECOVERABLE_ERROR_EVENT = 1LL << 20, |
| 206 | MLX4_DEV_CAP_FLAG2_PORT_REMAP = 1LL << 21 | 206 | MLX4_DEV_CAP_FLAG2_PORT_REMAP = 1LL << 21, |
| 207 | MLX4_DEV_CAP_FLAG2_QCN = 1LL << 22, | ||
| 207 | }; | 208 | }; |
| 208 | 209 | ||
| 209 | enum { | 210 | enum { |
