* [PATCH net-next v2 0/3] net: dsa: allow phylink_mac_ops in DSA drivers
@ 2024-04-10 19:41 Russell King (Oracle)
2024-04-10 19:42 ` [PATCH net-next v2 1/3] net: dsa: introduce dsa_phylink_to_port() Russell King (Oracle)
` (3 more replies)
0 siblings, 4 replies; 10+ messages in thread
From: Russell King (Oracle) @ 2024-04-10 19:41 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.
This converts mv88e6xxx. I have similar patches for other DSA drivers
that will be sent once this has been reviewed.
RFC->v1: fix up patch 2 to call the mac_link_down() method as pointed out
by Vladimir
v2: add checks for phylink_mac_* and adjust_link methods in dsa_switch_ops
if phylink_mac_ops is populated. Simplify dsa_shared_port_link_down().
drivers/net/dsa/mv88e6xxx/chip.c | 63 +++++++++++++++++++++++++---------------
include/net/dsa.h | 11 +++++++
net/dsa/dsa.c | 11 +++++++
net/dsa/port.c | 38 ++++++++++++++++--------
4 files changed, 87 insertions(+), 36 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] 10+ messages in thread
* [PATCH net-next v2 1/3] net: dsa: introduce dsa_phylink_to_port()
2024-04-10 19:41 [PATCH net-next v2 0/3] net: dsa: allow phylink_mac_ops in DSA drivers Russell King (Oracle)
@ 2024-04-10 19:42 ` Russell King (Oracle)
2024-04-11 11:56 ` Vladimir Oltean
2024-04-10 19:42 ` [PATCH net-next v2 2/3] net: dsa: allow DSA switch drivers to provide their own phylink mac ops Russell King (Oracle)
` (2 subsequent siblings)
3 siblings, 1 reply; 10+ messages in thread
From: Russell King (Oracle) @ 2024-04-10 19:42 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.
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
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] 10+ messages in thread
* [PATCH net-next v2 2/3] net: dsa: allow DSA switch drivers to provide their own phylink mac ops
2024-04-10 19:41 [PATCH net-next v2 0/3] net: dsa: allow phylink_mac_ops in DSA drivers Russell King (Oracle)
2024-04-10 19:42 ` [PATCH net-next v2 1/3] net: dsa: introduce dsa_phylink_to_port() Russell King (Oracle)
@ 2024-04-10 19:42 ` Russell King (Oracle)
2024-04-11 12:01 ` Vladimir Oltean
2024-04-11 17:07 ` Florian Fainelli
2024-04-10 19:42 ` [PATCH net-next v2 3/3] net: dsa: mv88e6xxx: provide own phylink MAC operations Russell King (Oracle)
2024-04-12 3:10 ` [PATCH net-next v2 0/3] net: dsa: allow phylink_mac_ops in DSA drivers patchwork-bot+netdevbpf
3 siblings, 2 replies; 10+ messages in thread
From: Russell King (Oracle) @ 2024-04-10 19:42 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. When a
DSA driver provides the phylink MAC operations, the shimmed ops must
not be provided, so fail an attempt to register a switch with both
the phylink_mac_ops in struct dsa_switch and the phylink_mac_*
operations populated in dsa_switch_ops populated.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
include/net/dsa.h | 5 +++++
net/dsa/dsa.c | 11 +++++++++++
net/dsa/port.c | 26 ++++++++++++++++++++------
3 files changed, 36 insertions(+), 6 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/dsa.c b/net/dsa/dsa.c
index 09d2f5d4b3dd..2f347cd37316 100644
--- a/net/dsa/dsa.c
+++ b/net/dsa/dsa.c
@@ -1505,6 +1505,17 @@ static int dsa_switch_probe(struct dsa_switch *ds)
if (!ds->num_ports)
return -EINVAL;
+ if (ds->phylink_mac_ops) {
+ if (ds->ops->phylink_mac_select_pcs ||
+ ds->ops->phylink_mac_prepare ||
+ ds->ops->phylink_mac_config ||
+ ds->ops->phylink_mac_finish ||
+ ds->ops->phylink_mac_link_down ||
+ ds->ops->phylink_mac_link_up ||
+ ds->ops->adjust_link)
+ return -EINVAL;
+ }
+
if (np) {
err = dsa_switch_parse_of(ds, np);
if (err)
diff --git a/net/dsa/port.c b/net/dsa/port.c
index 02bf1c306bdc..c6febc3d96d9 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);
@@ -1952,12 +1957,23 @@ static void dsa_shared_port_validate_of(struct dsa_port *dp,
dn, dsa_port_is_cpu(dp) ? "CPU" : "DSA", dp->index);
}
+static void dsa_shared_port_link_down(struct dsa_port *dp)
+{
+ struct dsa_switch *ds = dp->ds;
+
+ if (ds->phylink_mac_ops && ds->phylink_mac_ops->mac_link_down)
+ ds->phylink_mac_ops->mac_link_down(&dp->pl_config, MLO_AN_FIXED,
+ PHY_INTERFACE_MODE_NA);
+ else if (ds->ops->phylink_mac_link_down)
+ ds->ops->phylink_mac_link_down(ds, dp->index, MLO_AN_FIXED,
+ PHY_INTERFACE_MODE_NA);
+}
+
int dsa_shared_port_link_register_of(struct dsa_port *dp)
{
struct dsa_switch *ds = dp->ds;
bool missing_link_description;
bool missing_phy_mode;
- int port = dp->index;
dsa_shared_port_validate_of(dp, &missing_phy_mode,
&missing_link_description);
@@ -1973,9 +1989,7 @@ int dsa_shared_port_link_register_of(struct dsa_port *dp)
"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);
+ dsa_shared_port_link_down(dp);
return dsa_shared_port_phylink_register(dp);
}
--
2.30.2
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH net-next v2 3/3] net: dsa: mv88e6xxx: provide own phylink MAC operations
2024-04-10 19:41 [PATCH net-next v2 0/3] net: dsa: allow phylink_mac_ops in DSA drivers Russell King (Oracle)
2024-04-10 19:42 ` [PATCH net-next v2 1/3] net: dsa: introduce dsa_phylink_to_port() Russell King (Oracle)
2024-04-10 19:42 ` [PATCH net-next v2 2/3] net: dsa: allow DSA switch drivers to provide their own phylink mac ops Russell King (Oracle)
@ 2024-04-10 19:42 ` Russell King (Oracle)
2024-04-11 12:05 ` Vladimir Oltean
2024-04-11 17:07 ` Florian Fainelli
2024-04-12 3:10 ` [PATCH net-next v2 0/3] net: dsa: allow phylink_mac_ops in DSA drivers patchwork-bot+netdevbpf
3 siblings, 2 replies; 10+ messages in thread
From: Russell King (Oracle) @ 2024-04-10 19:42 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
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
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 c95787cb9086..e950a634a3c7 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);
}
@@ -6922,6 +6933,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,
@@ -6930,12 +6950,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,
@@ -7004,6 +7018,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] 10+ messages in thread
* Re: [PATCH net-next v2 1/3] net: dsa: introduce dsa_phylink_to_port()
2024-04-10 19:42 ` [PATCH net-next v2 1/3] net: dsa: introduce dsa_phylink_to_port() Russell King (Oracle)
@ 2024-04-11 11:56 ` Vladimir Oltean
0 siblings, 0 replies; 10+ messages in thread
From: Vladimir Oltean @ 2024-04-11 11:56 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 10, 2024 at 08:42:38PM +0100, Russell King (Oracle) wrote:
> We convert from a phylink_config struct to a dsa_port struct in many
> places, let's provide a helper for this.
>
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
> ---
dsa_user_phylink_fixed_state() was another candidate for this, but fine.
It can be handled separately, this is not a request to resend.
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH net-next v2 2/3] net: dsa: allow DSA switch drivers to provide their own phylink mac ops
2024-04-10 19:42 ` [PATCH net-next v2 2/3] net: dsa: allow DSA switch drivers to provide their own phylink mac ops Russell King (Oracle)
@ 2024-04-11 12:01 ` Vladimir Oltean
2024-04-11 17:07 ` Florian Fainelli
1 sibling, 0 replies; 10+ messages in thread
From: Vladimir Oltean @ 2024-04-11 12:01 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 10, 2024 at 08:42:43PM +0100, Russell King (Oracle) wrote:
> Rather than having a shim for each and every phylink MAC operation,
> allow DSA switch drivers to provide their own ops structure. When a
> DSA driver provides the phylink MAC operations, the shimmed ops must
> not be provided, so fail an attempt to register a switch with both
> the phylink_mac_ops in struct dsa_switch and the phylink_mac_*
> operations populated in dsa_switch_ops populated.
>
> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
> ---
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH net-next v2 3/3] net: dsa: mv88e6xxx: provide own phylink MAC operations
2024-04-10 19:42 ` [PATCH net-next v2 3/3] net: dsa: mv88e6xxx: provide own phylink MAC operations Russell King (Oracle)
@ 2024-04-11 12:05 ` Vladimir Oltean
2024-04-11 17:07 ` Florian Fainelli
1 sibling, 0 replies; 10+ messages in thread
From: Vladimir Oltean @ 2024-04-11 12:05 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 10, 2024 at 08:42:48PM +0100, Russell King (Oracle) wrote:
> Convert mv88e6xxx to provide its own phylink MAC operations, thus
> avoiding the shim layer in DSA's port.c
>
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
> ---
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH net-next v2 2/3] net: dsa: allow DSA switch drivers to provide their own phylink mac ops
2024-04-10 19:42 ` [PATCH net-next v2 2/3] net: dsa: allow DSA switch drivers to provide their own phylink mac ops Russell King (Oracle)
2024-04-11 12:01 ` Vladimir Oltean
@ 2024-04-11 17:07 ` Florian Fainelli
1 sibling, 0 replies; 10+ messages in thread
From: Florian Fainelli @ 2024-04-11 17:07 UTC (permalink / raw)
To: Russell King (Oracle), Andrew Lunn, Vladimir Oltean
Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, netdev,
Paolo Abeni
On 4/10/24 12:42, Russell King (Oracle) wrote:
> Rather than having a shim for each and every phylink MAC operation,
> allow DSA switch drivers to provide their own ops structure. When a
> DSA driver provides the phylink MAC operations, the shimmed ops must
> not be provided, so fail an attempt to register a switch with both
> the phylink_mac_ops in struct dsa_switch and the phylink_mac_*
> operations populated in dsa_switch_ops populated.
>
> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
--
Florian
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH net-next v2 3/3] net: dsa: mv88e6xxx: provide own phylink MAC operations
2024-04-10 19:42 ` [PATCH net-next v2 3/3] net: dsa: mv88e6xxx: provide own phylink MAC operations Russell King (Oracle)
2024-04-11 12:05 ` Vladimir Oltean
@ 2024-04-11 17:07 ` Florian Fainelli
1 sibling, 0 replies; 10+ messages in thread
From: Florian Fainelli @ 2024-04-11 17:07 UTC (permalink / raw)
To: Russell King (Oracle), Andrew Lunn, Vladimir Oltean
Cc: David S. Miller, Eric Dumazet, Jakub Kicinski, netdev,
Paolo Abeni
On 4/10/24 12:42, Russell King (Oracle) wrote:
> Convert mv88e6xxx to provide its own phylink MAC operations, thus
> avoiding the shim layer in DSA's port.c
>
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
> Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
--
Florian
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH net-next v2 0/3] net: dsa: allow phylink_mac_ops in DSA drivers
2024-04-10 19:41 [PATCH net-next v2 0/3] net: dsa: allow phylink_mac_ops in DSA drivers Russell King (Oracle)
` (2 preceding siblings ...)
2024-04-10 19:42 ` [PATCH net-next v2 3/3] net: dsa: mv88e6xxx: provide own phylink MAC operations Russell King (Oracle)
@ 2024-04-12 3:10 ` patchwork-bot+netdevbpf
3 siblings, 0 replies; 10+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-04-12 3:10 UTC (permalink / raw)
To: Russell King
Cc: andrew, olteanv, davem, edumazet, f.fainelli, kuba, netdev,
pabeni
Hello:
This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Wed, 10 Apr 2024 20:41:32 +0100 you wrote:
> 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.
>
> [...]
Here is the summary with links:
- [net-next,v2,1/3] net: dsa: introduce dsa_phylink_to_port()
https://git.kernel.org/netdev/net-next/c/dd0c9855b413
- [net-next,v2,2/3] net: dsa: allow DSA switch drivers to provide their own phylink mac ops
https://git.kernel.org/netdev/net-next/c/cae425cb43fe
- [net-next,v2,3/3] net: dsa: mv88e6xxx: provide own phylink MAC operations
https://git.kernel.org/netdev/net-next/c/0cb6da0c487d
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2024-04-12 3:10 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-04-10 19:41 [PATCH net-next v2 0/3] net: dsa: allow phylink_mac_ops in DSA drivers Russell King (Oracle)
2024-04-10 19:42 ` [PATCH net-next v2 1/3] net: dsa: introduce dsa_phylink_to_port() Russell King (Oracle)
2024-04-11 11:56 ` Vladimir Oltean
2024-04-10 19:42 ` [PATCH net-next v2 2/3] net: dsa: allow DSA switch drivers to provide their own phylink mac ops Russell King (Oracle)
2024-04-11 12:01 ` Vladimir Oltean
2024-04-11 17:07 ` Florian Fainelli
2024-04-10 19:42 ` [PATCH net-next v2 3/3] net: dsa: mv88e6xxx: provide own phylink MAC operations Russell King (Oracle)
2024-04-11 12:05 ` Vladimir Oltean
2024-04-11 17:07 ` Florian Fainelli
2024-04-12 3:10 ` [PATCH net-next v2 0/3] net: dsa: allow phylink_mac_ops in DSA drivers patchwork-bot+netdevbpf
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).