mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 07:22:33 +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>
65 lines
2.5 KiB
Diff
65 lines
2.5 KiB
Diff
From 4f86eb098e18fd0f032877dfa1a7e8c1503ca409 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:41 +0200
|
|
Subject: [PATCH 1/6] net: dsa: mv88e6xxx: pass directly chip structure to
|
|
mv88e6xxx_phy_is_internal
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Since this function is a simple helper, we do not need to pass a full
|
|
dsa_switch structure, we can directly pass the mv88e6xxx_chip structure.
|
|
Doing so will allow to share this function with any other function
|
|
not manipulating dsa_switch structure but needing info about number of
|
|
internal phys
|
|
|
|
Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
|
|
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
|
|
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
|
|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|
---
|
|
drivers/net/dsa/mv88e6xxx/chip.c | 10 ++++------
|
|
1 file changed, 4 insertions(+), 6 deletions(-)
|
|
|
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
|
@@ -470,10 +470,8 @@ restore_link:
|
|
return err;
|
|
}
|
|
|
|
-static int mv88e6xxx_phy_is_internal(struct dsa_switch *ds, int port)
|
|
+static int mv88e6xxx_phy_is_internal(struct mv88e6xxx_chip *chip, int port)
|
|
{
|
|
- struct mv88e6xxx_chip *chip = ds->priv;
|
|
-
|
|
return port < chip->info->num_internal_phys;
|
|
}
|
|
|
|
@@ -591,7 +589,7 @@ static void mv88e6095_phylink_get_caps(s
|
|
|
|
config->mac_capabilities = MAC_SYM_PAUSE | MAC_10 | MAC_100;
|
|
|
|
- if (mv88e6xxx_phy_is_internal(chip->ds, port)) {
|
|
+ if (mv88e6xxx_phy_is_internal(chip, port)) {
|
|
__set_bit(PHY_INTERFACE_MODE_MII, config->supported_interfaces);
|
|
} else {
|
|
if (cmode < ARRAY_SIZE(mv88e6185_phy_interface_modes) &&
|
|
@@ -851,7 +849,7 @@ static void mv88e6xxx_get_caps(struct ds
|
|
chip->info->ops->phylink_get_caps(chip, port, config);
|
|
mv88e6xxx_reg_unlock(chip);
|
|
|
|
- if (mv88e6xxx_phy_is_internal(ds, port)) {
|
|
+ if (mv88e6xxx_phy_is_internal(chip, port)) {
|
|
__set_bit(PHY_INTERFACE_MODE_INTERNAL,
|
|
config->supported_interfaces);
|
|
/* Internal ports with no phy-mode need GMII for PHYLIB */
|
|
@@ -872,7 +870,7 @@ static void mv88e6xxx_mac_config(struct
|
|
|
|
mv88e6xxx_reg_lock(chip);
|
|
|
|
- if (mode != MLO_AN_PHY || !mv88e6xxx_phy_is_internal(ds, port)) {
|
|
+ if (mode != MLO_AN_PHY || !mv88e6xxx_phy_is_internal(chip, port)) {
|
|
/* In inband mode, the link may come up at any time while the
|
|
* link is not forced down. Force the link down while we
|
|
* reconfigure the interface mode.
|