* [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1
@ 2024-10-01 16:02 Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config() Russell King (Oracle)
` (11 more replies)
0 siblings, 12 replies; 24+ messages in thread
From: Russell King (Oracle) @ 2024-10-01 16:02 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: Alexandre Torgue, David S. Miller, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Jiawen Wu, Jose Abreu, Jose Abreu,
linux-arm-kernel, linux-stm32, Maxime Coquelin, Mengyuan Lou,
netdev, Paolo Abeni, Vladimir Oltean
Hi,
First, sorry for the bland series subject - this is the first in a
number of cleanup series to the XPCS driver. This series has some
functional changes beyond merely cleanups, notably the first patch.
This series starts off with a patch that moves the PCS reset from
the xpcs_create*() family of calls to when phylink first configures
the PHY. The motivation for this change is to get rid of the
interface argument to the xpcs_create*() functions, which I see as
unnecessary complexity. This patch should be tested on Wangxun
and STMMAC drivers.
Patch 2 removes the now unnecessary interface argument from the
internal xpcs_create() and xpcs_init_iface() functions. With this,
xpcs_init_iface() becomes a misnamed function, but patch 3 removes
this function, moving its now meager contents to xpcs_create().
Patch 4 adds xpcs_destroy_pcs() and xpcs_create_pcs_mdiodev()
functions which return and take a phylink_pcs, allowing SJA1105
and Wangxun drivers to be converted to using the phylink_pcs
structure internally.
Patches 5 through 8 convert both these drivers to that end.
Patch 9 drops the interface argument from the remaining xpcs_create*()
functions, addressing the only remaining caller of these functions,
that being the STMMAC driver.
As patch 7 removed the direct calls to the XPCS config/link-up
functions, the last patch makes these functions static.
drivers/net/dsa/sja1105/sja1105.h | 2 +-
drivers/net/dsa/sja1105/sja1105_main.c | 85 ++++++++++----------
drivers/net/dsa/sja1105/sja1105_mdio.c | 28 ++++---
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 7 +-
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c | 18 ++---
drivers/net/ethernet/wangxun/txgbe/txgbe_type.h | 2 +-
drivers/net/pcs/pcs-xpcs.c | 92 ++++++++++++++---------
include/linux/pcs/pcs-xpcs.h | 14 ++--
8 files changed, 132 insertions(+), 116 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] 24+ messages in thread
* [PATCH net-next 01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config()
2024-10-01 16:02 [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1 Russell King (Oracle)
@ 2024-10-01 16:04 ` Russell King (Oracle)
2024-10-01 20:34 ` Serge Semin
2024-10-01 16:04 ` [PATCH net-next 02/10] net: pcs: xpcs: drop interface argument from internal functions Russell King (Oracle)
` (10 subsequent siblings)
11 siblings, 1 reply; 24+ messages in thread
From: Russell King (Oracle) @ 2024-10-01 16:04 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: Alexandre Torgue, David S. Miller, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Jiawen Wu, Jose Abreu, Jose Abreu,
linux-arm-kernel, linux-stm32, Maxime Coquelin, Mengyuan Lou,
netdev, Paolo Abeni, Vladimir Oltean
Move the PCS reset to .pcs_pre_config() rather than at creation time,
which means we call the reset function with the interface that we're
actually going to be using to talk to the downstream device.
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com> # sja1105
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/pcs/pcs-xpcs.c | 39 +++++++++++++++++++++++++++---------
include/linux/pcs/pcs-xpcs.h | 1 +
2 files changed, 30 insertions(+), 10 deletions(-)
diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c
index 82463f9d50c8..7c6c40ddf722 100644
--- a/drivers/net/pcs/pcs-xpcs.c
+++ b/drivers/net/pcs/pcs-xpcs.c
@@ -659,6 +659,30 @@ int xpcs_config_eee(struct dw_xpcs *xpcs, int mult_fact_100ns, int enable)
}
EXPORT_SYMBOL_GPL(xpcs_config_eee);
+static void xpcs_pre_config(struct phylink_pcs *pcs, phy_interface_t interface)
+{
+ struct dw_xpcs *xpcs = phylink_pcs_to_xpcs(pcs);
+ const struct dw_xpcs_compat *compat;
+ int ret;
+
+ if (!xpcs->need_reset)
+ return;
+
+ compat = xpcs_find_compat(xpcs->desc, interface);
+ if (!compat) {
+ dev_err(&xpcs->mdiodev->dev, "unsupported interface %s\n",
+ phy_modes(interface));
+ return;
+ }
+
+ ret = xpcs_soft_reset(xpcs, compat);
+ if (ret)
+ dev_err(&xpcs->mdiodev->dev, "soft reset failed: %pe\n",
+ ERR_PTR(ret));
+
+ xpcs->need_reset = false;
+}
+
static int xpcs_config_aneg_c37_sgmii(struct dw_xpcs *xpcs,
unsigned int neg_mode)
{
@@ -1365,6 +1389,7 @@ static const struct dw_xpcs_desc xpcs_desc_list[] = {
static const struct phylink_pcs_ops xpcs_phylink_ops = {
.pcs_validate = xpcs_validate,
+ .pcs_pre_config = xpcs_pre_config,
.pcs_config = xpcs_config,
.pcs_get_state = xpcs_get_state,
.pcs_an_restart = xpcs_an_restart,
@@ -1460,18 +1485,12 @@ static int xpcs_init_id(struct dw_xpcs *xpcs)
static int xpcs_init_iface(struct dw_xpcs *xpcs, phy_interface_t interface)
{
- const struct dw_xpcs_compat *compat;
-
- compat = xpcs_find_compat(xpcs->desc, interface);
- if (!compat)
- return -EINVAL;
-
- if (xpcs->info.pma == WX_TXGBE_XPCS_PMA_10G_ID) {
+ if (xpcs->info.pma == WX_TXGBE_XPCS_PMA_10G_ID)
xpcs->pcs.poll = false;
- return 0;
- }
+ else
+ xpcs->need_reset = true;
- return xpcs_soft_reset(xpcs, compat);
+ return 0;
}
static struct dw_xpcs *xpcs_create(struct mdio_device *mdiodev,
diff --git a/include/linux/pcs/pcs-xpcs.h b/include/linux/pcs/pcs-xpcs.h
index b4a4eb6c8866..fd75d0605bb6 100644
--- a/include/linux/pcs/pcs-xpcs.h
+++ b/include/linux/pcs/pcs-xpcs.h
@@ -61,6 +61,7 @@ struct dw_xpcs {
struct clk_bulk_data clks[DW_XPCS_NUM_CLKS];
struct phylink_pcs pcs;
phy_interface_t interface;
+ bool need_reset;
};
int xpcs_get_an_mode(struct dw_xpcs *xpcs, phy_interface_t interface);
--
2.30.2
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH net-next 02/10] net: pcs: xpcs: drop interface argument from internal functions
2024-10-01 16:02 [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1 Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config() Russell King (Oracle)
@ 2024-10-01 16:04 ` Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 03/10] net: pcs: xpcs: get rid of xpcs_init_iface() Russell King (Oracle)
` (9 subsequent siblings)
11 siblings, 0 replies; 24+ messages in thread
From: Russell King (Oracle) @ 2024-10-01 16:04 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: Alexandre Torgue, David S. Miller, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Jiawen Wu, Jose Abreu, Jose Abreu,
linux-arm-kernel, linux-stm32, Maxime Coquelin, Mengyuan Lou,
netdev, Paolo Abeni, Vladimir Oltean
Now that we no longer use the "interface" argument when creating the
XPCS sub-driver, remove it from xpcs_create() and xpcs_init_iface().
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/pcs/pcs-xpcs.c | 11 +++++------
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c
index 7c6c40ddf722..2d8cc3959b4c 100644
--- a/drivers/net/pcs/pcs-xpcs.c
+++ b/drivers/net/pcs/pcs-xpcs.c
@@ -1483,7 +1483,7 @@ static int xpcs_init_id(struct dw_xpcs *xpcs)
return 0;
}
-static int xpcs_init_iface(struct dw_xpcs *xpcs, phy_interface_t interface)
+static int xpcs_init_iface(struct dw_xpcs *xpcs)
{
if (xpcs->info.pma == WX_TXGBE_XPCS_PMA_10G_ID)
xpcs->pcs.poll = false;
@@ -1493,8 +1493,7 @@ static int xpcs_init_iface(struct dw_xpcs *xpcs, phy_interface_t interface)
return 0;
}
-static struct dw_xpcs *xpcs_create(struct mdio_device *mdiodev,
- phy_interface_t interface)
+static struct dw_xpcs *xpcs_create(struct mdio_device *mdiodev)
{
struct dw_xpcs *xpcs;
int ret;
@@ -1511,7 +1510,7 @@ static struct dw_xpcs *xpcs_create(struct mdio_device *mdiodev,
if (ret)
goto out_clear_clks;
- ret = xpcs_init_iface(xpcs, interface);
+ ret = xpcs_init_iface(xpcs);
if (ret)
goto out_clear_clks;
@@ -1546,7 +1545,7 @@ struct dw_xpcs *xpcs_create_mdiodev(struct mii_bus *bus, int addr,
if (IS_ERR(mdiodev))
return ERR_CAST(mdiodev);
- xpcs = xpcs_create(mdiodev, interface);
+ xpcs = xpcs_create(mdiodev);
/* xpcs_create() has taken a refcount on the mdiodev if it was
* successful. If xpcs_create() fails, this will free the mdio
@@ -1584,7 +1583,7 @@ struct dw_xpcs *xpcs_create_fwnode(struct fwnode_handle *fwnode,
if (!mdiodev)
return ERR_PTR(-EPROBE_DEFER);
- xpcs = xpcs_create(mdiodev, interface);
+ xpcs = xpcs_create(mdiodev);
/* xpcs_create() has taken a refcount on the mdiodev if it was
* successful. If xpcs_create() fails, this will free the mdio
--
2.30.2
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH net-next 03/10] net: pcs: xpcs: get rid of xpcs_init_iface()
2024-10-01 16:02 [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1 Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config() Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 02/10] net: pcs: xpcs: drop interface argument from internal functions Russell King (Oracle)
@ 2024-10-01 16:04 ` Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 04/10] net: pcs: xpcs: add xpcs_destroy_pcs() and xpcs_create_pcs_mdiodev() Russell King (Oracle)
` (8 subsequent siblings)
11 siblings, 0 replies; 24+ messages in thread
From: Russell King (Oracle) @ 2024-10-01 16:04 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: Alexandre Torgue, David S. Miller, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Jiawen Wu, Jose Abreu, Jose Abreu,
linux-arm-kernel, linux-stm32, Maxime Coquelin, Mengyuan Lou,
netdev, Paolo Abeni, Vladimir Oltean
xpcs_init_iface() no longer does anything with the interface mode, and
now merely does configuration related to the PMA ID. Move this back
into xpcs_create() as it doesn't warrant being a separate function
anymore.
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/pcs/pcs-xpcs.c | 17 ++++-------------
1 file changed, 4 insertions(+), 13 deletions(-)
diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c
index 2d8cc3959b4c..8765b01c0b5d 100644
--- a/drivers/net/pcs/pcs-xpcs.c
+++ b/drivers/net/pcs/pcs-xpcs.c
@@ -1483,16 +1483,6 @@ static int xpcs_init_id(struct dw_xpcs *xpcs)
return 0;
}
-static int xpcs_init_iface(struct dw_xpcs *xpcs)
-{
- if (xpcs->info.pma == WX_TXGBE_XPCS_PMA_10G_ID)
- xpcs->pcs.poll = false;
- else
- xpcs->need_reset = true;
-
- return 0;
-}
-
static struct dw_xpcs *xpcs_create(struct mdio_device *mdiodev)
{
struct dw_xpcs *xpcs;
@@ -1510,9 +1500,10 @@ static struct dw_xpcs *xpcs_create(struct mdio_device *mdiodev)
if (ret)
goto out_clear_clks;
- ret = xpcs_init_iface(xpcs);
- if (ret)
- goto out_clear_clks;
+ if (xpcs->info.pma == WX_TXGBE_XPCS_PMA_10G_ID)
+ xpcs->pcs.poll = false;
+ else
+ xpcs->need_reset = true;
return xpcs;
--
2.30.2
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH net-next 04/10] net: pcs: xpcs: add xpcs_destroy_pcs() and xpcs_create_pcs_mdiodev()
2024-10-01 16:02 [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1 Russell King (Oracle)
` (2 preceding siblings ...)
2024-10-01 16:04 ` [PATCH net-next 03/10] net: pcs: xpcs: get rid of xpcs_init_iface() Russell King (Oracle)
@ 2024-10-01 16:04 ` Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 05/10] net: wangxun: txgbe: use phylink_pcs internally Russell King (Oracle)
` (7 subsequent siblings)
11 siblings, 0 replies; 24+ messages in thread
From: Russell King (Oracle) @ 2024-10-01 16:04 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: Alexandre Torgue, David S. Miller, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Jiawen Wu, Jose Abreu, Jose Abreu,
linux-arm-kernel, linux-stm32, Maxime Coquelin, Mengyuan Lou,
netdev, Paolo Abeni, Vladimir Oltean
Provide xpcs create/destroy functions that return and take a phylink_pcs
pointer instead of an xpcs pointer. This will be used by drivers that
have been converted to use phylink_pcs pointers internally, rather than
dw_xpcs pointers.
As xpcs_create_mdiodev() no longer makes use of its interface argument,
pass PHY_INTERFACE_MODE_NA into xpcs_create_mdiodev() until it is
removed later in the series.
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/pcs/pcs-xpcs.c | 18 ++++++++++++++++++
include/linux/pcs/pcs-xpcs.h | 3 +++
2 files changed, 21 insertions(+)
diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c
index 8765b01c0b5d..9b61f97222b9 100644
--- a/drivers/net/pcs/pcs-xpcs.c
+++ b/drivers/net/pcs/pcs-xpcs.c
@@ -1550,6 +1550,18 @@ struct dw_xpcs *xpcs_create_mdiodev(struct mii_bus *bus, int addr,
}
EXPORT_SYMBOL_GPL(xpcs_create_mdiodev);
+struct phylink_pcs *xpcs_create_pcs_mdiodev(struct mii_bus *bus, int addr)
+{
+ struct dw_xpcs *xpcs;
+
+ xpcs = xpcs_create_mdiodev(bus, addr, PHY_INTERFACE_MODE_NA);
+ if (IS_ERR(xpcs))
+ return ERR_CAST(xpcs);
+
+ return &xpcs->pcs;
+}
+EXPORT_SYMBOL_GPL(xpcs_create_pcs_mdiodev);
+
/**
* xpcs_create_fwnode() - Create a DW xPCS instance from @fwnode
* @fwnode: fwnode handle poining to the DW XPCS device
@@ -1599,5 +1611,11 @@ void xpcs_destroy(struct dw_xpcs *xpcs)
}
EXPORT_SYMBOL_GPL(xpcs_destroy);
+void xpcs_destroy_pcs(struct phylink_pcs *pcs)
+{
+ xpcs_destroy(phylink_pcs_to_xpcs(pcs));
+}
+EXPORT_SYMBOL_GPL(xpcs_destroy_pcs);
+
MODULE_DESCRIPTION("Synopsys DesignWare XPCS library");
MODULE_LICENSE("GPL v2");
diff --git a/include/linux/pcs/pcs-xpcs.h b/include/linux/pcs/pcs-xpcs.h
index fd75d0605bb6..a4e2243ce647 100644
--- a/include/linux/pcs/pcs-xpcs.h
+++ b/include/linux/pcs/pcs-xpcs.h
@@ -78,4 +78,7 @@ struct dw_xpcs *xpcs_create_fwnode(struct fwnode_handle *fwnode,
phy_interface_t interface);
void xpcs_destroy(struct dw_xpcs *xpcs);
+struct phylink_pcs *xpcs_create_pcs_mdiodev(struct mii_bus *bus, int addr);
+void xpcs_destroy_pcs(struct phylink_pcs *pcs);
+
#endif /* __LINUX_PCS_XPCS_H */
--
2.30.2
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH net-next 05/10] net: wangxun: txgbe: use phylink_pcs internally
2024-10-01 16:02 [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1 Russell King (Oracle)
` (3 preceding siblings ...)
2024-10-01 16:04 ` [PATCH net-next 04/10] net: pcs: xpcs: add xpcs_destroy_pcs() and xpcs_create_pcs_mdiodev() Russell King (Oracle)
@ 2024-10-01 16:04 ` Russell King (Oracle)
2024-10-01 22:12 ` Andrew Lunn
2024-10-01 16:04 ` [PATCH net-next 06/10] net: dsa: sja1105: simplify static configuration reload Russell King (Oracle)
` (6 subsequent siblings)
11 siblings, 1 reply; 24+ messages in thread
From: Russell King (Oracle) @ 2024-10-01 16:04 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: Alexandre Torgue, David S. Miller, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Jiawen Wu, Jose Abreu, Jose Abreu,
linux-arm-kernel, linux-stm32, Maxime Coquelin, Mengyuan Lou,
netdev, Paolo Abeni, Vladimir Oltean
Use xpcs_create_pcs_mdiodev() to create the XPCS instance, storing
and using the phylink_pcs pointer internally, rather than dw_xpcs.
Use xpcs_destroy_pcs() to destroy the XPCS instance when we've
finished with it.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c | 18 +++++++++---------
.../net/ethernet/wangxun/txgbe/txgbe_type.h | 2 +-
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c
index 67b61afdde96..3dd89dafe7c7 100644
--- a/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c
+++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c
@@ -122,7 +122,7 @@ static int txgbe_pcs_write(struct mii_bus *bus, int addr, int devnum, int regnum
static int txgbe_mdio_pcs_init(struct txgbe *txgbe)
{
struct mii_bus *mii_bus;
- struct dw_xpcs *xpcs;
+ struct phylink_pcs *pcs;
struct pci_dev *pdev;
struct wx *wx;
int ret = 0;
@@ -147,11 +147,11 @@ static int txgbe_mdio_pcs_init(struct txgbe *txgbe)
if (ret)
return ret;
- xpcs = xpcs_create_mdiodev(mii_bus, 0, PHY_INTERFACE_MODE_10GBASER);
- if (IS_ERR(xpcs))
- return PTR_ERR(xpcs);
+ pcs = xpcs_create_pcs_mdiodev(mii_bus, 0);
+ if (IS_ERR(pcs))
+ return PTR_ERR(pcs);
- txgbe->xpcs = xpcs;
+ txgbe->pcs = pcs;
return 0;
}
@@ -163,7 +163,7 @@ static struct phylink_pcs *txgbe_phylink_mac_select(struct phylink_config *confi
struct txgbe *txgbe = wx->priv;
if (interface == PHY_INTERFACE_MODE_10GBASER)
- return &txgbe->xpcs->pcs;
+ return txgbe->pcs;
return NULL;
}
@@ -302,7 +302,7 @@ irqreturn_t txgbe_link_irq_handler(int irq, void *data)
status = rd32(wx, TXGBE_CFG_PORT_ST);
up = !!(status & TXGBE_CFG_PORT_ST_LINK_UP);
- phylink_pcs_change(&txgbe->xpcs->pcs, up);
+ phylink_pcs_change(txgbe->pcs, up);
return IRQ_HANDLED;
}
@@ -778,7 +778,7 @@ int txgbe_init_phy(struct txgbe *txgbe)
err_destroy_phylink:
phylink_destroy(wx->phylink);
err_destroy_xpcs:
- xpcs_destroy(txgbe->xpcs);
+ xpcs_destroy_pcs(txgbe->pcs);
err_unregister_swnode:
software_node_unregister_node_group(txgbe->nodes.group);
@@ -798,6 +798,6 @@ void txgbe_remove_phy(struct txgbe *txgbe)
clkdev_drop(txgbe->clock);
clk_unregister(txgbe->clk);
phylink_destroy(txgbe->wx->phylink);
- xpcs_destroy(txgbe->xpcs);
+ xpcs_destroy_pcs(txgbe->pcs);
software_node_unregister_node_group(txgbe->nodes.group);
}
diff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_type.h b/drivers/net/ethernet/wangxun/txgbe/txgbe_type.h
index 959102c4c379..cc3a7b62fe9e 100644
--- a/drivers/net/ethernet/wangxun/txgbe/txgbe_type.h
+++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_type.h
@@ -329,7 +329,7 @@ struct txgbe {
struct wx *wx;
struct txgbe_nodes nodes;
struct txgbe_irq misc;
- struct dw_xpcs *xpcs;
+ struct phylink_pcs *pcs;
struct platform_device *sfp_dev;
struct platform_device *i2c_dev;
struct clk_lookup *clock;
--
2.30.2
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH net-next 06/10] net: dsa: sja1105: simplify static configuration reload
2024-10-01 16:02 [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1 Russell King (Oracle)
` (4 preceding siblings ...)
2024-10-01 16:04 ` [PATCH net-next 05/10] net: wangxun: txgbe: use phylink_pcs internally Russell King (Oracle)
@ 2024-10-01 16:04 ` Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 07/10] net: dsa: sja1105: call PCS config/link_up via pcs_ops structure Russell King (Oracle)
` (5 subsequent siblings)
11 siblings, 0 replies; 24+ messages in thread
From: Russell King (Oracle) @ 2024-10-01 16:04 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: Alexandre Torgue, David S. Miller, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Jiawen Wu, Jose Abreu, Jose Abreu,
linux-arm-kernel, linux-stm32, Maxime Coquelin, Mengyuan Lou,
netdev, Paolo Abeni, Vladimir Oltean
The static configuration reload saves the port speed in the static
configuration tables by first converting it from the internal
respresentation to the SPEED_xxx ethtool representation, and then
converts it back to restore the setting. This is because
sja1105_adjust_port_config() takes the speed as SPEED_xxx.
However, this is unnecessarily complex. If we split
sja1105_adjust_port_config() up, we can simply save and restore the
mac[port].speed member in the static configuration tables.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
Changes since rfc:
- added () to function name
- fixed local variable order
drivers/net/dsa/sja1105/sja1105_main.c | 65 ++++++++++++++------------
1 file changed, 34 insertions(+), 31 deletions(-)
diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c
index bc7e50dcb57c..5481ccb921df 100644
--- a/drivers/net/dsa/sja1105/sja1105_main.c
+++ b/drivers/net/dsa/sja1105/sja1105_main.c
@@ -1257,29 +1257,11 @@ static int sja1105_parse_dt(struct sja1105_private *priv)
return rc;
}
-/* Convert link speed from SJA1105 to ethtool encoding */
-static int sja1105_port_speed_to_ethtool(struct sja1105_private *priv,
- u64 speed)
-{
- if (speed == priv->info->port_speed[SJA1105_SPEED_10MBPS])
- return SPEED_10;
- if (speed == priv->info->port_speed[SJA1105_SPEED_100MBPS])
- return SPEED_100;
- if (speed == priv->info->port_speed[SJA1105_SPEED_1000MBPS])
- return SPEED_1000;
- if (speed == priv->info->port_speed[SJA1105_SPEED_2500MBPS])
- return SPEED_2500;
- return SPEED_UNKNOWN;
-}
-
-/* Set link speed in the MAC configuration for a specific port. */
-static int sja1105_adjust_port_config(struct sja1105_private *priv, int port,
- int speed_mbps)
+static int sja1105_set_port_speed(struct sja1105_private *priv, int port,
+ int speed_mbps)
{
struct sja1105_mac_config_entry *mac;
- struct device *dev = priv->ds->dev;
u64 speed;
- int rc;
/* On P/Q/R/S, one can read from the device via the MAC reconfiguration
* tables. On E/T, MAC reconfig tables are not readable, only writable.
@@ -1313,7 +1295,7 @@ static int sja1105_adjust_port_config(struct sja1105_private *priv, int port,
speed = priv->info->port_speed[SJA1105_SPEED_2500MBPS];
break;
default:
- dev_err(dev, "Invalid speed %iMbps\n", speed_mbps);
+ dev_err(priv->ds->dev, "Invalid speed %iMbps\n", speed_mbps);
return -EINVAL;
}
@@ -1325,11 +1307,31 @@ static int sja1105_adjust_port_config(struct sja1105_private *priv, int port,
* we need to configure the PCS only (if even that).
*/
if (priv->phy_mode[port] == PHY_INTERFACE_MODE_SGMII)
- mac[port].speed = priv->info->port_speed[SJA1105_SPEED_1000MBPS];
+ speed = priv->info->port_speed[SJA1105_SPEED_1000MBPS];
else if (priv->phy_mode[port] == PHY_INTERFACE_MODE_2500BASEX)
- mac[port].speed = priv->info->port_speed[SJA1105_SPEED_2500MBPS];
- else
- mac[port].speed = speed;
+ speed = priv->info->port_speed[SJA1105_SPEED_2500MBPS];
+
+ mac[port].speed = speed;
+
+ return 0;
+}
+
+/* Write the MAC Configuration Table entry and, if necessary, the CGU settings,
+ * after a link speedchange for this port.
+ */
+static int sja1105_set_port_config(struct sja1105_private *priv, int port)
+{
+ struct sja1105_mac_config_entry *mac;
+ struct device *dev = priv->ds->dev;
+ int rc;
+
+ /* On P/Q/R/S, one can read from the device via the MAC reconfiguration
+ * tables. On E/T, MAC reconfig tables are not readable, only writable.
+ * We have to *know* what the MAC looks like. For the sake of keeping
+ * the code common, we'll use the static configuration tables as a
+ * reasonable approximation for both E/T and P/Q/R/S.
+ */
+ mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries;
/* Write to the dynamic reconfiguration tables */
rc = sja1105_dynamic_config_write(priv, BLK_IDX_MAC_CONFIG, port,
@@ -1390,7 +1392,8 @@ static void sja1105_mac_link_up(struct phylink_config *config,
struct sja1105_private *priv = dp->ds->priv;
int port = dp->index;
- sja1105_adjust_port_config(priv, port, speed);
+ if (!sja1105_set_port_speed(priv, port, speed))
+ sja1105_set_port_config(priv, port);
sja1105_inhibit_tx(priv, BIT(port), false);
}
@@ -2293,8 +2296,8 @@ int sja1105_static_config_reload(struct sja1105_private *priv,
{
struct ptp_system_timestamp ptp_sts_before;
struct ptp_system_timestamp ptp_sts_after;
- int speed_mbps[SJA1105_MAX_NUM_PORTS];
u16 bmcr[SJA1105_MAX_NUM_PORTS] = {0};
+ u64 mac_speed[SJA1105_MAX_NUM_PORTS];
struct sja1105_mac_config_entry *mac;
struct dsa_switch *ds = priv->ds;
s64 t1, t2, t3, t4;
@@ -2307,14 +2310,13 @@ int sja1105_static_config_reload(struct sja1105_private *priv,
mac = priv->static_config.tables[BLK_IDX_MAC_CONFIG].entries;
- /* Back up the dynamic link speed changed by sja1105_adjust_port_config
+ /* Back up the dynamic link speed changed by sja1105_set_port_speed()
* in order to temporarily restore it to SJA1105_SPEED_AUTO - which the
* switch wants to see in the static config in order to allow us to
* change it through the dynamic interface later.
*/
for (i = 0; i < ds->num_ports; i++) {
- speed_mbps[i] = sja1105_port_speed_to_ethtool(priv,
- mac[i].speed);
+ mac_speed[i] = mac[i].speed;
mac[i].speed = priv->info->port_speed[SJA1105_SPEED_AUTO];
if (priv->xpcs[i])
@@ -2377,7 +2379,8 @@ int sja1105_static_config_reload(struct sja1105_private *priv,
struct dw_xpcs *xpcs = priv->xpcs[i];
unsigned int neg_mode;
- rc = sja1105_adjust_port_config(priv, i, speed_mbps[i]);
+ mac[i].speed = mac_speed[i];
+ rc = sja1105_set_port_config(priv, i);
if (rc < 0)
goto out;
--
2.30.2
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH net-next 07/10] net: dsa: sja1105: call PCS config/link_up via pcs_ops structure
2024-10-01 16:02 [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1 Russell King (Oracle)
` (5 preceding siblings ...)
2024-10-01 16:04 ` [PATCH net-next 06/10] net: dsa: sja1105: simplify static configuration reload Russell King (Oracle)
@ 2024-10-01 16:04 ` Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 08/10] net: dsa: sja1105: use phylink_pcs internally Russell King (Oracle)
` (4 subsequent siblings)
11 siblings, 0 replies; 24+ messages in thread
From: Russell King (Oracle) @ 2024-10-01 16:04 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: Alexandre Torgue, David S. Miller, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Jiawen Wu, Jose Abreu, Jose Abreu,
linux-arm-kernel, linux-stm32, Maxime Coquelin, Mengyuan Lou,
netdev, Paolo Abeni, Vladimir Oltean
Call the PCS operations through the ops structure, which avoids needing
to export xpcs internal functions.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/dsa/sja1105/sja1105_main.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c
index 5481ccb921df..e5918ac862eb 100644
--- a/drivers/net/dsa/sja1105/sja1105_main.c
+++ b/drivers/net/dsa/sja1105/sja1105_main.c
@@ -2377,6 +2377,7 @@ int sja1105_static_config_reload(struct sja1105_private *priv,
for (i = 0; i < ds->num_ports; i++) {
struct dw_xpcs *xpcs = priv->xpcs[i];
+ struct phylink_pcs *pcs;
unsigned int neg_mode;
mac[i].speed = mac_speed[i];
@@ -2387,12 +2388,15 @@ int sja1105_static_config_reload(struct sja1105_private *priv,
if (!xpcs)
continue;
+ pcs = &xpcs->pcs;
+
if (bmcr[i] & BMCR_ANENABLE)
neg_mode = PHYLINK_PCS_NEG_INBAND_ENABLED;
else
neg_mode = PHYLINK_PCS_NEG_OUTBAND;
- rc = xpcs_do_config(xpcs, priv->phy_mode[i], NULL, neg_mode);
+ rc = pcs->ops->pcs_config(pcs, neg_mode, priv->phy_mode[i],
+ NULL, true);
if (rc < 0)
goto out;
@@ -2408,8 +2412,8 @@ int sja1105_static_config_reload(struct sja1105_private *priv,
else
speed = SPEED_10;
- xpcs_link_up(&xpcs->pcs, neg_mode, priv->phy_mode[i],
- speed, DUPLEX_FULL);
+ pcs->ops->pcs_link_up(pcs, neg_mode, priv->phy_mode[i],
+ speed, DUPLEX_FULL);
}
}
--
2.30.2
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH net-next 08/10] net: dsa: sja1105: use phylink_pcs internally
2024-10-01 16:02 [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1 Russell King (Oracle)
` (6 preceding siblings ...)
2024-10-01 16:04 ` [PATCH net-next 07/10] net: dsa: sja1105: call PCS config/link_up via pcs_ops structure Russell King (Oracle)
@ 2024-10-01 16:04 ` Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 09/10] net: pcs: xpcs: drop interface argument from xpcs_create*() Russell King (Oracle)
` (3 subsequent siblings)
11 siblings, 0 replies; 24+ messages in thread
From: Russell King (Oracle) @ 2024-10-01 16:04 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: Alexandre Torgue, David S. Miller, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Jiawen Wu, Jose Abreu, Jose Abreu,
linux-arm-kernel, linux-stm32, Maxime Coquelin, Mengyuan Lou,
netdev, Paolo Abeni, Vladimir Oltean
Use xpcs_create_pcs_mdiodev() to create the XPCS instance, storing
and using the phylink_pcs pointer internally, rather than dw_xpcs.
Use xpcs_destroy_pcs() to destroy the XPCS instance when we've
finished with it.
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/dsa/sja1105/sja1105.h | 2 +-
drivers/net/dsa/sja1105/sja1105_main.c | 16 ++++-----------
drivers/net/dsa/sja1105/sja1105_mdio.c | 28 ++++++++++++--------------
3 files changed, 18 insertions(+), 28 deletions(-)
diff --git a/drivers/net/dsa/sja1105/sja1105.h b/drivers/net/dsa/sja1105/sja1105.h
index 8c66d3bf61f0..dceb96ae9c83 100644
--- a/drivers/net/dsa/sja1105/sja1105.h
+++ b/drivers/net/dsa/sja1105/sja1105.h
@@ -278,7 +278,7 @@ struct sja1105_private {
struct mii_bus *mdio_base_t1;
struct mii_bus *mdio_base_tx;
struct mii_bus *mdio_pcs;
- struct dw_xpcs *xpcs[SJA1105_MAX_NUM_PORTS];
+ struct phylink_pcs *pcs[SJA1105_MAX_NUM_PORTS];
struct sja1105_ptp_data ptp_data;
struct sja1105_tas_data tas_data;
};
diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c
index e5918ac862eb..af38b8959d8d 100644
--- a/drivers/net/dsa/sja1105/sja1105_main.c
+++ b/drivers/net/dsa/sja1105/sja1105_main.c
@@ -15,7 +15,6 @@
#include <linux/of.h>
#include <linux/of_net.h>
#include <linux/of_mdio.h>
-#include <linux/pcs/pcs-xpcs.h>
#include <linux/netdev_features.h>
#include <linux/netdevice.h>
#include <linux/if_bridge.h>
@@ -1358,12 +1357,8 @@ sja1105_mac_select_pcs(struct phylink_config *config, phy_interface_t iface)
{
struct dsa_port *dp = dsa_phylink_to_port(config);
struct sja1105_private *priv = dp->ds->priv;
- struct dw_xpcs *xpcs = priv->xpcs[dp->index];
- if (xpcs)
- return &xpcs->pcs;
-
- return NULL;
+ return priv->pcs[dp->index];
}
static void sja1105_mac_config(struct phylink_config *config,
@@ -2319,7 +2314,7 @@ int sja1105_static_config_reload(struct sja1105_private *priv,
mac_speed[i] = mac[i].speed;
mac[i].speed = priv->info->port_speed[SJA1105_SPEED_AUTO];
- if (priv->xpcs[i])
+ if (priv->pcs[i])
bmcr[i] = mdiobus_c45_read(priv->mdio_pcs, i,
MDIO_MMD_VEND2, MDIO_CTRL1);
}
@@ -2376,8 +2371,7 @@ int sja1105_static_config_reload(struct sja1105_private *priv,
}
for (i = 0; i < ds->num_ports; i++) {
- struct dw_xpcs *xpcs = priv->xpcs[i];
- struct phylink_pcs *pcs;
+ struct phylink_pcs *pcs = priv->pcs[i];
unsigned int neg_mode;
mac[i].speed = mac_speed[i];
@@ -2385,11 +2379,9 @@ int sja1105_static_config_reload(struct sja1105_private *priv,
if (rc < 0)
goto out;
- if (!xpcs)
+ if (!pcs)
continue;
- pcs = &xpcs->pcs;
-
if (bmcr[i] & BMCR_ANENABLE)
neg_mode = PHYLINK_PCS_NEG_INBAND_ENABLED;
else
diff --git a/drivers/net/dsa/sja1105/sja1105_mdio.c b/drivers/net/dsa/sja1105/sja1105_mdio.c
index 52ddb4ef259e..84b7169f2974 100644
--- a/drivers/net/dsa/sja1105/sja1105_mdio.c
+++ b/drivers/net/dsa/sja1105/sja1105_mdio.c
@@ -400,7 +400,7 @@ static int sja1105_mdiobus_pcs_register(struct sja1105_private *priv)
}
for (port = 0; port < ds->num_ports; port++) {
- struct dw_xpcs *xpcs;
+ struct phylink_pcs *pcs;
if (dsa_is_unused_port(ds, port))
continue;
@@ -409,13 +409,13 @@ static int sja1105_mdiobus_pcs_register(struct sja1105_private *priv)
priv->phy_mode[port] != PHY_INTERFACE_MODE_2500BASEX)
continue;
- xpcs = xpcs_create_mdiodev(bus, port, priv->phy_mode[port]);
- if (IS_ERR(xpcs)) {
- rc = PTR_ERR(xpcs);
+ pcs = xpcs_create_pcs_mdiodev(bus, port);
+ if (IS_ERR(pcs)) {
+ rc = PTR_ERR(pcs);
goto out_pcs_free;
}
- priv->xpcs[port] = xpcs;
+ priv->pcs[port] = pcs;
}
priv->mdio_pcs = bus;
@@ -424,11 +424,10 @@ static int sja1105_mdiobus_pcs_register(struct sja1105_private *priv)
out_pcs_free:
for (port = 0; port < ds->num_ports; port++) {
- if (!priv->xpcs[port])
- continue;
-
- xpcs_destroy(priv->xpcs[port]);
- priv->xpcs[port] = NULL;
+ if (priv->pcs[port]) {
+ xpcs_destroy_pcs(priv->pcs[port]);
+ priv->pcs[port] = NULL;
+ }
}
mdiobus_unregister(bus);
@@ -446,11 +445,10 @@ static void sja1105_mdiobus_pcs_unregister(struct sja1105_private *priv)
return;
for (port = 0; port < ds->num_ports; port++) {
- if (!priv->xpcs[port])
- continue;
-
- xpcs_destroy(priv->xpcs[port]);
- priv->xpcs[port] = NULL;
+ if (priv->pcs[port]) {
+ xpcs_destroy_pcs(priv->pcs[port]);
+ priv->pcs[port] = NULL;
+ }
}
mdiobus_unregister(priv->mdio_pcs);
--
2.30.2
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH net-next 09/10] net: pcs: xpcs: drop interface argument from xpcs_create*()
2024-10-01 16:02 [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1 Russell King (Oracle)
` (7 preceding siblings ...)
2024-10-01 16:04 ` [PATCH net-next 08/10] net: dsa: sja1105: use phylink_pcs internally Russell King (Oracle)
@ 2024-10-01 16:04 ` Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 10/10] net: pcs: xpcs: make xpcs_do_config() and xpcs_link_up() internal Russell King (Oracle)
` (2 subsequent siblings)
11 siblings, 0 replies; 24+ messages in thread
From: Russell King (Oracle) @ 2024-10-01 16:04 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: Alexandre Torgue, David S. Miller, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Jiawen Wu, Jose Abreu, Jose Abreu,
linux-arm-kernel, linux-stm32, Maxime Coquelin, Mengyuan Lou,
netdev, Paolo Abeni, Vladimir Oltean
The XPCS sub-driver no longer uses the "interface" argument to the
xpcs_create_mdiodev() and xpcs_create_fwnode() functions. Remove
this now unnecessary argument, updating the stmmac driver
appropriately.
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 7 +++----
drivers/net/pcs/pcs-xpcs.c | 10 +++-------
include/linux/pcs/pcs-xpcs.h | 6 ++----
3 files changed, 8 insertions(+), 15 deletions(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
index 03f90676b3ad..0c7d81ddd440 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
@@ -500,23 +500,22 @@ int stmmac_pcs_setup(struct net_device *ndev)
struct fwnode_handle *devnode, *pcsnode;
struct dw_xpcs *xpcs = NULL;
struct stmmac_priv *priv;
- int addr, mode, ret;
+ int addr, ret;
priv = netdev_priv(ndev);
- mode = priv->plat->phy_interface;
devnode = priv->plat->port_node;
if (priv->plat->pcs_init) {
ret = priv->plat->pcs_init(priv);
} else if (fwnode_property_present(devnode, "pcs-handle")) {
pcsnode = fwnode_find_reference(devnode, "pcs-handle", 0);
- xpcs = xpcs_create_fwnode(pcsnode, mode);
+ xpcs = xpcs_create_fwnode(pcsnode);
fwnode_handle_put(pcsnode);
ret = PTR_ERR_OR_ZERO(xpcs);
} else if (priv->plat->mdio_bus_data &&
priv->plat->mdio_bus_data->pcs_mask) {
addr = ffs(priv->plat->mdio_bus_data->pcs_mask) - 1;
- xpcs = xpcs_create_mdiodev(priv->mii, addr, mode);
+ xpcs = xpcs_create_mdiodev(priv->mii, addr);
ret = PTR_ERR_OR_ZERO(xpcs);
} else {
return 0;
diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c
index 9b61f97222b9..f25e7afdfdf5 100644
--- a/drivers/net/pcs/pcs-xpcs.c
+++ b/drivers/net/pcs/pcs-xpcs.c
@@ -1520,14 +1520,12 @@ static struct dw_xpcs *xpcs_create(struct mdio_device *mdiodev)
* xpcs_create_mdiodev() - create a DW xPCS instance with the MDIO @addr
* @bus: pointer to the MDIO-bus descriptor for the device to be looked at
* @addr: device MDIO-bus ID
- * @interface: requested PHY interface
*
* Return: a pointer to the DW XPCS handle if successful, otherwise -ENODEV if
* the PCS device couldn't be found on the bus and other negative errno related
* to the data allocation and MDIO-bus communications.
*/
-struct dw_xpcs *xpcs_create_mdiodev(struct mii_bus *bus, int addr,
- phy_interface_t interface)
+struct dw_xpcs *xpcs_create_mdiodev(struct mii_bus *bus, int addr)
{
struct mdio_device *mdiodev;
struct dw_xpcs *xpcs;
@@ -1554,7 +1552,7 @@ struct phylink_pcs *xpcs_create_pcs_mdiodev(struct mii_bus *bus, int addr)
{
struct dw_xpcs *xpcs;
- xpcs = xpcs_create_mdiodev(bus, addr, PHY_INTERFACE_MODE_NA);
+ xpcs = xpcs_create_mdiodev(bus, addr);
if (IS_ERR(xpcs))
return ERR_CAST(xpcs);
@@ -1565,7 +1563,6 @@ EXPORT_SYMBOL_GPL(xpcs_create_pcs_mdiodev);
/**
* xpcs_create_fwnode() - Create a DW xPCS instance from @fwnode
* @fwnode: fwnode handle poining to the DW XPCS device
- * @interface: requested PHY interface
*
* Return: a pointer to the DW XPCS handle if successful, otherwise -ENODEV if
* the fwnode device is unavailable or the PCS device couldn't be found on the
@@ -1573,8 +1570,7 @@ EXPORT_SYMBOL_GPL(xpcs_create_pcs_mdiodev);
* other negative errno related to the data allocations and MDIO-bus
* communications.
*/
-struct dw_xpcs *xpcs_create_fwnode(struct fwnode_handle *fwnode,
- phy_interface_t interface)
+struct dw_xpcs *xpcs_create_fwnode(struct fwnode_handle *fwnode)
{
struct mdio_device *mdiodev;
struct dw_xpcs *xpcs;
diff --git a/include/linux/pcs/pcs-xpcs.h b/include/linux/pcs/pcs-xpcs.h
index a4e2243ce647..758daabb76c7 100644
--- a/include/linux/pcs/pcs-xpcs.h
+++ b/include/linux/pcs/pcs-xpcs.h
@@ -72,10 +72,8 @@ int xpcs_do_config(struct dw_xpcs *xpcs, phy_interface_t interface,
void xpcs_get_interfaces(struct dw_xpcs *xpcs, unsigned long *interfaces);
int xpcs_config_eee(struct dw_xpcs *xpcs, int mult_fact_100ns,
int enable);
-struct dw_xpcs *xpcs_create_mdiodev(struct mii_bus *bus, int addr,
- phy_interface_t interface);
-struct dw_xpcs *xpcs_create_fwnode(struct fwnode_handle *fwnode,
- phy_interface_t interface);
+struct dw_xpcs *xpcs_create_mdiodev(struct mii_bus *bus, int addr);
+struct dw_xpcs *xpcs_create_fwnode(struct fwnode_handle *fwnode);
void xpcs_destroy(struct dw_xpcs *xpcs);
struct phylink_pcs *xpcs_create_pcs_mdiodev(struct mii_bus *bus, int addr);
--
2.30.2
^ permalink raw reply related [flat|nested] 24+ messages in thread
* [PATCH net-next 10/10] net: pcs: xpcs: make xpcs_do_config() and xpcs_link_up() internal
2024-10-01 16:02 [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1 Russell King (Oracle)
` (8 preceding siblings ...)
2024-10-01 16:04 ` [PATCH net-next 09/10] net: pcs: xpcs: drop interface argument from xpcs_create*() Russell King (Oracle)
@ 2024-10-01 16:04 ` Russell King (Oracle)
2024-10-03 0:40 ` [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1 patchwork-bot+netdevbpf
2024-10-04 23:29 ` Serge Semin
11 siblings, 0 replies; 24+ messages in thread
From: Russell King (Oracle) @ 2024-10-01 16:04 UTC (permalink / raw)
To: Andrew Lunn, Heiner Kallweit
Cc: Alexandre Torgue, David S. Miller, Eric Dumazet, Florian Fainelli,
Jakub Kicinski, Jiawen Wu, Jose Abreu, Jose Abreu,
linux-arm-kernel, linux-stm32, Maxime Coquelin, Mengyuan Lou,
netdev, Paolo Abeni, Vladimir Oltean
As nothing outside pcs-xpcs.c calls neither xpcs_do_config() nor
xpcs_link_up(), remove their exports and prototypes.
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/net/pcs/pcs-xpcs.c | 11 +++++------
include/linux/pcs/pcs-xpcs.h | 4 ----
2 files changed, 5 insertions(+), 10 deletions(-)
diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c
index f25e7afdfdf5..0a01c552f591 100644
--- a/drivers/net/pcs/pcs-xpcs.c
+++ b/drivers/net/pcs/pcs-xpcs.c
@@ -851,8 +851,9 @@ static int xpcs_config_2500basex(struct dw_xpcs *xpcs)
return xpcs_write(xpcs, MDIO_MMD_VEND2, DW_VR_MII_MMD_CTRL, ret);
}
-int xpcs_do_config(struct dw_xpcs *xpcs, phy_interface_t interface,
- const unsigned long *advertising, unsigned int neg_mode)
+static int xpcs_do_config(struct dw_xpcs *xpcs, phy_interface_t interface,
+ const unsigned long *advertising,
+ unsigned int neg_mode)
{
const struct dw_xpcs_compat *compat;
int ret;
@@ -905,7 +906,6 @@ int xpcs_do_config(struct dw_xpcs *xpcs, phy_interface_t interface,
return 0;
}
-EXPORT_SYMBOL_GPL(xpcs_do_config);
static int xpcs_config(struct phylink_pcs *pcs, unsigned int neg_mode,
phy_interface_t interface,
@@ -1207,8 +1207,8 @@ static void xpcs_link_up_1000basex(struct dw_xpcs *xpcs, unsigned int neg_mode,
pr_err("%s: xpcs_write returned %pe\n", __func__, ERR_PTR(ret));
}
-void xpcs_link_up(struct phylink_pcs *pcs, unsigned int neg_mode,
- phy_interface_t interface, int speed, int duplex)
+static void xpcs_link_up(struct phylink_pcs *pcs, unsigned int neg_mode,
+ phy_interface_t interface, int speed, int duplex)
{
struct dw_xpcs *xpcs = phylink_pcs_to_xpcs(pcs);
@@ -1219,7 +1219,6 @@ void xpcs_link_up(struct phylink_pcs *pcs, unsigned int neg_mode,
if (interface == PHY_INTERFACE_MODE_1000BASEX)
return xpcs_link_up_1000basex(xpcs, neg_mode, speed, duplex);
}
-EXPORT_SYMBOL_GPL(xpcs_link_up);
static void xpcs_an_restart(struct phylink_pcs *pcs)
{
diff --git a/include/linux/pcs/pcs-xpcs.h b/include/linux/pcs/pcs-xpcs.h
index 758daabb76c7..abda475111d1 100644
--- a/include/linux/pcs/pcs-xpcs.h
+++ b/include/linux/pcs/pcs-xpcs.h
@@ -65,10 +65,6 @@ struct dw_xpcs {
};
int xpcs_get_an_mode(struct dw_xpcs *xpcs, phy_interface_t interface);
-void xpcs_link_up(struct phylink_pcs *pcs, unsigned int neg_mode,
- phy_interface_t interface, int speed, int duplex);
-int xpcs_do_config(struct dw_xpcs *xpcs, phy_interface_t interface,
- const unsigned long *advertising, unsigned int neg_mode);
void xpcs_get_interfaces(struct dw_xpcs *xpcs, unsigned long *interfaces);
int xpcs_config_eee(struct dw_xpcs *xpcs, int mult_fact_100ns,
int enable);
--
2.30.2
^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH net-next 01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config()
2024-10-01 16:04 ` [PATCH net-next 01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config() Russell King (Oracle)
@ 2024-10-01 20:34 ` Serge Semin
2024-10-01 22:01 ` Russell King (Oracle)
0 siblings, 1 reply; 24+ messages in thread
From: Serge Semin @ 2024-10-01 20:34 UTC (permalink / raw)
To: Russell King (Oracle)
Cc: Andrew Lunn, Heiner Kallweit, Alexandre Torgue, David S. Miller,
Eric Dumazet, Florian Fainelli, Jakub Kicinski, Jiawen Wu,
Jose Abreu, Jose Abreu, linux-arm-kernel, linux-stm32,
Maxime Coquelin, Mengyuan Lou, netdev, Paolo Abeni,
Vladimir Oltean
[-- Attachment #1: Type: text/plain, Size: 3807 bytes --]
Hi Russell
On Tue, Oct 01, 2024 at 05:04:10PM GMT, Russell King (Oracle) wrote:
> Move the PCS reset to .pcs_pre_config() rather than at creation time,
> which means we call the reset function with the interface that we're
> actually going to be using to talk to the downstream device.
>
> Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
> Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com> # sja1105
> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Continuing the RFC discussion. As I mentioned here:
https://lore.kernel.org/netdev/mykeabksgikgk6otbub2i3ksfettbozuhqy3gt5vyezmemvttg@cpjn5bcfiwei/
The PCS-reset procedure actually can be converted to being independent
from the PHY-interface. Thus you won't need to move the PCS resetting
to the pre_config() method, and get rid from the pointer to
dw_xpcs_compat utilization each time the reset is required.
So why not to merge in my patch to your series as a pre-requisite
change and then this patch can be converted to just dropping the
xpcs_find_compat() method call from the xpcs_init_iface() function?
Alternatively the dropping can be just incorporated into my patch.
-Serge(y)
> ---
> drivers/net/pcs/pcs-xpcs.c | 39 +++++++++++++++++++++++++++---------
> include/linux/pcs/pcs-xpcs.h | 1 +
> 2 files changed, 30 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c
> index 82463f9d50c8..7c6c40ddf722 100644
> --- a/drivers/net/pcs/pcs-xpcs.c
> +++ b/drivers/net/pcs/pcs-xpcs.c
> @@ -659,6 +659,30 @@ int xpcs_config_eee(struct dw_xpcs *xpcs, int mult_fact_100ns, int enable)
> }
> EXPORT_SYMBOL_GPL(xpcs_config_eee);
>
> +static void xpcs_pre_config(struct phylink_pcs *pcs, phy_interface_t interface)
> +{
> + struct dw_xpcs *xpcs = phylink_pcs_to_xpcs(pcs);
> + const struct dw_xpcs_compat *compat;
> + int ret;
> +
> + if (!xpcs->need_reset)
> + return;
> +
> + compat = xpcs_find_compat(xpcs->desc, interface);
> + if (!compat) {
> + dev_err(&xpcs->mdiodev->dev, "unsupported interface %s\n",
> + phy_modes(interface));
> + return;
> + }
> +
> + ret = xpcs_soft_reset(xpcs, compat);
> + if (ret)
> + dev_err(&xpcs->mdiodev->dev, "soft reset failed: %pe\n",
> + ERR_PTR(ret));
> +
> + xpcs->need_reset = false;
> +}
> +
> static int xpcs_config_aneg_c37_sgmii(struct dw_xpcs *xpcs,
> unsigned int neg_mode)
> {
> @@ -1365,6 +1389,7 @@ static const struct dw_xpcs_desc xpcs_desc_list[] = {
>
> static const struct phylink_pcs_ops xpcs_phylink_ops = {
> .pcs_validate = xpcs_validate,
> + .pcs_pre_config = xpcs_pre_config,
> .pcs_config = xpcs_config,
> .pcs_get_state = xpcs_get_state,
> .pcs_an_restart = xpcs_an_restart,
> @@ -1460,18 +1485,12 @@ static int xpcs_init_id(struct dw_xpcs *xpcs)
>
> static int xpcs_init_iface(struct dw_xpcs *xpcs, phy_interface_t interface)
> {
> - const struct dw_xpcs_compat *compat;
> -
> - compat = xpcs_find_compat(xpcs->desc, interface);
> - if (!compat)
> - return -EINVAL;
> -
> - if (xpcs->info.pma == WX_TXGBE_XPCS_PMA_10G_ID) {
> + if (xpcs->info.pma == WX_TXGBE_XPCS_PMA_10G_ID)
> xpcs->pcs.poll = false;
> - return 0;
> - }
> + else
> + xpcs->need_reset = true;
>
> - return xpcs_soft_reset(xpcs, compat);
> + return 0;
> }
>
> static struct dw_xpcs *xpcs_create(struct mdio_device *mdiodev,
> diff --git a/include/linux/pcs/pcs-xpcs.h b/include/linux/pcs/pcs-xpcs.h
> index b4a4eb6c8866..fd75d0605bb6 100644
> --- a/include/linux/pcs/pcs-xpcs.h
> +++ b/include/linux/pcs/pcs-xpcs.h
> @@ -61,6 +61,7 @@ struct dw_xpcs {
> struct clk_bulk_data clks[DW_XPCS_NUM_CLKS];
> struct phylink_pcs pcs;
> phy_interface_t interface;
> + bool need_reset;
> };
>
> int xpcs_get_an_mode(struct dw_xpcs *xpcs, phy_interface_t interface);
> --
> 2.30.2
>
>
[-- Attachment #2: 0001-net-pcs-xpcs-Drop-compat-arg-from-soft-reset-method.patch --]
[-- Type: text/x-patch, Size: 4915 bytes --]
From 7e36cef5d954cc17586194b8e0b3c58fe0dfe592 Mon Sep 17 00:00:00 2001
From: Serge Semin <fancer.lancer@gmail.com>
Date: Tue, 4 Jul 2023 12:39:29 +0300
Subject: [PATCH] net: pcs: xpcs: Drop compat arg from soft-reset method
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
It's very much inconvenient to have the soft-reset method requiring the
xpcs_compat structure instance passed. The later one is found based on the
PHY-interface type which isn't always available. Such design makes an
ordinary reset-method context depended and unnecessary limits its usage
area. Indeed based on [1,2] all Soft-RST flags exported by the PMA/PMD,
PCS, AN or MII MMDs are _shared_. It means it resets all the DWX_xpcs
internal blocks including CSRs, but except the Management Interface (MDIO,
MCI, APB). Thus it doesn't really matter which MMDs soft-reset flag is
set, the result will be the same. So the AN-mode-depended code can be
freely dropped from the soft-reset method. But depending on the DW XPCS
device capabilities (basically it depends on the IP-core synthesize
parameters) it can lack some of the MMDs. In order to solve that
difficulty the Vendor-Specific 1 MMD can be utilized. It is also called as
Control MMD and exports some generic device info about the device
including a list of the available MMDs: PMA/PMD, XS/PCS, AN or MII. This
MMD persists on all the DW XPCS device [3]. Thus it can be freely utilize
to cross-platformly determine actual MMD to perform the soft-reset.
[1] DesignWare® Cores Ethernet PCS, Version 3.11b, June 2015, p.111.
[2] DesignWare® Cores Ethernet PCS, Version 3.11b, June 2015, p.268.
[3] DesignWare® Cores Ethernet PCS, Version 3.11b, June 2015, p.269.
Signed-off-by: Serge Semin <fancer.lancer@gmail.com>
---
drivers/net/pcs/pcs-xpcs.c | 31 ++++++++++++++++---------------
drivers/net/pcs/pcs-xpcs.h | 7 +++++++
include/linux/pcs/pcs-xpcs.h | 1 +
3 files changed, 24 insertions(+), 15 deletions(-)
diff --git a/drivers/net/pcs/pcs-xpcs.c b/drivers/net/pcs/pcs-xpcs.c
index 014ca2b067f4..81c166726636 100644
--- a/drivers/net/pcs/pcs-xpcs.c
+++ b/drivers/net/pcs/pcs-xpcs.c
@@ -271,24 +271,18 @@ static int xpcs_poll_reset(struct dw_xpcs *xpcs, int dev)
return (ret & MDIO_CTRL1_RESET) ? -ETIMEDOUT : 0;
}
-static int xpcs_soft_reset(struct dw_xpcs *xpcs,
- const struct dw_xpcs_compat *compat)
+static int xpcs_soft_reset(struct dw_xpcs *xpcs)
{
int ret, dev;
- switch (compat->an_mode) {
- case DW_AN_C73:
- case DW_10GBASER:
- dev = MDIO_MMD_PCS;
- break;
- case DW_AN_C37_SGMII:
- case DW_2500BASEX:
- case DW_AN_C37_1000BASEX:
+ if (xpcs->mmd_ctrl & DW_SR_CTRL_MII_MMD_EN)
dev = MDIO_MMD_VEND2;
- break;
- default:
+ else if (xpcs->mmd_ctrl & DW_SR_CTRL_PCS_XS_MMD_EN)
+ dev = MDIO_MMD_PCS;
+ else if (xpcs->mmd_ctrl & DW_SR_CTRL_PMA_MMD_EN)
+ dev = MDIO_MMD_PMAPMD;
+ else
return -EINVAL;
- }
ret = xpcs_write(xpcs, dev, MDIO_CTRL1, MDIO_CTRL1_RESET);
if (ret < 0)
@@ -935,7 +929,7 @@ static int xpcs_get_state_c73(struct dw_xpcs *xpcs,
/* ... and then we check the faults. */
ret = xpcs_read_fault_c73(xpcs, state, pcs_stat1);
if (ret) {
- ret = xpcs_soft_reset(xpcs, compat);
+ ret = xpcs_soft_reset(xpcs);
if (ret)
return ret;
@@ -1485,17 +1479,24 @@ static int xpcs_init_id(struct dw_xpcs *xpcs)
static int xpcs_init_iface(struct dw_xpcs *xpcs, phy_interface_t interface)
{
const struct dw_xpcs_compat *compat;
+ int ret;
compat = xpcs_find_compat(xpcs->desc, interface);
if (!compat)
return -EINVAL;
+ ret = xpcs_read(xpcs, MDIO_MMD_VEND1, DW_SR_CTRL_MMD_CTRL);
+ if (ret < 0)
+ return ret;
+
+ xpcs->mmd_ctrl = ret;
+
if (xpcs->info.pma == WX_TXGBE_XPCS_PMA_10G_ID) {
xpcs->pcs.poll = false;
return 0;
}
- return xpcs_soft_reset(xpcs, compat);
+ return xpcs_soft_reset(xpcs);
}
static struct dw_xpcs *xpcs_create(struct mdio_device *mdiodev,
diff --git a/drivers/net/pcs/pcs-xpcs.h b/drivers/net/pcs/pcs-xpcs.h
index fa05adfae220..774b71801cc0 100644
--- a/drivers/net/pcs/pcs-xpcs.h
+++ b/drivers/net/pcs/pcs-xpcs.h
@@ -52,6 +52,13 @@
#define DW_C73_2500KX BIT(0)
#define DW_C73_5000KR BIT(1)
+/* VR_CTRL_MMD */
+#define DW_SR_CTRL_MMD_CTRL 0x0009
+#define DW_SR_CTRL_AN_MMD_EN BIT(0)
+#define DW_SR_CTRL_PCS_XS_MMD_EN BIT(1)
+#define DW_SR_CTRL_MII_MMD_EN BIT(2)
+#define DW_SR_CTRL_PMA_MMD_EN BIT(3)
+
/* Clause 37 Defines */
/* VR MII MMD registers offsets */
#define DW_VR_MII_MMD_CTRL 0x0000
diff --git a/include/linux/pcs/pcs-xpcs.h b/include/linux/pcs/pcs-xpcs.h
index b4a4eb6c8866..241a1a959406 100644
--- a/include/linux/pcs/pcs-xpcs.h
+++ b/include/linux/pcs/pcs-xpcs.h
@@ -59,6 +59,7 @@ struct dw_xpcs {
const struct dw_xpcs_desc *desc;
struct mdio_device *mdiodev;
struct clk_bulk_data clks[DW_XPCS_NUM_CLKS];
+ u16 mmd_ctrl;
struct phylink_pcs pcs;
phy_interface_t interface;
};
--
2.46.1
^ permalink raw reply related [flat|nested] 24+ messages in thread
* Re: [PATCH net-next 01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config()
2024-10-01 20:34 ` Serge Semin
@ 2024-10-01 22:01 ` Russell King (Oracle)
2024-10-01 22:09 ` Andrew Lunn
0 siblings, 1 reply; 24+ messages in thread
From: Russell King (Oracle) @ 2024-10-01 22:01 UTC (permalink / raw)
To: Serge Semin
Cc: Andrew Lunn, Heiner Kallweit, Alexandre Torgue, David S. Miller,
Eric Dumazet, Florian Fainelli, Jakub Kicinski, Jiawen Wu,
Jose Abreu, Jose Abreu, linux-arm-kernel, linux-stm32,
Maxime Coquelin, Mengyuan Lou, netdev, Paolo Abeni,
Vladimir Oltean
On Tue, Oct 01, 2024 at 11:34:42PM +0300, Serge Semin wrote:
> Hi Russell
>
> On Tue, Oct 01, 2024 at 05:04:10PM GMT, Russell King (Oracle) wrote:
> > Move the PCS reset to .pcs_pre_config() rather than at creation time,
> > which means we call the reset function with the interface that we're
> > actually going to be using to talk to the downstream device.
> >
> > Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
> > Tested-by: Vladimir Oltean <vladimir.oltean@nxp.com> # sja1105
> > Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
>
> Continuing the RFC discussion. As I mentioned here:
> https://lore.kernel.org/netdev/mykeabksgikgk6otbub2i3ksfettbozuhqy3gt5vyezmemvttg@cpjn5bcfiwei/
> The PCS-reset procedure actually can be converted to being independent
> from the PHY-interface. Thus you won't need to move the PCS resetting
> to the pre_config() method, and get rid from the pointer to
> dw_xpcs_compat utilization each time the reset is required.
>
> So why not to merge in my patch to your series as a pre-requisite
> change and then this patch can be converted to just dropping the
> xpcs_find_compat() method call from the xpcs_init_iface() function?
> Alternatively the dropping can be just incorporated into my patch.
I'm wondering why we seem to be having a communication issue here.
I'm not sure which part of "keeping the functional changes to a
minimum for a cleanup series" you're not understanding. This is
one of the basics for kernel development... and given that you're
effectively maintaining stmmac, it's something you _should_ know.
So no, I'm going to outright refuse to merge your patch in to this
series, because as I see it, it would be wrong to do so. This is
a _cleanup_ series, not a functional change series, and what you're
proposing _changes_ the _way_ reset happens in this driver beyond
the minimum that is required for this cleanup. It's introducing a
completely _new_ way of writing to the devices registers to do
the reset that's different.
The more differences there are, the more chances there are of
regressions.
So, again, no..
--
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] 24+ messages in thread
* Re: [PATCH net-next 01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config()
2024-10-01 22:01 ` Russell King (Oracle)
@ 2024-10-01 22:09 ` Andrew Lunn
2024-10-02 22:56 ` Serge Semin
0 siblings, 1 reply; 24+ messages in thread
From: Andrew Lunn @ 2024-10-01 22:09 UTC (permalink / raw)
To: Russell King (Oracle)
Cc: Serge Semin, Heiner Kallweit, Alexandre Torgue, David S. Miller,
Eric Dumazet, Florian Fainelli, Jakub Kicinski, Jiawen Wu,
Jose Abreu, Jose Abreu, linux-arm-kernel, linux-stm32,
Maxime Coquelin, Mengyuan Lou, netdev, Paolo Abeni,
Vladimir Oltean
> I'm wondering why we seem to be having a communication issue here.
>
> I'm not sure which part of "keeping the functional changes to a
> minimum for a cleanup series" you're not understanding. This is
> one of the basics for kernel development... and given that you're
> effectively maintaining stmmac, it's something you _should_ know.
>
> So no, I'm going to outright refuse to merge your patch in to this
> series, because as I see it, it would be wrong to do so. This is
> a _cleanup_ series, not a functional change series, and what you're
> proposing _changes_ the _way_ reset happens in this driver beyond
> the minimum that is required for this cleanup. It's introducing a
> completely _new_ way of writing to the devices registers to do
> the reset that's different.
I have to agree with Russell. Cleanups should be as simple as
possible, and hopefully obviously correct. They should be low risk.
Lets do all the simple cleanups first. Later we can consider more
invasive and risky changes.
Andrew
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH net-next 05/10] net: wangxun: txgbe: use phylink_pcs internally
2024-10-01 16:04 ` [PATCH net-next 05/10] net: wangxun: txgbe: use phylink_pcs internally Russell King (Oracle)
@ 2024-10-01 22:12 ` Andrew Lunn
0 siblings, 0 replies; 24+ messages in thread
From: Andrew Lunn @ 2024-10-01 22:12 UTC (permalink / raw)
To: Russell King (Oracle)
Cc: Heiner Kallweit, Alexandre Torgue, David S. Miller, Eric Dumazet,
Florian Fainelli, Jakub Kicinski, Jiawen Wu, Jose Abreu,
Jose Abreu, linux-arm-kernel, linux-stm32, Maxime Coquelin,
Mengyuan Lou, netdev, Paolo Abeni, Vladimir Oltean
On Tue, Oct 01, 2024 at 05:04:31PM +0100, Russell King (Oracle) wrote:
> Use xpcs_create_pcs_mdiodev() to create the XPCS instance, storing
> and using the phylink_pcs pointer internally, rather than dw_xpcs.
> Use xpcs_destroy_pcs() to destroy the XPCS instance when we've
> finished with it.
>
> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
It would be good if the net-swift.com people gave a Reviewed-by: or a
Tested-by.
To me, this looks O.K.
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Andrew
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH net-next 01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config()
2024-10-01 22:09 ` Andrew Lunn
@ 2024-10-02 22:56 ` Serge Semin
2024-10-02 23:12 ` Andrew Lunn
2024-10-02 23:25 ` Russell King (Oracle)
0 siblings, 2 replies; 24+ messages in thread
From: Serge Semin @ 2024-10-02 22:56 UTC (permalink / raw)
To: Russell King (Oracle), Andrew Lunn
Cc: Heiner Kallweit, Alexandre Torgue, David S. Miller, Eric Dumazet,
Florian Fainelli, Jakub Kicinski, Jiawen Wu, Jose Abreu,
Jose Abreu, linux-arm-kernel, linux-stm32, Maxime Coquelin,
Mengyuan Lou, netdev, Paolo Abeni, Vladimir Oltean
On Wed, Oct 02, 2024 at 12:09:22AM GMT, Andrew Lunn wrote:
> > I'm wondering why we seem to be having a communication issue here.
No communication issue. I just didn't find the discussion over with
all the aspects clarified. That's why I've got back to the topic here.
> >
> > I'm not sure which part of "keeping the functional changes to a
> > minimum for a cleanup series" you're not understanding. This is
> > one of the basics for kernel development... and given that you're
> > effectively maintaining stmmac, it's something you _should_ know.
> >
> > So no, I'm going to outright refuse to merge your patch in to this
> > series, because as I see it, it would be wrong to do so. This is
> > a _cleanup_ series, not a functional change series, and what you're
> > proposing _changes_ the _way_ reset happens in this driver beyond
> > the minimum that is required for this cleanup. It's introducing a
> > completely _new_ way of writing to the devices registers to do
> > the reset that's different.
>
> I have to agree with Russell. Cleanups should be as simple as
> possible, and hopefully obviously correct. They should be low risk.
In general as a thing in itself with no better option to improve the
code logic I agree, it should be kept simple. But since the cleanups
normally land to net-next, and seeing the patch set still implies some
level of the functional change, I don't see much problem with adding a
one more change to simplify the driver logic, decrease the level
of cohesions (by eliminating the PHY-interface passing to the
soft-reset method) and avoid some unneeded change in this patch set.
Yes, my patch adds some amount of functional change, but is that that
a big problem if both this series and my patch (set) are going to land
in net-next anyway, and probably with a little time-lag?
Here what we'll see in the commits-tree if my patch is applied as a
pre-requisite one of this series:
1.0 Serge: net: pcs: xpcs: Drop compat arg from soft-reset method
- 1.1 Russell: net: pcs: xpcs: move PCS reset to .pcs_pre_config()
* This patch won't be needed since the PHY-interface will be no
longer used for the soft-reset to be performed.
1.2 Russell: net: pcs: xpcs: drop interface argument from internal functions
- 1.3 net: pcs: xpcs: get rid of xpcs_init_iface()
* This patch won't be applicable since the xpcs_init_iface() method
will be still utilized for the basic dw_xpcs initializations and the
controller soft-resetting.
...
1.1x Serge: my series rebased onto the Russell' patch set
Here is what we'll see in the git-tree if my patch left omitted in
this patch set:
2.1 Russell: net: pcs: xpcs: move PCS reset to .pcs_pre_config()
2.2 Russell: net: pcs: xpcs: drop interface argument from internal functions
2.3 Russell: net: pcs: xpcs: get rid of xpcs_init_iface()
...
2.1x Serge: net: pcs: xpcs: Drop compat arg from soft-reset method
+ 2.1y Serge: net: pcs: xpcs: Get back xpcs_init_iface()
* Since the PHY-interface is no longer required for the XPCS soft-resetting
I'll move the basic dw_xpcs initializations to the xpcs_init_iface()
in order to simplify the driver logic by consolidating the initial
setups at the early XPCS-setup stage. This will basically mean to
revert the Russell' patches 2.1 and 2.3.
2.1z Serge: the rest of my series rebased onto the Russell' patch set
>
> Lets do all the simple cleanups first. Later we can consider more
> invasive and risky changes.
Based on all the considerations above I still think that option 1.
described above looks better since it decreases the changes volume
in general and decreases the number of patches (by three actually),
conserves the changes linearity.
But if my reasoning haven't been persuasive enough anyway, then fine by
me. I'll just add a new patch (as described in 2.1y) to my series.
But please be ready that it will look as a reversion of the Russell'
patches 2.1 and 2.3.
-Serge(y)
>
> Andrew
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH net-next 01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config()
2024-10-02 22:56 ` Serge Semin
@ 2024-10-02 23:12 ` Andrew Lunn
2024-10-02 23:43 ` Serge Semin
2024-10-02 23:25 ` Russell King (Oracle)
1 sibling, 1 reply; 24+ messages in thread
From: Andrew Lunn @ 2024-10-02 23:12 UTC (permalink / raw)
To: Serge Semin
Cc: Russell King (Oracle), Heiner Kallweit, Alexandre Torgue,
David S. Miller, Eric Dumazet, Florian Fainelli, Jakub Kicinski,
Jiawen Wu, Jose Abreu, Jose Abreu, linux-arm-kernel, linux-stm32,
Maxime Coquelin, Mengyuan Lou, netdev, Paolo Abeni,
Vladimir Oltean
> But if my reasoning haven't been persuasive enough anyway, then fine by
> me. I'll just add a new patch (as described in 2.1y) to my series.
> But please be ready that it will look as a reversion of the Russell'
> patches 2.1 and 2.3.
Note what Russell said in patch 0/X:
> First, sorry for the bland series subject - this is the first in a
> number of cleanup series to the XPCS driver.
I suspect you need to wait until all the series have landed before
your patches can be applied on top.
Andrew
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH net-next 01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config()
2024-10-02 22:56 ` Serge Semin
2024-10-02 23:12 ` Andrew Lunn
@ 2024-10-02 23:25 ` Russell King (Oracle)
1 sibling, 0 replies; 24+ messages in thread
From: Russell King (Oracle) @ 2024-10-02 23:25 UTC (permalink / raw)
To: Serge Semin
Cc: Andrew Lunn, Heiner Kallweit, Alexandre Torgue, David S. Miller,
Eric Dumazet, Florian Fainelli, Jakub Kicinski, Jiawen Wu,
Jose Abreu, Jose Abreu, linux-arm-kernel, linux-stm32,
Maxime Coquelin, Mengyuan Lou, netdev, Paolo Abeni,
Vladimir Oltean
On Thu, Oct 03, 2024 at 01:56:27AM +0300, Serge Semin wrote:
> On Wed, Oct 02, 2024 at 12:09:22AM GMT, Andrew Lunn wrote:
> > > I'm wondering why we seem to be having a communication issue here.
>
> No communication issue. I just didn't find the discussion over with
> all the aspects clarified. That's why I've got back to the topic here.
>
> > >
> > > I'm not sure which part of "keeping the functional changes to a
> > > minimum for a cleanup series" you're not understanding. This is
> > > one of the basics for kernel development... and given that you're
> > > effectively maintaining stmmac, it's something you _should_ know.
> > >
> > > So no, I'm going to outright refuse to merge your patch in to this
> > > series, because as I see it, it would be wrong to do so. This is
> > > a _cleanup_ series, not a functional change series, and what you're
> > > proposing _changes_ the _way_ reset happens in this driver beyond
> > > the minimum that is required for this cleanup. It's introducing a
> > > completely _new_ way of writing to the devices registers to do
> > > the reset that's different.
> >
> > I have to agree with Russell. Cleanups should be as simple as
> > possible, and hopefully obviously correct. They should be low risk.
>
> In general as a thing in itself with no better option to improve the
> code logic I agree, it should be kept simple. But since the cleanups
> normally land to net-next, and seeing the patch set still implies some
> level of the functional change, I don't see much problem with adding a
> one more change to simplify the driver logic, decrease the level
> of cohesions (by eliminating the PHY-interface passing to the
> soft-reset method) and avoid some unneeded change in this patch set.
> Yes, my patch adds some amount of functional change, but is that that
> a big problem if both this series and my patch (set) are going to land
> in net-next anyway, and probably with a little time-lag?
>
> Here what we'll see in the commits-tree if my patch is applied as a
> pre-requisite one of this series:
>
> 1.0 Serge: net: pcs: xpcs: Drop compat arg from soft-reset method
> - 1.1 Russell: net: pcs: xpcs: move PCS reset to .pcs_pre_config()
> * This patch won't be needed since the PHY-interface will be no
> longer used for the soft-reset to be performed.
> 1.2 Russell: net: pcs: xpcs: drop interface argument from internal functions
> - 1.3 net: pcs: xpcs: get rid of xpcs_init_iface()
> * This patch won't be applicable since the xpcs_init_iface() method
> will be still utilized for the basic dw_xpcs initializations and the
> controller soft-resetting.
> ...
> 1.1x Serge: my series rebased onto the Russell' patch set
>
> Here is what we'll see in the git-tree if my patch left omitted in
> this patch set:
>
> 2.1 Russell: net: pcs: xpcs: move PCS reset to .pcs_pre_config()
> 2.2 Russell: net: pcs: xpcs: drop interface argument from internal functions
> 2.3 Russell: net: pcs: xpcs: get rid of xpcs_init_iface()
> ...
> 2.1x Serge: net: pcs: xpcs: Drop compat arg from soft-reset method
> + 2.1y Serge: net: pcs: xpcs: Get back xpcs_init_iface()
> * Since the PHY-interface is no longer required for the XPCS soft-resetting
> I'll move the basic dw_xpcs initializations to the xpcs_init_iface()
> in order to simplify the driver logic by consolidating the initial
> setups at the early XPCS-setup stage. This will basically mean to
> revert the Russell' patches 2.1 and 2.3.
> 2.1z Serge: the rest of my series rebased onto the Russell' patch set
>
> >
> > Lets do all the simple cleanups first. Later we can consider more
> > invasive and risky changes.
>
> Based on all the considerations above I still think that option 1.
> described above looks better since it decreases the changes volume
> in general and decreases the number of patches (by three actually),
> conserves the changes linearity.
>
> But if my reasoning haven't been persuasive enough anyway, then fine by
> me. I'll just add a new patch (as described in 2.1y) to my series.
> But please be ready that it will look as a reversion of the Russell'
> patches 2.1 and 2.3.
Oh, sod it. Do whatever you bloody well want. I don't care. You're
constantly arguing against me, and I've had enough of this.
--
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] 24+ messages in thread
* Re: [PATCH net-next 01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config()
2024-10-02 23:12 ` Andrew Lunn
@ 2024-10-02 23:43 ` Serge Semin
2024-10-03 0:04 ` Andrew Lunn
0 siblings, 1 reply; 24+ messages in thread
From: Serge Semin @ 2024-10-02 23:43 UTC (permalink / raw)
To: Andrew Lunn
Cc: Russell King (Oracle), Heiner Kallweit, Alexandre Torgue,
David S. Miller, Eric Dumazet, Florian Fainelli, Jakub Kicinski,
Jiawen Wu, Jose Abreu, Jose Abreu, linux-arm-kernel, linux-stm32,
Maxime Coquelin, Mengyuan Lou, netdev, Paolo Abeni,
Vladimir Oltean
On Thu, Oct 03, 2024 at 01:12:58AM GMT, Andrew Lunn wrote:
> > But if my reasoning haven't been persuasive enough anyway, then fine by
> > me. I'll just add a new patch (as described in 2.1y) to my series.
> > But please be ready that it will look as a reversion of the Russell'
> > patches 2.1 and 2.3.
>
> Note what Russell said in patch 0/X:
>
> > First, sorry for the bland series subject - this is the first in a
> > number of cleanup series to the XPCS driver.
>
> I suspect you need to wait until all the series have landed before
> your patches can be applied on top.
Of course I have no intention to needlessly over-complicate the
review/maintenance process by submitting a new series interfering with
the already sent work. That's what I mentioned on the RFC-stage of
this series a few days ago:
https://lore.kernel.org/netdev/mykeabksgikgk6otbub2i3ksfettbozuhqy3gt5vyezmemvttg@cpjn5bcfiwei/
But for the reason that I've already done some improvements too, why
not to use some of them to simplify the Russell' and further changes
if they concern the same functionality?.. That's why I originally
suggested my patch as a pre-requisite change.
Anyway the Russell' patch set in general looks good to me. I have no
more comments other than regarding the soft-reset change I described in
my previous message.
-Serge(y)
>
> Andrew
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH net-next 01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config()
2024-10-02 23:43 ` Serge Semin
@ 2024-10-03 0:04 ` Andrew Lunn
2024-10-03 8:58 ` Russell King (Oracle)
2024-10-03 23:39 ` Serge Semin
0 siblings, 2 replies; 24+ messages in thread
From: Andrew Lunn @ 2024-10-03 0:04 UTC (permalink / raw)
To: Serge Semin
Cc: Russell King (Oracle), Heiner Kallweit, Alexandre Torgue,
David S. Miller, Eric Dumazet, Florian Fainelli, Jakub Kicinski,
Jiawen Wu, Jose Abreu, Jose Abreu, linux-arm-kernel, linux-stm32,
Maxime Coquelin, Mengyuan Lou, netdev, Paolo Abeni,
Vladimir Oltean
> Anyway the Russell' patch set in general looks good to me. I have no
> more comments other than regarding the soft-reset change I described in
> my previous message.
Sorry, i've not been keeping track. Have you sent reviewed-by: and
Tested-by: for them?
Andrew
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1
2024-10-01 16:02 [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1 Russell King (Oracle)
` (9 preceding siblings ...)
2024-10-01 16:04 ` [PATCH net-next 10/10] net: pcs: xpcs: make xpcs_do_config() and xpcs_link_up() internal Russell King (Oracle)
@ 2024-10-03 0:40 ` patchwork-bot+netdevbpf
2024-10-04 23:29 ` Serge Semin
11 siblings, 0 replies; 24+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-10-03 0:40 UTC (permalink / raw)
To: Russell King
Cc: andrew, hkallweit1, alexandre.torgue, davem, edumazet, f.fainelli,
kuba, jiawenwu, joabreu, Jose.Abreu, linux-arm-kernel,
linux-stm32, mcoquelin.stm32, mengyuanlou, netdev, pabeni,
olteanv
Hello:
This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Tue, 1 Oct 2024 17:02:48 +0100 you wrote:
> Hi,
>
> First, sorry for the bland series subject - this is the first in a
> number of cleanup series to the XPCS driver. This series has some
> functional changes beyond merely cleanups, notably the first patch.
>
> This series starts off with a patch that moves the PCS reset from
> the xpcs_create*() family of calls to when phylink first configures
> the PHY. The motivation for this change is to get rid of the
> interface argument to the xpcs_create*() functions, which I see as
> unnecessary complexity. This patch should be tested on Wangxun
> and STMMAC drivers.
>
> [...]
Here is the summary with links:
- [net-next,01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config()
https://git.kernel.org/netdev/net-next/c/277b339c4ba5
- [net-next,02/10] net: pcs: xpcs: drop interface argument from internal functions
https://git.kernel.org/netdev/net-next/c/92fb8986083a
- [net-next,03/10] net: pcs: xpcs: get rid of xpcs_init_iface()
https://git.kernel.org/netdev/net-next/c/a487c9e7cfc4
- [net-next,04/10] net: pcs: xpcs: add xpcs_destroy_pcs() and xpcs_create_pcs_mdiodev()
https://git.kernel.org/netdev/net-next/c/bedea1539acb
- [net-next,05/10] net: wangxun: txgbe: use phylink_pcs internally
https://git.kernel.org/netdev/net-next/c/155c499ffd1d
- [net-next,06/10] net: dsa: sja1105: simplify static configuration reload
https://git.kernel.org/netdev/net-next/c/a18891b55703
- [net-next,07/10] net: dsa: sja1105: call PCS config/link_up via pcs_ops structure
https://git.kernel.org/netdev/net-next/c/907476c66d73
- [net-next,08/10] net: dsa: sja1105: use phylink_pcs internally
https://git.kernel.org/netdev/net-next/c/41bf58314b17
- [net-next,09/10] net: pcs: xpcs: drop interface argument from xpcs_create*()
https://git.kernel.org/netdev/net-next/c/bf5a61645bb2
- [net-next,10/10] net: pcs: xpcs: make xpcs_do_config() and xpcs_link_up() internal
https://git.kernel.org/netdev/net-next/c/faefc9730d07
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] 24+ messages in thread
* Re: [PATCH net-next 01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config()
2024-10-03 0:04 ` Andrew Lunn
@ 2024-10-03 8:58 ` Russell King (Oracle)
2024-10-03 23:39 ` Serge Semin
1 sibling, 0 replies; 24+ messages in thread
From: Russell King (Oracle) @ 2024-10-03 8:58 UTC (permalink / raw)
To: Andrew Lunn
Cc: Serge Semin, Heiner Kallweit, Alexandre Torgue, David S. Miller,
Eric Dumazet, Florian Fainelli, Jakub Kicinski, Jiawen Wu,
Jose Abreu, Jose Abreu, linux-arm-kernel, linux-stm32,
Maxime Coquelin, Mengyuan Lou, netdev, Paolo Abeni,
Vladimir Oltean
On Thu, Oct 03, 2024 at 02:04:36AM +0200, Andrew Lunn wrote:
> > Anyway the Russell' patch set in general looks good to me. I have no
> > more comments other than regarding the soft-reset change I described in
> > my previous message.
>
> Sorry, i've not been keeping track. Have you sent reviewed-by: and
> Tested-by: for them?
Of course Serge hasn't. He hasn't even said he's tested them. He's more
concerned with the soft-reset change to do anything else other than
whinge about that.
After the previous debacle over the stmmac PCS cleanup (that I've given
up with) I decided later in the series of XPCS cleanups I have to touch
stmmac as little as possible because I don't want to interact with
Serge anymore. This has now been reinforced further, to the extent that
I'm now going to ask Serge to _remove_ all usage of phylink from stmmac
for this very reason - I do not wish to interact further with Serge.
--
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] 24+ messages in thread
* Re: [PATCH net-next 01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config()
2024-10-03 0:04 ` Andrew Lunn
2024-10-03 8:58 ` Russell King (Oracle)
@ 2024-10-03 23:39 ` Serge Semin
1 sibling, 0 replies; 24+ messages in thread
From: Serge Semin @ 2024-10-03 23:39 UTC (permalink / raw)
To: Andrew Lunn
Cc: Russell King (Oracle), Heiner Kallweit, Alexandre Torgue,
David S. Miller, Eric Dumazet, Florian Fainelli, Jakub Kicinski,
Jiawen Wu, Jose Abreu, Jose Abreu, linux-arm-kernel, linux-stm32,
Maxime Coquelin, Mengyuan Lou, netdev, Paolo Abeni,
Vladimir Oltean
On Thu, Oct 03, 2024 at 02:04:36AM GMT, Andrew Lunn wrote:
> > Anyway the Russell' patch set in general looks good to me. I have no
> > more comments other than regarding the soft-reset change I described in
> > my previous message.
>
> Sorry, i've not been keeping track. Have you sent reviewed-by: and
> Tested-by: for them?
I have reviewed the series twice on the RFC and v1 stages. But I
haven't sent the Rb-tag for the series, just the standard phrase
above. I was and still am going to test it out today, when I get to
reach my hardware treasury (alas, I couldn't do that earlier this week
due to my time-table).
Regarding the tags, sorry for not explicitly submitting them. I was
going to send them after testing the series out. Seeing the patch set
has already been merged in it won't much of importance to do that now
though, but I'll send at least Tb-tag anyway after the testing.
-Serge(y)
>
> Andrew
^ permalink raw reply [flat|nested] 24+ messages in thread
* Re: [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1
2024-10-01 16:02 [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1 Russell King (Oracle)
` (10 preceding siblings ...)
2024-10-03 0:40 ` [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1 patchwork-bot+netdevbpf
@ 2024-10-04 23:29 ` Serge Semin
11 siblings, 0 replies; 24+ messages in thread
From: Serge Semin @ 2024-10-04 23:29 UTC (permalink / raw)
To: Russell King (Oracle), Andrew Lunn, Jakub Kicinski
Cc: Heiner Kallweit, Alexandre Torgue, David S. Miller, Eric Dumazet,
Florian Fainelli, Jiawen Wu, Jose Abreu, Jose Abreu,
linux-arm-kernel, linux-stm32, Maxime Coquelin, Mengyuan Lou,
netdev, Paolo Abeni, Vladimir Oltean
On Tue, Oct 01, 2024 at 05:02:48PM GMT, Russell King (Oracle) wrote:
> Hi,
>
> First, sorry for the bland series subject - this is the first in a
> number of cleanup series to the XPCS driver. This series has some
> functional changes beyond merely cleanups, notably the first patch.
>
> This series starts off with a patch that moves the PCS reset from
> the xpcs_create*() family of calls to when phylink first configures
> the PHY. The motivation for this change is to get rid of the
> interface argument to the xpcs_create*() functions, which I see as
> unnecessary complexity. This patch should be tested on Wangxun
> and STMMAC drivers.
>
> Patch 2 removes the now unnecessary interface argument from the
> internal xpcs_create() and xpcs_init_iface() functions. With this,
> xpcs_init_iface() becomes a misnamed function, but patch 3 removes
> this function, moving its now meager contents to xpcs_create().
>
> Patch 4 adds xpcs_destroy_pcs() and xpcs_create_pcs_mdiodev()
> functions which return and take a phylink_pcs, allowing SJA1105
> and Wangxun drivers to be converted to using the phylink_pcs
> structure internally.
>
> Patches 5 through 8 convert both these drivers to that end.
>
> Patch 9 drops the interface argument from the remaining xpcs_create*()
> functions, addressing the only remaining caller of these functions,
> that being the STMMAC driver.
Better later than never. Just reached my hardware treasury and managed to
test the series out on the next setup:
DW XGMAC <-(XGMII)-> DW XPCS <-(10Gbase-R)-> Marvell 88x2222
<-(10gbase-R)->
SFP+ fiber SFP+
<-(10gbase-r)->
Marvell 88x2222 <-(10gbase-r)-> DW XPCS <-(XGMII)-> DW XGMAC
DW XGMAC was working under the STMMAC driver control.
No problem has been spotted. So
Tested-by: Serge Semin <fancer.lancer@gmail.com>
-Serge(y)
>
> As patch 7 removed the direct calls to the XPCS config/link-up
> functions, the last patch makes these functions static.
>
> drivers/net/dsa/sja1105/sja1105.h | 2 +-
> drivers/net/dsa/sja1105/sja1105_main.c | 85 ++++++++++----------
> drivers/net/dsa/sja1105/sja1105_mdio.c | 28 ++++---
> drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c | 7 +-
> drivers/net/ethernet/wangxun/txgbe/txgbe_phy.c | 18 ++---
> drivers/net/ethernet/wangxun/txgbe/txgbe_type.h | 2 +-
> drivers/net/pcs/pcs-xpcs.c | 92 ++++++++++++++---------
> include/linux/pcs/pcs-xpcs.h | 14 ++--
> 8 files changed, 132 insertions(+), 116 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] 24+ messages in thread
end of thread, other threads:[~2024-10-04 23:30 UTC | newest]
Thread overview: 24+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-01 16:02 [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1 Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 01/10] net: pcs: xpcs: move PCS reset to .pcs_pre_config() Russell King (Oracle)
2024-10-01 20:34 ` Serge Semin
2024-10-01 22:01 ` Russell King (Oracle)
2024-10-01 22:09 ` Andrew Lunn
2024-10-02 22:56 ` Serge Semin
2024-10-02 23:12 ` Andrew Lunn
2024-10-02 23:43 ` Serge Semin
2024-10-03 0:04 ` Andrew Lunn
2024-10-03 8:58 ` Russell King (Oracle)
2024-10-03 23:39 ` Serge Semin
2024-10-02 23:25 ` Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 02/10] net: pcs: xpcs: drop interface argument from internal functions Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 03/10] net: pcs: xpcs: get rid of xpcs_init_iface() Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 04/10] net: pcs: xpcs: add xpcs_destroy_pcs() and xpcs_create_pcs_mdiodev() Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 05/10] net: wangxun: txgbe: use phylink_pcs internally Russell King (Oracle)
2024-10-01 22:12 ` Andrew Lunn
2024-10-01 16:04 ` [PATCH net-next 06/10] net: dsa: sja1105: simplify static configuration reload Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 07/10] net: dsa: sja1105: call PCS config/link_up via pcs_ops structure Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 08/10] net: dsa: sja1105: use phylink_pcs internally Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 09/10] net: pcs: xpcs: drop interface argument from xpcs_create*() Russell King (Oracle)
2024-10-01 16:04 ` [PATCH net-next 10/10] net: pcs: xpcs: make xpcs_do_config() and xpcs_link_up() internal Russell King (Oracle)
2024-10-03 0:40 ` [PATCH net-next 00/10] net: pcs: xpcs: cleanups batch 1 patchwork-bot+netdevbpf
2024-10-04 23:29 ` Serge Semin
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).