net: stmmac: Support a generic PCS field in mac_device_info
authorRomain Gantois <romain.gantois@bootlin.com>
Tue, 26 Mar 2024 13:32:10 +0000 (14:32 +0100)
committerJakub Kicinski <kuba@kernel.org>
Fri, 29 Mar 2024 02:21:33 +0000 (19:21 -0700)
Global stmmac support for early initialization of PCS devices requires a
generic PCS reference that can be passed to phylink_pcs_pre_init().
Currently, the mac_device_info struct contains only one PCS field, which is
specific to the Lynx model.

As PCS models are hardware-specific, it is more appropriate to have a
generic PCS field in the mac_device_info struct.

Refactor the lynx_pcs field into a generic phylink_pcs field.

Signed-off-by: Romain Gantois <romain.gantois@bootlin.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/20240326-rxc_bugfix-v6-4-24a74e5c761f@bootlin.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/common.h
drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

index a6fefe675ef1520566ccdcafaac705f0ee159e42..f55cf09f0783ac3ce5da2ada3bfe10f3acf77d0d 100644 (file)
@@ -593,7 +593,7 @@ struct mac_device_info {
        const struct stmmac_mmc_ops *mmc;
        const struct stmmac_est_ops *est;
        struct dw_xpcs *xpcs;
-       struct phylink_pcs *lynx_pcs; /* Lynx external PCS */
+       struct phylink_pcs *phylink_pcs;
        struct mii_regs mii;    /* MII register Addresses */
        struct mac_link link;
        void __iomem *pcsr;     /* vpointer to device CSRs */
index 68f85e4605cbad27646e8b780cc79722ffec0ca0..12b4a80ea3aa1bf82fe5967239a44093c2cc6413 100644 (file)
@@ -479,9 +479,9 @@ static int socfpga_dwmac_probe(struct platform_device *pdev)
                        goto err_dvr_remove;
                }
 
-               stpriv->hw->lynx_pcs = lynx_pcs_create_mdiodev(pcs_bus, 0);
-               if (IS_ERR(stpriv->hw->lynx_pcs)) {
-                       ret = PTR_ERR(stpriv->hw->lynx_pcs);
+               stpriv->hw->phylink_pcs = lynx_pcs_create_mdiodev(pcs_bus, 0);
+               if (IS_ERR(stpriv->hw->phylink_pcs)) {
+                       ret = PTR_ERR(stpriv->hw->phylink_pcs);
                        goto err_dvr_remove;
                }
        }
@@ -498,7 +498,7 @@ static void socfpga_dwmac_remove(struct platform_device *pdev)
 {
        struct net_device *ndev = platform_get_drvdata(pdev);
        struct stmmac_priv *priv = netdev_priv(ndev);
-       struct phylink_pcs *pcs = priv->hw->lynx_pcs;
+       struct phylink_pcs *pcs = priv->hw->phylink_pcs;
 
        stmmac_pltfr_remove(pdev);
 
index 9fb8750248a10e5a9717ab7ad40e3f68233110bc..1ee06a6e5c22f9a3c35000725a49e9891504ee92 100644 (file)
@@ -944,10 +944,7 @@ static struct phylink_pcs *stmmac_mac_select_pcs(struct phylink_config *config,
        if (priv->hw->xpcs)
                return &priv->hw->xpcs->pcs;
 
-       if (priv->hw->lynx_pcs)
-               return priv->hw->lynx_pcs;
-
-       return NULL;
+       return priv->hw->phylink_pcs;
 }
 
 static void stmmac_mac_config(struct phylink_config *config, unsigned int mode,