aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c2
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/core.c3
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfp_devlink.c2
-rw-r--r--include/net/devlink.h8
-rw-r--r--net/core/devlink.c16
-rw-r--r--net/dsa/dsa2.c2
6 files changed, 26 insertions, 7 deletions
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
index ab6fd05c462b..36ec4cb45276 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
@@ -230,7 +230,7 @@ int bnxt_dl_register(struct bnxt *bp)
230 } 230 }
231 231
232 devlink_port_attrs_set(&bp->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL, 232 devlink_port_attrs_set(&bp->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
233 bp->pf.port_id, false, 0); 233 bp->pf.port_id, false, 0, NULL, 0);
234 rc = devlink_port_register(dl, &bp->dl_port, bp->pf.port_id); 234 rc = devlink_port_register(dl, &bp->dl_port, bp->pf.port_id);
235 if (rc) { 235 if (rc) {
236 netdev_err(bp->dev, "devlink_port_register failed"); 236 netdev_err(bp->dev, "devlink_port_register failed");
diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c b/drivers/net/ethernet/mellanox/mlxsw/core.c
index e55b4aa91e3b..d01bd9d71b90 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core.c
@@ -1730,7 +1730,8 @@ int mlxsw_core_port_init(struct mlxsw_core *mlxsw_core, u8 local_port,
1730 1730
1731 mlxsw_core_port->local_port = local_port; 1731 mlxsw_core_port->local_port = local_port;
1732 devlink_port_attrs_set(devlink_port, DEVLINK_PORT_FLAVOUR_PHYSICAL, 1732 devlink_port_attrs_set(devlink_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
1733 port_number, split, split_port_subnumber); 1733 port_number, split, split_port_subnumber,
1734 NULL, 0);
1734 err = devlink_port_register(devlink, devlink_port, local_port); 1735 err = devlink_port_register(devlink, devlink_port, local_port);
1735 if (err) 1736 if (err)
1736 memset(mlxsw_core_port, 0, sizeof(*mlxsw_core_port)); 1737 memset(mlxsw_core_port, 0, sizeof(*mlxsw_core_port));
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
index 919da0d84fb4..15c4d2e0c86e 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
@@ -364,7 +364,7 @@ int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port)
364 364
365 devlink_port_attrs_set(&port->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL, 365 devlink_port_attrs_set(&port->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
366 eth_port.label_port, eth_port.is_split, 366 eth_port.label_port, eth_port.is_split,
367 eth_port.label_subport); 367 eth_port.label_subport, NULL, 0);
368 368
369 devlink = priv_to_devlink(app->pf); 369 devlink = priv_to_devlink(app->pf);
370 370
diff --git a/include/net/devlink.h b/include/net/devlink.h
index 4a1e3452a4ce..0f7968761204 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -42,10 +42,12 @@ struct devlink {
42 42
43struct devlink_port_attrs { 43struct devlink_port_attrs {
44 u8 set:1, 44 u8 set:1,
45 split:1; 45 split:1,
46 switch_port:1;
46 enum devlink_port_flavour flavour; 47 enum devlink_port_flavour flavour;
47 u32 port_number; /* same value as "split group" */ 48 u32 port_number; /* same value as "split group" */
48 u32 split_subport_number; 49 u32 split_subport_number;
50 struct netdev_phys_item_id switch_id;
49}; 51};
50 52
51struct devlink_port { 53struct devlink_port {
@@ -582,7 +584,9 @@ void devlink_port_type_clear(struct devlink_port *devlink_port);
582void devlink_port_attrs_set(struct devlink_port *devlink_port, 584void devlink_port_attrs_set(struct devlink_port *devlink_port,
583 enum devlink_port_flavour flavour, 585 enum devlink_port_flavour flavour,
584 u32 port_number, bool split, 586 u32 port_number, bool split,
585 u32 split_subport_number); 587 u32 split_subport_number,
588 const unsigned char *switch_id,
589 unsigned char switch_id_len);
586int devlink_sb_register(struct devlink *devlink, unsigned int sb_index, 590int devlink_sb_register(struct devlink *devlink, unsigned int sb_index,
587 u32 size, u16 ingress_pools_count, 591 u32 size, u16 ingress_pools_count,
588 u16 egress_pools_count, u16 ingress_tc_count, 592 u16 egress_pools_count, u16 ingress_tc_count,
diff --git a/net/core/devlink.c b/net/core/devlink.c
index dc3a99148ee7..5b2eb186bb92 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -5414,11 +5414,16 @@ EXPORT_SYMBOL_GPL(devlink_port_type_clear);
5414 * @split: indicates if this is split port 5414 * @split: indicates if this is split port
5415 * @split_subport_number: if the port is split, this is the number 5415 * @split_subport_number: if the port is split, this is the number
5416 * of subport. 5416 * of subport.
5417 * @switch_id: if the port is part of switch, this is buffer with ID,
5418 * otwerwise this is NULL
5419 * @switch_id_len: length of the switch_id buffer
5417 */ 5420 */
5418void devlink_port_attrs_set(struct devlink_port *devlink_port, 5421void devlink_port_attrs_set(struct devlink_port *devlink_port,
5419 enum devlink_port_flavour flavour, 5422 enum devlink_port_flavour flavour,
5420 u32 port_number, bool split, 5423 u32 port_number, bool split,
5421 u32 split_subport_number) 5424 u32 split_subport_number,
5425 const unsigned char *switch_id,
5426 unsigned char switch_id_len)
5422{ 5427{
5423 struct devlink_port_attrs *attrs = &devlink_port->attrs; 5428 struct devlink_port_attrs *attrs = &devlink_port->attrs;
5424 5429
@@ -5429,6 +5434,15 @@ void devlink_port_attrs_set(struct devlink_port *devlink_port,
5429 attrs->port_number = port_number; 5434 attrs->port_number = port_number;
5430 attrs->split = split; 5435 attrs->split = split;
5431 attrs->split_subport_number = split_subport_number; 5436 attrs->split_subport_number = split_subport_number;
5437 if (switch_id) {
5438 attrs->switch_port = true;
5439 if (WARN_ON(switch_id_len > MAX_PHYS_ITEM_ID_LEN))
5440 switch_id_len = MAX_PHYS_ITEM_ID_LEN;
5441 memcpy(attrs->switch_id.id, switch_id, switch_id_len);
5442 attrs->switch_id.id_len = switch_id_len;
5443 } else {
5444 attrs->switch_port = false;
5445 }
5432} 5446}
5433EXPORT_SYMBOL_GPL(devlink_port_attrs_set); 5447EXPORT_SYMBOL_GPL(devlink_port_attrs_set);
5434 5448
diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c
index 0e1cce460406..4493b2ff3438 100644
--- a/net/dsa/dsa2.c
+++ b/net/dsa/dsa2.c
@@ -286,7 +286,7 @@ static int dsa_port_setup(struct dsa_port *dp)
286 * independent from front panel port numbers. 286 * independent from front panel port numbers.
287 */ 287 */
288 devlink_port_attrs_set(&dp->devlink_port, flavour, 288 devlink_port_attrs_set(&dp->devlink_port, flavour,
289 dp->index, false, 0); 289 dp->index, false, 0, NULL, 0);
290 err = devlink_port_register(ds->devlink, &dp->devlink_port, 290 err = devlink_port_register(ds->devlink, &dp->devlink_port,
291 dp->index); 291 dp->index);
292 if (err) 292 if (err)