]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: stmmac: add select_pcs() platform method
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Thu, 13 Jun 2024 10:36:06 +0000 (11:36 +0100)
committerJakub Kicinski <kuba@kernel.org>
Sat, 15 Jun 2024 02:06:40 +0000 (19:06 -0700)
Allow platform drivers to provide their logic to select an appropriate
PCS.

Tested-by: Romain Gantois <romain.gantois@bootlin.com>
Reviewed-by: Romain Gantois <romain.gantois@bootlin.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://lore.kernel.org/r/E1sHhoM-00Fesu-8E@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
include/linux/stmmac.h

index bbedf2a8c60f243e7363c3b9b8f4e2688b9a045f..302aa4080de3b78a9b35d767ed67e5bbcbb8ef2f 100644 (file)
@@ -949,6 +949,13 @@ static struct phylink_pcs *stmmac_mac_select_pcs(struct phylink_config *config,
                                                 phy_interface_t interface)
 {
        struct stmmac_priv *priv = netdev_priv(to_net_dev(config->dev));
+       struct phylink_pcs *pcs;
+
+       if (priv->plat->select_pcs) {
+               pcs = priv->plat->select_pcs(priv, interface);
+               if (!IS_ERR(pcs))
+                       return pcs;
+       }
 
        if (priv->hw->xpcs)
                return &priv->hw->xpcs->pcs;
index 8f0f156d50d35cc98953069f1d4da3bd57d106fb..9c54f82901a178e760691f20ae122dd20cc0a234 100644 (file)
@@ -13,7 +13,7 @@
 #define __STMMAC_PLATFORM_DATA
 
 #include <linux/platform_device.h>
-#include <linux/phy.h>
+#include <linux/phylink.h>
 
 #define MTL_MAX_RX_QUEUES      8
 #define MTL_MAX_TX_QUEUES      8
@@ -271,6 +271,8 @@ struct plat_stmmacenet_data {
        void (*dump_debug_regs)(void *priv);
        int (*pcs_init)(struct stmmac_priv *priv);
        void (*pcs_exit)(struct stmmac_priv *priv);
+       struct phylink_pcs *(*select_pcs)(struct stmmac_priv *priv,
+                                         phy_interface_t interface);
        void *bsp_priv;
        struct clk *stmmac_clk;
        struct clk *pclk;