Skip to content

Commit b79acb4

Browse files
Yevgeny PetrilinRoland Dreier
authored andcommitted
mlx4_core: Get ethernet MTU and default address from firmware
Get maximum ethernet MTU and default MAC address from the firmware QUERY_DEV_CAP command. Signed-off-by: Yevgeny Petrilin <[email protected]> Signed-off-by: Roland Dreier <[email protected]>
1 parent 93fc9e1 commit b79acb4

File tree

4 files changed

+17
-8
lines changed

4 files changed

+17
-8
lines changed

drivers/net/mlx4/fw.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
346346
MLX4_GET(field, outbox, QUERY_DEV_CAP_VL_PORT_OFFSET);
347347
dev_cap->max_vl[i] = field >> 4;
348348
MLX4_GET(field, outbox, QUERY_DEV_CAP_MTU_WIDTH_OFFSET);
349-
dev_cap->max_mtu[i] = field >> 4;
349+
dev_cap->ib_mtu[i] = field >> 4;
350350
dev_cap->max_port_width[i] = field & 0xf;
351351
MLX4_GET(field, outbox, QUERY_DEV_CAP_MAX_GID_OFFSET);
352352
dev_cap->max_gids[i] = 1 << (field & 0xf);
@@ -355,8 +355,10 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
355355
}
356356
} else {
357357
#define QUERY_PORT_MTU_OFFSET 0x01
358+
#define QUERY_PORT_ETH_MTU_OFFSET 0x02
358359
#define QUERY_PORT_WIDTH_OFFSET 0x06
359360
#define QUERY_PORT_MAX_GID_PKEY_OFFSET 0x07
361+
#define QUERY_PORT_MAC_OFFSET 0x08
360362
#define QUERY_PORT_MAX_MACVLAN_OFFSET 0x0a
361363
#define QUERY_PORT_MAX_VL_OFFSET 0x0b
362364

@@ -367,7 +369,7 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
367369
goto out;
368370

369371
MLX4_GET(field, outbox, QUERY_PORT_MTU_OFFSET);
370-
dev_cap->max_mtu[i] = field & 0xf;
372+
dev_cap->ib_mtu[i] = field & 0xf;
371373
MLX4_GET(field, outbox, QUERY_PORT_WIDTH_OFFSET);
372374
dev_cap->max_port_width[i] = field & 0xf;
373375
MLX4_GET(field, outbox, QUERY_PORT_MAX_GID_PKEY_OFFSET);
@@ -378,7 +380,8 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
378380
MLX4_GET(field, outbox, QUERY_PORT_MAX_MACVLAN_OFFSET);
379381
dev_cap->log_max_macs[i] = field & 0xf;
380382
dev_cap->log_max_vlans[i] = field >> 4;
381-
383+
MLX4_GET(dev_cap->eth_mtu[i], outbox, QUERY_PORT_ETH_MTU_OFFSET);
384+
MLX4_GET(dev_cap->def_mac[i], outbox, QUERY_PORT_MAC_OFFSET);
382385
}
383386
}
384387

@@ -412,7 +415,7 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
412415
mlx4_dbg(dev, "Max CQEs: %d, max WQEs: %d, max SRQ WQEs: %d\n",
413416
dev_cap->max_cq_sz, dev_cap->max_qp_sz, dev_cap->max_srq_sz);
414417
mlx4_dbg(dev, "Local CA ACK delay: %d, max MTU: %d, port width cap: %d\n",
415-
dev_cap->local_ca_ack_delay, 128 << dev_cap->max_mtu[1],
418+
dev_cap->local_ca_ack_delay, 128 << dev_cap->ib_mtu[1],
416419
dev_cap->max_port_width[1]);
417420
mlx4_dbg(dev, "Max SQ desc size: %d, max SQ S/G: %d\n",
418421
dev_cap->max_sq_desc_sz, dev_cap->max_sq_sg);
@@ -824,7 +827,7 @@ int mlx4_INIT_PORT(struct mlx4_dev *dev, int port)
824827
flags |= (dev->caps.port_width_cap[port] & 0xf) << INIT_PORT_PORT_WIDTH_SHIFT;
825828
MLX4_PUT(inbox, flags, INIT_PORT_FLAGS_OFFSET);
826829

827-
field = 128 << dev->caps.mtu_cap[port];
830+
field = 128 << dev->caps.ib_mtu_cap[port];
828831
MLX4_PUT(inbox, field, INIT_PORT_MTU_OFFSET);
829832
field = dev->caps.gid_table_len[port];
830833
MLX4_PUT(inbox, field, INIT_PORT_MAX_GID_OFFSET);

drivers/net/mlx4/fw.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,13 @@ struct mlx4_dev_cap {
6666
int local_ca_ack_delay;
6767
int num_ports;
6868
u32 max_msg_sz;
69-
int max_mtu[MLX4_MAX_PORTS + 1];
69+
int ib_mtu[MLX4_MAX_PORTS + 1];
7070
int max_port_width[MLX4_MAX_PORTS + 1];
7171
int max_vl[MLX4_MAX_PORTS + 1];
7272
int max_gids[MLX4_MAX_PORTS + 1];
7373
int max_pkeys[MLX4_MAX_PORTS + 1];
74+
u64 def_mac[MLX4_MAX_PORTS + 1];
75+
u16 eth_mtu[MLX4_MAX_PORTS + 1];
7476
u16 stat_rate_support;
7577
u32 flags;
7678
int reserved_uars;

drivers/net/mlx4/main.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,12 @@ static int mlx4_dev_cap(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap)
133133
dev->caps.num_ports = dev_cap->num_ports;
134134
for (i = 1; i <= dev->caps.num_ports; ++i) {
135135
dev->caps.vl_cap[i] = dev_cap->max_vl[i];
136-
dev->caps.mtu_cap[i] = dev_cap->max_mtu[i];
136+
dev->caps.ib_mtu_cap[i] = dev_cap->ib_mtu[i];
137137
dev->caps.gid_table_len[i] = dev_cap->max_gids[i];
138138
dev->caps.pkey_table_len[i] = dev_cap->max_pkeys[i];
139139
dev->caps.port_width_cap[i] = dev_cap->max_port_width[i];
140+
dev->caps.eth_mtu_cap[i] = dev_cap->eth_mtu[i];
141+
dev->caps.def_mac[i] = dev_cap->def_mac[i];
140142
}
141143

142144
dev->caps.num_uars = dev_cap->uar_size / PAGE_SIZE;

include/linux/mlx4/device.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,9 @@ struct mlx4_caps {
166166
u64 fw_ver;
167167
int num_ports;
168168
int vl_cap[MLX4_MAX_PORTS + 1];
169-
int mtu_cap[MLX4_MAX_PORTS + 1];
169+
int ib_mtu_cap[MLX4_MAX_PORTS + 1];
170+
u64 def_mac[MLX4_MAX_PORTS + 1];
171+
int eth_mtu_cap[MLX4_MAX_PORTS + 1];
170172
int gid_table_len[MLX4_MAX_PORTS + 1];
171173
int pkey_table_len[MLX4_MAX_PORTS + 1];
172174
int local_ca_ack_delay;

0 commit comments

Comments
 (0)