Re: [PATCH net-next 1/2] dpaa2-eth: use the DPMAC id as the devlink physical port number

From: Ioana Ciornei

Date: Mon Sep 28 2026 - 05:23:19 EST


On Wed, Sep 23, 2026 at 02:58:00PM +0200, Vincent Jardin via B4 Relay wrote:
> From: Vincent Jardin <vjardin@xxxxxxx>
>
> dpaa2-eth registers every DPNI as a devlink port of flavour physical
> without setting a port number. All DPAA2 interfaces therefore report
> the same phys_port_name, p0 (see devlink port show).
>
> The DPNI endpoint can change at runtime while the attributes of a
> registered devlink port cannot, so log a warning when it happens.
>
> Another benefit: udev rules can match ATTR{phys_port_name} to name an
> interface based on its DPMAC.
>
> Signed-off-by: Vincent Jardin <vjardin@xxxxxxx>
> ---
> .../ethernet/freescale/dpaa2/dpaa2-eth-devlink.c | 26 ++++++++++++++++++++++
> drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 2 ++
> drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.h | 1 +
> 3 files changed, 29 insertions(+)
>
> diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-devlink.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-devlink.c
> index 8775c931106b..8b2addd3f83a 100644
> --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-devlink.c
> +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth-devlink.c
> @@ -213,16 +213,42 @@ void dpaa2_eth_dl_unregister(struct dpaa2_eth_priv *priv)
> devlink_unregister(priv->devlink);
> }
>
> +static u32 dpaa2_eth_dl_port_number(struct dpaa2_eth_priv *priv)
> +{
> + u32 port_number = 0;
> +
> + mutex_lock(&priv->mac_lock);
> + if (priv->mac)
> + port_number = priv->mac->mc_dev->obj_desc.id;
> + mutex_unlock(&priv->mac_lock);
> +
> + return port_number;
> +}
> +
> int dpaa2_eth_dl_port_add(struct dpaa2_eth_priv *priv)
> {
> struct devlink_port *devlink_port = &priv->devlink_port;
> struct devlink_port_attrs attrs = {};
>
> attrs.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL;
> + attrs.phys.port_number = dpaa2_eth_dl_port_number(priv);
> devlink_port_attrs_set(devlink_port, &attrs);
> return devlink_port_register(priv->devlink, devlink_port, 0);
> }
>
> +void dpaa2_eth_dl_port_check(struct dpaa2_eth_priv *priv)
> +{
> + u32 registered = priv->devlink_port.attrs.phys.port_number;
> + u32 current_number = dpaa2_eth_dl_port_number(priv);
> +
> + if (registered == current_number)
> + return;
> +
> + netdev_warn(priv->net_dev,
> + "devlink port number %u is stale, the DPMAC endpoint is now %u (0: none); rebind the DPNI to update it\n",
> + registered, current_number);

I agree with sashiko's feedback on this warning message. I would prefer
a simple "devlink port number %u is stable, rebind to update".

Ioana