]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: stmmac: provide PCS initialisation hook
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Thu, 16 Oct 2025 14:37:47 +0000 (15:37 +0100)
committerJakub Kicinski <kuba@kernel.org>
Tue, 21 Oct 2025 00:17:16 +0000 (17:17 -0700)
dwmac cores provide a feature bit to indicate when the PCS block is
present, but features are only read after the core's setup() function
has been called, meaning we can't decide whether to initialise the
integrated PCS in the setup function. Provide a new MAC core hook
for PCS initialisation, which will be called after the feature
registers have been read.

Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Tested-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Tested-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Link: https://patch.msgid.link/E1v9P6x-0000000AomL-3OKd@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/hwif.h
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

index 7796f5f3c96f1db8fd8733d0bb8c243e6601c740..82cfb6bec334aa0bfe48842ee00f0d70aff52db4 100644 (file)
@@ -313,6 +313,8 @@ enum stmmac_lpi_mode {
 
 /* Helpers to program the MAC core */
 struct stmmac_ops {
+       /* Initialise any PCS instances */
+       int (*pcs_init)(struct stmmac_priv *priv);
        /* MAC core initialization */
        void (*core_init)(struct mac_device_info *hw, struct net_device *dev);
        /* Update MAC capabilities */
@@ -413,6 +415,8 @@ struct stmmac_ops {
                                        u32 pclass);
 };
 
+#define stmmac_mac_pcs_init(__priv) \
+       stmmac_do_callback(__priv, mac, pcs_init, __priv)
 #define stmmac_core_init(__priv, __args...) \
        stmmac_do_void_callback(__priv, mac, core_init, __args)
 #define stmmac_mac_update_caps(__priv) \
index 02dcbfa7d23e80465af420219fdd816645a44010..c041268d3a8d65b0bf42b5ae43ef709724d7fc92 100644 (file)
@@ -7239,6 +7239,13 @@ static int stmmac_hw_init(struct stmmac_priv *priv)
                         "Enable RX Mitigation via HW Watchdog Timer\n");
        }
 
+       /* Unimplemented PCS init (as indicated by stmmac_do_callback()
+        * perversely returning -EINVAL) is non-fatal.
+        */
+       ret = stmmac_mac_pcs_init(priv);
+       if (ret != -EINVAL)
+               return ret;
+
        return 0;
 }