mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-28 09:39:00 +00:00
2c0cec1eb0
The backports introduced in commit d40756563c
("kernel: backport
phylink changes from mainline Linux") broke the mv88e6xxx DSA driver.
A backport to fix this was added to the kirkwood target, but as it is
used in multiple targets, and there's a kmod package for it, the fix
should be in generic backports.
This fixes the switch on the WatchGuard Firebox M300 when running the
6.1 testing kernel.
There is no need to backport the fix for the 6.6 kernel, as it was
included in 6.6.5.
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
111 lines
4.1 KiB
Diff
111 lines
4.1 KiB
Diff
From cef945452c8468efce75ba0dc8420510a5b84af9 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Alexis=20Lothor=C3=A9?= <alexis.lothore@bootlin.com>
|
|
Date: Mon, 29 May 2023 10:02:45 +0200
|
|
Subject: [PATCH 5/6] net: dsa: mv88e6xxx: pass mv88e6xxx_chip structure to
|
|
port_max_speed_mode
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Some switches families have minor differences on supported link speed for
|
|
ports. Instead of redefining a new port_max_speed_mode for each different
|
|
configuration, allow to pass mv88e6xxx_chip structure to allow
|
|
differentiating those chips by known chip id
|
|
|
|
Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
|
|
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
---
|
|
drivers/net/dsa/mv88e6xxx/chip.c | 2 +-
|
|
drivers/net/dsa/mv88e6xxx/chip.h | 3 ++-
|
|
drivers/net/dsa/mv88e6xxx/port.c | 12 ++++++++----
|
|
drivers/net/dsa/mv88e6xxx/port.h | 12 ++++++++----
|
|
4 files changed, 19 insertions(+), 10 deletions(-)
|
|
|
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
|
@@ -3340,7 +3340,7 @@ static int mv88e6xxx_setup_port(struct m
|
|
caps = pl_config.mac_capabilities;
|
|
|
|
if (chip->info->ops->port_max_speed_mode)
|
|
- mode = chip->info->ops->port_max_speed_mode(port);
|
|
+ mode = chip->info->ops->port_max_speed_mode(chip, port);
|
|
else
|
|
mode = PHY_INTERFACE_MODE_NA;
|
|
|
|
--- a/drivers/net/dsa/mv88e6xxx/chip.h
|
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.h
|
|
@@ -508,7 +508,8 @@ struct mv88e6xxx_ops {
|
|
int speed, int duplex);
|
|
|
|
/* What interface mode should be used for maximum speed? */
|
|
- phy_interface_t (*port_max_speed_mode)(int port);
|
|
+ phy_interface_t (*port_max_speed_mode)(struct mv88e6xxx_chip *chip,
|
|
+ int port);
|
|
|
|
int (*port_tag_remap)(struct mv88e6xxx_chip *chip, int port);
|
|
|
|
--- a/drivers/net/dsa/mv88e6xxx/port.c
|
|
+++ b/drivers/net/dsa/mv88e6xxx/port.c
|
|
@@ -342,7 +342,8 @@ int mv88e6341_port_set_speed_duplex(stru
|
|
duplex);
|
|
}
|
|
|
|
-phy_interface_t mv88e6341_port_max_speed_mode(int port)
|
|
+phy_interface_t mv88e6341_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
|
+ int port)
|
|
{
|
|
if (port == 5)
|
|
return PHY_INTERFACE_MODE_2500BASEX;
|
|
@@ -381,7 +382,8 @@ int mv88e6390_port_set_speed_duplex(stru
|
|
duplex);
|
|
}
|
|
|
|
-phy_interface_t mv88e6390_port_max_speed_mode(int port)
|
|
+phy_interface_t mv88e6390_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
|
+ int port)
|
|
{
|
|
if (port == 9 || port == 10)
|
|
return PHY_INTERFACE_MODE_2500BASEX;
|
|
@@ -403,7 +405,8 @@ int mv88e6390x_port_set_speed_duplex(str
|
|
duplex);
|
|
}
|
|
|
|
-phy_interface_t mv88e6390x_port_max_speed_mode(int port)
|
|
+phy_interface_t mv88e6390x_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
|
+ int port)
|
|
{
|
|
if (port == 9 || port == 10)
|
|
return PHY_INTERFACE_MODE_XAUI;
|
|
@@ -500,7 +503,8 @@ int mv88e6393x_port_set_speed_duplex(str
|
|
return 0;
|
|
}
|
|
|
|
-phy_interface_t mv88e6393x_port_max_speed_mode(int port)
|
|
+phy_interface_t mv88e6393x_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
|
+ int port)
|
|
{
|
|
if (port == 0 || port == 9 || port == 10)
|
|
return PHY_INTERFACE_MODE_10GBASER;
|
|
--- a/drivers/net/dsa/mv88e6xxx/port.h
|
|
+++ b/drivers/net/dsa/mv88e6xxx/port.h
|
|
@@ -359,10 +359,14 @@ int mv88e6390x_port_set_speed_duplex(str
|
|
int mv88e6393x_port_set_speed_duplex(struct mv88e6xxx_chip *chip, int port,
|
|
int speed, int duplex);
|
|
|
|
-phy_interface_t mv88e6341_port_max_speed_mode(int port);
|
|
-phy_interface_t mv88e6390_port_max_speed_mode(int port);
|
|
-phy_interface_t mv88e6390x_port_max_speed_mode(int port);
|
|
-phy_interface_t mv88e6393x_port_max_speed_mode(int port);
|
|
+phy_interface_t mv88e6341_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
|
+ int port);
|
|
+phy_interface_t mv88e6390_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
|
+ int port);
|
|
+phy_interface_t mv88e6390x_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
|
+ int port);
|
|
+phy_interface_t mv88e6393x_port_max_speed_mode(struct mv88e6xxx_chip *chip,
|
|
+ int port);
|
|
|
|
int mv88e6xxx_port_set_state(struct mv88e6xxx_chip *chip, int port, u8 state);
|
|
|