summaryrefslogtreecommitdiff
path: root/drivers/net/dsa
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/dsa')
-rw-r--r--drivers/net/dsa/mv88e6xxx/chip.c13
-rw-r--r--drivers/net/dsa/qca8k.c5
2 files changed, 11 insertions, 7 deletions
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 4703506e8e85..23151287387c 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -1630,10 +1630,11 @@ static int mv88e6xxx_pvt_map(struct mv88e6xxx_chip *chip, int dev, int port)
* FORWARD frames, which use the LAG ID as the
* source port, we must translate dev/port to
* the special "LAG device" in the PVT, using
- * the LAG ID as the port number.
+ * the LAG ID (one-based) as the port number
+ * (zero-based).
*/
dev = MV88E6XXX_G2_PVT_ADDR_DEV_TRUNK;
- port = dsa_lag_id(dst, dp->lag_dev);
+ port = dsa_lag_id(dst, dp->lag_dev) - 1;
}
}
@@ -6186,7 +6187,7 @@ static bool mv88e6xxx_lag_can_offload(struct dsa_switch *ds,
return false;
id = dsa_lag_id(ds->dst, lag_dev);
- if (id < 0 || id >= ds->num_lag_ids)
+ if (id <= 0 || id > ds->num_lag_ids)
return false;
dsa_lag_foreach_port(dp, ds->dst, lag_dev)
@@ -6217,7 +6218,8 @@ static int mv88e6xxx_lag_sync_map(struct dsa_switch *ds,
u16 map = 0;
int id;
- id = dsa_lag_id(ds->dst, lag_dev);
+ /* DSA LAG IDs are one-based, hardware is zero-based */
+ id = dsa_lag_id(ds->dst, lag_dev) - 1;
/* Build the map of all ports to distribute flows destined for
* this LAG. This can be either a local user port, or a DSA
@@ -6361,7 +6363,8 @@ static int mv88e6xxx_port_lag_join(struct dsa_switch *ds, int port,
if (!mv88e6xxx_lag_can_offload(ds, lag_dev, info))
return -EOPNOTSUPP;
- id = dsa_lag_id(ds->dst, lag_dev);
+ /* DSA LAG IDs are one-based */
+ id = dsa_lag_id(ds->dst, lag_dev) - 1;
mv88e6xxx_reg_lock(chip);
diff --git a/drivers/net/dsa/qca8k.c b/drivers/net/dsa/qca8k.c
index 5691d193aa71..ed55e9357c2b 100644
--- a/drivers/net/dsa/qca8k.c
+++ b/drivers/net/dsa/qca8k.c
@@ -2654,7 +2654,7 @@ qca8k_lag_can_offload(struct dsa_switch *ds,
int id, members = 0;
id = dsa_lag_id(ds->dst, lag_dev);
- if (id < 0 || id >= ds->num_lag_ids)
+ if (id <= 0 || id > ds->num_lag_ids)
return false;
dsa_lag_foreach_port(dp, ds->dst, lag_dev)
@@ -2732,7 +2732,8 @@ qca8k_lag_refresh_portmap(struct dsa_switch *ds, int port,
int ret, id, i;
u32 val;
- id = dsa_lag_id(ds->dst, lag_dev);
+ /* DSA LAG IDs are one-based, hardware is zero-based */
+ id = dsa_lag_id(ds->dst, lag_dev) - 1;
/* Read current port member */
ret = regmap_read(priv->regmap, QCA8K_REG_GOL_TRUNK_CTRL0, &val);