* [PATCH RFC 0/3] net: dsa: allow phylink_mac_ops in DSA drivers
@ 2024-04-03 14:17 Russell King (Oracle)
2024-04-03 14:18 ` [PATCH RFC net-next 1/3] net: dsa: introduce dsa_phylink_to_port() Russell King (Oracle)
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Russell King (Oracle) @ 2024-04-03 14:17 UTC (permalink / raw)
To: Andrew Lunn, Vladimir Oltean
Cc: David S. Miller, Eric Dumazet, Florian Fainelli, Jakub Kicinski,
netdev, Paolo Abeni
Hi,
This series showcases my idea of moving the phylink_mac_ops into DSA
drivers, using mv88e6xxx as an example. Since I'm only changing one
driver, providing the mac_ops has to be optional and the existing shims
need to be kept for unconverted drivers.
The first patch introduces a new helper that converts from the
phylink_config structure that phylink uses to communicate with MAC
drivers to the dsa_port structure. From this, DSA drivers can get
the dsa_switch structure and thus their implementation specific
data structure, and they can also retrieve the port index.
The second patch adds the support to the core DSA layer to allow
DSA drivers to provide phylink_mac_ops.
The third patch converts mv88e6xxx to use this.
I initially made this change after adding yet more phylink to DSA
driver shims for my work with phylink-based EEE support, and decided
that it was getting silly to keep implementing more and more shims.
There are cases where shims don't work well - we had already tripped
over a case a few years ago when the phylink mac_select_pcs operation
was introduced. Phylink tested for the presence of this in the ops
structure, but with DSA shims, this doesn't necessarily mean that
the sub-driver supports this method. The only way to find that out
is to call the method with dummy values and check the return code.
The same thing was partly true when adding EEE support, and I ended
up with this in phylink to determine whether the MAC supported EEE:
+static bool phylink_mac_supports_eee(struct phylink *pl)
+{
+ return pl->mac_ops->mac_disable_tx_lpi &&
+ pl->mac_ops->mac_enable_tx_lpi &&
+ pl->config->lpi_capabilities;
+}
because merely testing for the presence of the operations is
insufficient when shims are involved - and it wasn't possible to call
these functions in the way that mac_select_pcs could be called.
So, I think it's time to get away from this shimming model and instead
have drivers directly interface to the various subsystems.
drivers/net/dsa/mv88e6xxx/chip.c | 63 +++++++++++++++++++++++++---------------
include/net/dsa.h | 11 +++++++
net/dsa/port.c | 21 +++++++++-----
3 files changed, 63 insertions(+), 32 deletions(-)
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH RFC net-next 1/3] net: dsa: introduce dsa_phylink_to_port()
2024-04-03 14:17 [PATCH RFC 0/3] net: dsa: allow phylink_mac_ops in DSA drivers Russell King (Oracle)
@ 2024-04-03 14:18 ` Russell King (Oracle)
2024-04-03 14:18 ` [PATCH RFC net-next 2/3] net: dsa: allow DSA switch drivers to provide their own phylink mac ops Russell King (Oracle)
2024-04-03 14:18 ` [PATCH RFC net-next 3/3] net: dsa: mv88e6xxx: provide own phylink MAC operations Russell King (Oracle)
2 siblings, 0 replies; 6+ messages in thread
From: Russell King (Oracle) @ 2024-04-03 14:18 UTC (permalink / raw)
To: Andrew Lunn, Vladimir Oltean
Cc: David S. Miller, Eric Dumazet, Florian Fainelli, Jakub Kicinski,
netdev, Paolo Abeni
We convert from a phylink_config struct to a dsa_port struct in many
places, let's provide a helper for this.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
include/net/dsa.h | 6 ++++++
net/dsa/port.c | 12 ++++++------
2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/include/net/dsa.h b/include/net/dsa.h
index 7c0da9effe4e..f228b479a5fd 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -327,6 +327,12 @@ struct dsa_port {
};
};
+static inline struct dsa_port *
+dsa_phylink_to_port(struct phylink_config *config)
+{
+ return container_of(config, struct dsa_port, pl_config);
+}
+
/* TODO: ideally DSA ports would have a single dp->link_dp member,
* and no dst->rtable nor this struct dsa_link would be needed,
* but this would require some more complex tree walking,
diff --git a/net/dsa/port.c b/net/dsa/port.c
index c42dac87671b..02bf1c306bdc 100644
--- a/net/dsa/port.c
+++ b/net/dsa/port.c
@@ -1558,7 +1558,7 @@ static struct phylink_pcs *
dsa_port_phylink_mac_select_pcs(struct phylink_config *config,
phy_interface_t interface)
{
- struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
+ struct dsa_port *dp = dsa_phylink_to_port(config);
struct phylink_pcs *pcs = ERR_PTR(-EOPNOTSUPP);
struct dsa_switch *ds = dp->ds;
@@ -1572,7 +1572,7 @@ static int dsa_port_phylink_mac_prepare(struct phylink_config *config,
unsigned int mode,
phy_interface_t interface)
{
- struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
+ struct dsa_port *dp = dsa_phylink_to_port(config);
struct dsa_switch *ds = dp->ds;
int err = 0;
@@ -1587,7 +1587,7 @@ static void dsa_port_phylink_mac_config(struct phylink_config *config,
unsigned int mode,
const struct phylink_link_state *state)
{
- struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
+ struct dsa_port *dp = dsa_phylink_to_port(config);
struct dsa_switch *ds = dp->ds;
if (!ds->ops->phylink_mac_config)
@@ -1600,7 +1600,7 @@ static int dsa_port_phylink_mac_finish(struct phylink_config *config,
unsigned int mode,
phy_interface_t interface)
{
- struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
+ struct dsa_port *dp = dsa_phylink_to_port(config);
struct dsa_switch *ds = dp->ds;
int err = 0;
@@ -1615,7 +1615,7 @@ static void dsa_port_phylink_mac_link_down(struct phylink_config *config,
unsigned int mode,
phy_interface_t interface)
{
- struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
+ struct dsa_port *dp = dsa_phylink_to_port(config);
struct phy_device *phydev = NULL;
struct dsa_switch *ds = dp->ds;
@@ -1638,7 +1638,7 @@ static void dsa_port_phylink_mac_link_up(struct phylink_config *config,
int speed, int duplex,
bool tx_pause, bool rx_pause)
{
- struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
+ struct dsa_port *dp = dsa_phylink_to_port(config);
struct dsa_switch *ds = dp->ds;
if (!ds->ops->phylink_mac_link_up) {
--
2.30.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH RFC net-next 2/3] net: dsa: allow DSA switch drivers to provide their own phylink mac ops
2024-04-03 14:17 [PATCH RFC 0/3] net: dsa: allow phylink_mac_ops in DSA drivers Russell King (Oracle)
2024-04-03 14:18 ` [PATCH RFC net-next 1/3] net: dsa: introduce dsa_phylink_to_port() Russell King (Oracle)
@ 2024-04-03 14:18 ` Russell King (Oracle)
2024-04-05 16:21 ` Vladimir Oltean
2024-04-03 14:18 ` [PATCH RFC net-next 3/3] net: dsa: mv88e6xxx: provide own phylink MAC operations Russell King (Oracle)
2 siblings, 1 reply; 6+ messages in thread
From: Russell King (Oracle) @ 2024-04-03 14:18 UTC (permalink / raw)
To: Andrew Lunn, Vladimir Oltean
Cc: David S. Miller, Eric Dumazet, Florian Fainelli, Jakub Kicinski,
netdev, Paolo Abeni
Rather than having a shim for each and every phylink MAC operation,
allow DSA switch drivers to provide their own ops structure.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
include/net/dsa.h | 5 +++++
net/dsa/port.c | 9 +++++++--
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/include/net/dsa.h b/include/net/dsa.h
index f228b479a5fd..7edfd8de8882 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -457,6 +457,11 @@ struct dsa_switch {
*/
const struct dsa_switch_ops *ops;
+ /*
+ * Allow a DSA switch driver to override the phylink MAC ops
+ */
+ const struct phylink_mac_ops *phylink_mac_ops;
+
/*
* User mii_bus and devices for the individual ports.
*/
diff --git a/net/dsa/port.c b/net/dsa/port.c
index 02bf1c306bdc..4cafbc505009 100644
--- a/net/dsa/port.c
+++ b/net/dsa/port.c
@@ -1662,6 +1662,7 @@ static const struct phylink_mac_ops dsa_port_phylink_mac_ops = {
int dsa_port_phylink_create(struct dsa_port *dp)
{
+ const struct phylink_mac_ops *mac_ops;
struct dsa_switch *ds = dp->ds;
phy_interface_t mode;
struct phylink *pl;
@@ -1685,8 +1686,12 @@ int dsa_port_phylink_create(struct dsa_port *dp)
}
}
- pl = phylink_create(&dp->pl_config, of_fwnode_handle(dp->dn),
- mode, &dsa_port_phylink_mac_ops);
+ mac_ops = &dsa_port_phylink_mac_ops;
+ if (ds->phylink_mac_ops)
+ mac_ops = ds->phylink_mac_ops;
+
+ pl = phylink_create(&dp->pl_config, of_fwnode_handle(dp->dn), mode,
+ mac_ops);
if (IS_ERR(pl)) {
pr_err("error creating PHYLINK: %ld\n", PTR_ERR(pl));
return PTR_ERR(pl);
--
2.30.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH RFC net-next 3/3] net: dsa: mv88e6xxx: provide own phylink MAC operations
2024-04-03 14:17 [PATCH RFC 0/3] net: dsa: allow phylink_mac_ops in DSA drivers Russell King (Oracle)
2024-04-03 14:18 ` [PATCH RFC net-next 1/3] net: dsa: introduce dsa_phylink_to_port() Russell King (Oracle)
2024-04-03 14:18 ` [PATCH RFC net-next 2/3] net: dsa: allow DSA switch drivers to provide their own phylink mac ops Russell King (Oracle)
@ 2024-04-03 14:18 ` Russell King (Oracle)
2 siblings, 0 replies; 6+ messages in thread
From: Russell King (Oracle) @ 2024-04-03 14:18 UTC (permalink / raw)
To: Andrew Lunn, Vladimir Oltean
Cc: David S. Miller, Eric Dumazet, Florian Fainelli, Jakub Kicinski,
netdev, Paolo Abeni
Convert mv88e6xxx to provide its own phylink MAC operations, thus
avoiding the shim layer in DSA's port.c
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/dsa/mv88e6xxx/chip.c | 63 ++++++++++++++++++++------------
1 file changed, 39 insertions(+), 24 deletions(-)
diff --git a/drivers/net/dsa/mv88e6xxx/chip.c b/drivers/net/dsa/mv88e6xxx/chip.c
index 9ed1821184ec..2ba7cbea451f 100644
--- a/drivers/net/dsa/mv88e6xxx/chip.c
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
@@ -790,24 +790,27 @@ static void mv88e6xxx_get_caps(struct dsa_switch *ds, int port,
}
}
-static struct phylink_pcs *mv88e6xxx_mac_select_pcs(struct dsa_switch *ds,
- int port,
- phy_interface_t interface)
+static struct phylink_pcs *
+mv88e6xxx_mac_select_pcs(struct phylink_config *config,
+ phy_interface_t interface)
{
- struct mv88e6xxx_chip *chip = ds->priv;
+ struct dsa_port *dp = dsa_phylink_to_port(config);
+ struct mv88e6xxx_chip *chip = dp->ds->priv;
struct phylink_pcs *pcs = ERR_PTR(-EOPNOTSUPP);
if (chip->info->ops->pcs_ops)
- pcs = chip->info->ops->pcs_ops->pcs_select(chip, port,
+ pcs = chip->info->ops->pcs_ops->pcs_select(chip, dp->index,
interface);
return pcs;
}
-static int mv88e6xxx_mac_prepare(struct dsa_switch *ds, int port,
+static int mv88e6xxx_mac_prepare(struct phylink_config *config,
unsigned int mode, phy_interface_t interface)
{
- struct mv88e6xxx_chip *chip = ds->priv;
+ struct dsa_port *dp = dsa_phylink_to_port(config);
+ struct mv88e6xxx_chip *chip = dp->ds->priv;
+ int port = dp->index;
int err = 0;
/* In inband mode, the link may come up at any time while the link
@@ -826,11 +829,13 @@ static int mv88e6xxx_mac_prepare(struct dsa_switch *ds, int port,
return err;
}
-static void mv88e6xxx_mac_config(struct dsa_switch *ds, int port,
+static void mv88e6xxx_mac_config(struct phylink_config *config,
unsigned int mode,
const struct phylink_link_state *state)
{
- struct mv88e6xxx_chip *chip = ds->priv;
+ struct dsa_port *dp = dsa_phylink_to_port(config);
+ struct mv88e6xxx_chip *chip = dp->ds->priv;
+ int port = dp->index;
int err = 0;
mv88e6xxx_reg_lock(chip);
@@ -846,13 +851,15 @@ static void mv88e6xxx_mac_config(struct dsa_switch *ds, int port,
mv88e6xxx_reg_unlock(chip);
if (err && err != -EOPNOTSUPP)
- dev_err(ds->dev, "p%d: failed to configure MAC/PCS\n", port);
+ dev_err(chip->dev, "p%d: failed to configure MAC/PCS\n", port);
}
-static int mv88e6xxx_mac_finish(struct dsa_switch *ds, int port,
+static int mv88e6xxx_mac_finish(struct phylink_config *config,
unsigned int mode, phy_interface_t interface)
{
- struct mv88e6xxx_chip *chip = ds->priv;
+ struct dsa_port *dp = dsa_phylink_to_port(config);
+ struct mv88e6xxx_chip *chip = dp->ds->priv;
+ int port = dp->index;
int err = 0;
/* Undo the forced down state above after completing configuration
@@ -876,12 +883,14 @@ static int mv88e6xxx_mac_finish(struct dsa_switch *ds, int port,
return err;
}
-static void mv88e6xxx_mac_link_down(struct dsa_switch *ds, int port,
+static void mv88e6xxx_mac_link_down(struct phylink_config *config,
unsigned int mode,
phy_interface_t interface)
{
- struct mv88e6xxx_chip *chip = ds->priv;
+ struct dsa_port *dp = dsa_phylink_to_port(config);
+ struct mv88e6xxx_chip *chip = dp->ds->priv;
const struct mv88e6xxx_ops *ops;
+ int port = dp->index;
int err = 0;
ops = chip->info->ops;
@@ -904,14 +913,16 @@ static void mv88e6xxx_mac_link_down(struct dsa_switch *ds, int port,
"p%d: failed to force MAC link down\n", port);
}
-static void mv88e6xxx_mac_link_up(struct dsa_switch *ds, int port,
- unsigned int mode, phy_interface_t interface,
+static void mv88e6xxx_mac_link_up(struct phylink_config *config,
struct phy_device *phydev,
+ unsigned int mode, phy_interface_t interface,
int speed, int duplex,
bool tx_pause, bool rx_pause)
{
- struct mv88e6xxx_chip *chip = ds->priv;
+ struct dsa_port *dp = dsa_phylink_to_port(config);
+ struct mv88e6xxx_chip *chip = dp->ds->priv;
const struct mv88e6xxx_ops *ops;
+ int port = dp->index;
int err = 0;
ops = chip->info->ops;
@@ -937,7 +948,7 @@ static void mv88e6xxx_mac_link_up(struct dsa_switch *ds, int port,
mv88e6xxx_reg_unlock(chip);
if (err && err != -EOPNOTSUPP)
- dev_err(ds->dev,
+ dev_err(chip->dev,
"p%d: failed to configure MAC link up\n", port);
}
@@ -6918,6 +6929,15 @@ static int mv88e6xxx_crosschip_lag_leave(struct dsa_switch *ds, int sw_index,
return err_sync ? : err_pvt;
}
+static const struct phylink_mac_ops mv88e6xxx_phylink_mac_ops = {
+ .mac_select_pcs = mv88e6xxx_mac_select_pcs,
+ .mac_prepare = mv88e6xxx_mac_prepare,
+ .mac_config = mv88e6xxx_mac_config,
+ .mac_finish = mv88e6xxx_mac_finish,
+ .mac_link_down = mv88e6xxx_mac_link_down,
+ .mac_link_up = mv88e6xxx_mac_link_up,
+};
+
static const struct dsa_switch_ops mv88e6xxx_switch_ops = {
.get_tag_protocol = mv88e6xxx_get_tag_protocol,
.change_tag_protocol = mv88e6xxx_change_tag_protocol,
@@ -6926,12 +6946,6 @@ static const struct dsa_switch_ops mv88e6xxx_switch_ops = {
.port_setup = mv88e6xxx_port_setup,
.port_teardown = mv88e6xxx_port_teardown,
.phylink_get_caps = mv88e6xxx_get_caps,
- .phylink_mac_select_pcs = mv88e6xxx_mac_select_pcs,
- .phylink_mac_prepare = mv88e6xxx_mac_prepare,
- .phylink_mac_config = mv88e6xxx_mac_config,
- .phylink_mac_finish = mv88e6xxx_mac_finish,
- .phylink_mac_link_down = mv88e6xxx_mac_link_down,
- .phylink_mac_link_up = mv88e6xxx_mac_link_up,
.get_strings = mv88e6xxx_get_strings,
.get_ethtool_stats = mv88e6xxx_get_ethtool_stats,
.get_eth_mac_stats = mv88e6xxx_get_eth_mac_stats,
@@ -7000,6 +7014,7 @@ static int mv88e6xxx_register_switch(struct mv88e6xxx_chip *chip)
ds->priv = chip;
ds->dev = dev;
ds->ops = &mv88e6xxx_switch_ops;
+ ds->phylink_mac_ops = &mv88e6xxx_phylink_mac_ops;
ds->ageing_time_min = chip->info->age_time_coeff;
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
--
2.30.2
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH RFC net-next 2/3] net: dsa: allow DSA switch drivers to provide their own phylink mac ops
2024-04-03 14:18 ` [PATCH RFC net-next 2/3] net: dsa: allow DSA switch drivers to provide their own phylink mac ops Russell King (Oracle)
@ 2024-04-05 16:21 ` Vladimir Oltean
2024-04-05 16:23 ` Russell King (Oracle)
0 siblings, 1 reply; 6+ messages in thread
From: Vladimir Oltean @ 2024-04-05 16:21 UTC (permalink / raw)
To: Russell King (Oracle)
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, netdev, Paolo Abeni
On Wed, Apr 03, 2024 at 03:18:41PM +0100, Russell King (Oracle) wrote:
> diff --git a/net/dsa/port.c b/net/dsa/port.c
> index 02bf1c306bdc..4cafbc505009 100644
> --- a/net/dsa/port.c
> +++ b/net/dsa/port.c
> @@ -1662,6 +1662,7 @@ static const struct phylink_mac_ops dsa_port_phylink_mac_ops = {
>
> int dsa_port_phylink_create(struct dsa_port *dp)
> {
> + const struct phylink_mac_ops *mac_ops;
> struct dsa_switch *ds = dp->ds;
> phy_interface_t mode;
> struct phylink *pl;
> @@ -1685,8 +1686,12 @@ int dsa_port_phylink_create(struct dsa_port *dp)
> }
> }
>
> - pl = phylink_create(&dp->pl_config, of_fwnode_handle(dp->dn),
> - mode, &dsa_port_phylink_mac_ops);
> + mac_ops = &dsa_port_phylink_mac_ops;
> + if (ds->phylink_mac_ops)
> + mac_ops = ds->phylink_mac_ops;
> +
> + pl = phylink_create(&dp->pl_config, of_fwnode_handle(dp->dn), mode,
> + mac_ops);
> if (IS_ERR(pl)) {
> pr_err("error creating PHYLINK: %ld\n", PTR_ERR(pl));
> return PTR_ERR(pl);
> --
> 2.30.2
>
This is not sufficient. We will have to make DSA call the driver through
the mac_ops it provides, rather than through ds->ops, here:
dsa_shared_port_link_register_of()
if (!ds->ops->adjust_link) {
if (missing_link_description) {
dev_warn(ds->dev,
"Skipping phylink registration for %s port %d\n",
dsa_port_is_cpu(dp) ? "CPU" : "DSA", dp->index);
} else {
if (ds->ops->phylink_mac_link_down)
ds->ops->phylink_mac_link_down(ds, port,
MLO_AN_FIXED, PHY_INTERFACE_MODE_NA);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
return dsa_shared_port_phylink_register(dp);
}
return 0;
}
Coincidentally mv88e6xxx is exactly one of those drivers which needs the
early mac_link_down() call that isn't driven by phylink.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH RFC net-next 2/3] net: dsa: allow DSA switch drivers to provide their own phylink mac ops
2024-04-05 16:21 ` Vladimir Oltean
@ 2024-04-05 16:23 ` Russell King (Oracle)
0 siblings, 0 replies; 6+ messages in thread
From: Russell King (Oracle) @ 2024-04-05 16:23 UTC (permalink / raw)
To: Vladimir Oltean
Cc: Andrew Lunn, David S. Miller, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, netdev, Paolo Abeni
On Fri, Apr 05, 2024 at 07:21:00PM +0300, Vladimir Oltean wrote:
> On Wed, Apr 03, 2024 at 03:18:41PM +0100, Russell King (Oracle) wrote:
> > diff --git a/net/dsa/port.c b/net/dsa/port.c
> > index 02bf1c306bdc..4cafbc505009 100644
> > --- a/net/dsa/port.c
> > +++ b/net/dsa/port.c
> > @@ -1662,6 +1662,7 @@ static const struct phylink_mac_ops dsa_port_phylink_mac_ops = {
> >
> > int dsa_port_phylink_create(struct dsa_port *dp)
> > {
> > + const struct phylink_mac_ops *mac_ops;
> > struct dsa_switch *ds = dp->ds;
> > phy_interface_t mode;
> > struct phylink *pl;
> > @@ -1685,8 +1686,12 @@ int dsa_port_phylink_create(struct dsa_port *dp)
> > }
> > }
> >
> > - pl = phylink_create(&dp->pl_config, of_fwnode_handle(dp->dn),
> > - mode, &dsa_port_phylink_mac_ops);
> > + mac_ops = &dsa_port_phylink_mac_ops;
> > + if (ds->phylink_mac_ops)
> > + mac_ops = ds->phylink_mac_ops;
> > +
> > + pl = phylink_create(&dp->pl_config, of_fwnode_handle(dp->dn), mode,
> > + mac_ops);
> > if (IS_ERR(pl)) {
> > pr_err("error creating PHYLINK: %ld\n", PTR_ERR(pl));
> > return PTR_ERR(pl);
> > --
> > 2.30.2
> >
>
> This is not sufficient. We will have to make DSA call the driver through
> the mac_ops it provides, rather than through ds->ops, here:
>
> dsa_shared_port_link_register_of()
>
> if (!ds->ops->adjust_link) {
> if (missing_link_description) {
> dev_warn(ds->dev,
> "Skipping phylink registration for %s port %d\n",
> dsa_port_is_cpu(dp) ? "CPU" : "DSA", dp->index);
> } else {
> if (ds->ops->phylink_mac_link_down)
> ds->ops->phylink_mac_link_down(ds, port,
> MLO_AN_FIXED, PHY_INTERFACE_MODE_NA);
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> return dsa_shared_port_phylink_register(dp);
> }
> return 0;
> }
>
> Coincidentally mv88e6xxx is exactly one of those drivers which needs the
> early mac_link_down() call that isn't driven by phylink.
Thanks for the review, I'd forgotten that this path exists!
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-04-05 16:24 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-03 14:17 [PATCH RFC 0/3] net: dsa: allow phylink_mac_ops in DSA drivers Russell King (Oracle)
2024-04-03 14:18 ` [PATCH RFC net-next 1/3] net: dsa: introduce dsa_phylink_to_port() Russell King (Oracle)
2024-04-03 14:18 ` [PATCH RFC net-next 2/3] net: dsa: allow DSA switch drivers to provide their own phylink mac ops Russell King (Oracle)
2024-04-05 16:21 ` Vladimir Oltean
2024-04-05 16:23 ` Russell King (Oracle)
2024-04-03 14:18 ` [PATCH RFC net-next 3/3] net: dsa: mv88e6xxx: provide own phylink MAC operations Russell King (Oracle)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).