Message ID | 20201004161257.13945-2-andrew@lunn.ch |
---|---|
State | New |
Headers | show |
Series | mv88e6xxx: Add per port devlink regions | expand |
On 10/4/2020 9:12 AM, Andrew Lunn wrote: > Not all ports of a switch need to be used, particularly in embedded > systems. Add a port flavour for ports which physically exist in the > switch, but are not connected to the front panel etc, and so are > unused. By having unused ports present in devlink, it gives a more > accurate representation of the hardware. It also allows regions to be > associated to such ports, so allowing, for example, to determine > unused ports are correctly powered off, or to compare probable reset > defaults of unused ports to used ports experiences issues. > > Actually registering unused ports and setting the flavour to unused is > optional. The DSA core will register all such switch ports, but such > ports are expected to be limited in number. Bigger ASICs may decide > not to list unused ports. > > v2: > Expand the description about why it is useful > > Reviewed-by: Vladimir Oltean <olteanv@gmail.com> > Tested-by: Vladimir Oltean <olteanv@gmail.com> > Signed-off-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h index ba467dc07852..5f1d6c327670 100644 --- a/include/uapi/linux/devlink.h +++ b/include/uapi/linux/devlink.h @@ -197,6 +197,9 @@ enum devlink_port_flavour { * port that faces the PCI VF. */ DEVLINK_PORT_FLAVOUR_VIRTUAL, /* Any virtual port facing the user. */ + DEVLINK_PORT_FLAVOUR_UNUSED, /* Port which exists in the switch, but + * is not used in any way. + */ }; enum devlink_param_cmode { diff --git a/net/core/devlink.c b/net/core/devlink.c index 0f3c8b2ec056..20224fd1ebaf 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -7612,7 +7612,8 @@ static bool devlink_port_type_should_warn(struct devlink_port *devlink_port) { /* Ignore CPU and DSA flavours. */ return devlink_port->attrs.flavour != DEVLINK_PORT_FLAVOUR_CPU && - devlink_port->attrs.flavour != DEVLINK_PORT_FLAVOUR_DSA; + devlink_port->attrs.flavour != DEVLINK_PORT_FLAVOUR_DSA && + devlink_port->attrs.flavour != DEVLINK_PORT_FLAVOUR_UNUSED; } #define DEVLINK_PORT_TYPE_WARN_TIMEOUT (HZ * 3600) @@ -7897,6 +7898,7 @@ static int __devlink_port_phys_port_name_get(struct devlink_port *devlink_port, break; case DEVLINK_PORT_FLAVOUR_CPU: case DEVLINK_PORT_FLAVOUR_DSA: + case DEVLINK_PORT_FLAVOUR_UNUSED: /* As CPU and DSA ports do not have a netdevice associated * case should not ever happen. */