Commit bff7b688 authored by Vivien Didelot's avatar Vivien Didelot Committed by David S. Miller

net: dsa: add dsa_is_unused_port helper

As the comment above the chunk states, the b53 driver attempts to
disable the unused ports. But using ds->enabled_port_mask is misleading,
because this mask reports in fact the user ports.

To avoid confusion and fix this, this patch introduces an explicit
dsa_is_unused_port helper which ensures the corresponding bit is not
masked in any of the switch port masks.
Signed-off-by: default avatarVivien Didelot <vivien.didelot@savoirfairelinux.com>
Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5bca178e
...@@ -873,7 +873,7 @@ static int b53_setup(struct dsa_switch *ds) ...@@ -873,7 +873,7 @@ static int b53_setup(struct dsa_switch *ds)
for (port = 0; port < dev->num_ports; port++) { for (port = 0; port < dev->num_ports; port++) {
if (dsa_is_cpu_port(ds, port)) if (dsa_is_cpu_port(ds, port))
b53_enable_cpu_port(dev, port); b53_enable_cpu_port(dev, port);
else if (!(BIT(port) & ds->enabled_port_mask)) else if (dsa_is_unused_port(ds, port))
b53_disable_port(ds, port, NULL); b53_disable_port(ds, port, NULL);
} }
......
...@@ -254,6 +254,13 @@ struct dsa_switch { ...@@ -254,6 +254,13 @@ struct dsa_switch {
struct dsa_port ports[]; struct dsa_port ports[];
}; };
static inline bool dsa_is_unused_port(struct dsa_switch *ds, int p)
{
u32 m = ds->enabled_port_mask | ds->dsa_port_mask | ds->cpu_port_mask;
return !(m & BIT(p));
}
static inline bool dsa_is_cpu_port(struct dsa_switch *ds, int p) static inline bool dsa_is_cpu_port(struct dsa_switch *ds, int p)
{ {
return !!(ds->cpu_port_mask & (1 << p)); return !!(ds->cpu_port_mask & (1 << p));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment