| From 4806968ca1e2ed85d6b1ba853678d8c9045956f3 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 26 Apr 2021 18:17:34 +0200 |
| Subject: net: dsa: mv88e6xxx: Fix 6095/6097/6185 ports in non-SERDES CMODE |
| |
| From: Tobias Waldekranz <tobias@waldekranz.com> |
| |
| [ Upstream commit 6066234aa33850e9e35e7be82d92b9e9091e774b ] |
| |
| The .serdes_get_lane op used the magic value 0xff to indicate a valid |
| SERDES lane and 0 signaled that a non-SERDES mode was set on the port. |
| |
| Unfortunately, "0" is also a valid lane ID, so even when these ports |
| where configured to e.g. RGMII the driver would set them up as SERDES |
| ports. |
| |
| - Replace 0xff with 0 to indicate a valid lane ID. The number is on |
| the one hand just as arbitrary, but it is at least the first valid one |
| and therefore less of a surprise. |
| |
| - Follow the other .serdes_get_lane implementations and return -ENODEV |
| in the case where no SERDES is assigned to the port. |
| |
| Fixes: f5be107c3338 ("net: dsa: mv88e6xxx: Support serdes ports on MV88E6097/6095/6185") |
| Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com> |
| Reviewed-by: Andrew Lunn <andrew@lunn.ch> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/dsa/mv88e6xxx/serdes.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/net/dsa/mv88e6xxx/serdes.c b/drivers/net/dsa/mv88e6xxx/serdes.c |
| index 3195936dc5be..2ce04fef698d 100644 |
| --- a/drivers/net/dsa/mv88e6xxx/serdes.c |
| +++ b/drivers/net/dsa/mv88e6xxx/serdes.c |
| @@ -443,15 +443,15 @@ int mv88e6185_serdes_power(struct mv88e6xxx_chip *chip, int port, u8 lane, |
| u8 mv88e6185_serdes_get_lane(struct mv88e6xxx_chip *chip, int port) |
| { |
| /* There are no configurable serdes lanes on this switch chip but we |
| - * need to return non-zero so that callers of |
| + * need to return a non-negative lane number so that callers of |
| * mv88e6xxx_serdes_get_lane() know this is a serdes port. |
| */ |
| switch (chip->ports[port].cmode) { |
| case MV88E6185_PORT_STS_CMODE_SERDES: |
| case MV88E6185_PORT_STS_CMODE_1000BASE_X: |
| - return 0xff; |
| - default: |
| return 0; |
| + default: |
| + return -ENODEV; |
| } |
| } |
| |
| -- |
| 2.30.2 |
| |