]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: stmmac: pass interface mode into fix_mac_speed() method
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Mon, 23 Feb 2026 09:34:41 +0000 (09:34 +0000)
committerJakub Kicinski <kuba@kernel.org>
Wed, 25 Feb 2026 01:43:22 +0000 (17:43 -0800)
Pass the current interface mode reported by phylink into the
fix_mac_speed() method. This will be used by qcom-ethqos for its
"SGMII" configuration.

Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Tested-by: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/E1vuSKv-0000000AScG-1zv6@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c
drivers/net/ethernet/stmicro/stmmac/dwmac-imx.c
drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c
drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
drivers/net/ethernet/stmicro/stmmac/dwmac-socfpga.c
drivers/net/ethernet/stmicro/stmmac/dwmac-sti.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
include/linux/stmmac.h

index d043bad4a8629d5f3f1134a5506f6df2d29ccac1..0495437d3a6e98ac2f1400a3c92c93d469bf9d1a 100644 (file)
@@ -112,7 +112,8 @@ static int dwc_qos_probe(struct platform_device *pdev,
 #define AUTO_CAL_STATUS 0x880c
 #define  AUTO_CAL_STATUS_ACTIVE BIT(31)
 
-static void tegra_eqos_fix_speed(void *bsp_priv, int speed, unsigned int mode)
+static void tegra_eqos_fix_speed(void *bsp_priv, phy_interface_t interface,
+                                int speed, unsigned int mode)
 {
        struct tegra_eqos *eqos = bsp_priv;
        bool needs_calibration = false;
index c4e85197629ddda5f877eb99b4723537397be648..9f5a15b81f8a01d2b3e6975361a437ab80a5d7e5 100644 (file)
@@ -48,7 +48,8 @@ struct imx_dwmac_ops {
 
        int (*fix_soc_reset)(struct stmmac_priv *priv);
        int (*set_intf_mode)(struct imx_priv_data *dwmac, u8 phy_intf_sel);
-       void (*fix_mac_speed)(void *priv, int speed, unsigned int mode);
+       void (*fix_mac_speed)(void *priv, phy_interface_t interface,
+                             int speed, unsigned int mode);
 };
 
 struct imx_priv_data {
@@ -160,7 +161,8 @@ static int imx_dwmac_set_clk_tx_rate(void *bsp_priv, struct clk *clk_tx_i,
        return stmmac_set_clk_tx_rate(bsp_priv, clk_tx_i, interface, speed);
 }
 
-static void imx_dwmac_fix_speed(void *priv, int speed, unsigned int mode)
+static void imx_dwmac_fix_speed(void *priv, phy_interface_t interface,
+                               int speed, unsigned int mode)
 {
        struct plat_stmmacenet_data *plat_dat;
        struct imx_priv_data *dwmac = priv;
@@ -185,13 +187,14 @@ static void imx_dwmac_fix_speed(void *priv, int speed, unsigned int mode)
                dev_err(dwmac->dev, "failed to set tx rate %lu\n", rate);
 }
 
-static void imx93_dwmac_fix_speed(void *priv, int speed, unsigned int mode)
+static void imx93_dwmac_fix_speed(void *priv, phy_interface_t interface,
+                                 int speed, unsigned int mode)
 {
        struct imx_priv_data *dwmac = priv;
        unsigned int iface;
        int ctrl, old_ctrl;
 
-       imx_dwmac_fix_speed(priv, speed, mode);
+       imx_dwmac_fix_speed(priv, interface, speed, mode);
 
        if (!dwmac || mode != MLO_AN_FIXED)
                return;
index 81521322358349f2268ae55e4473c46e81d94669..9c51c96223adfdd9c82dc198ab5b9138f6eeecde 100644 (file)
@@ -143,7 +143,8 @@ static struct stmmac_pci_info loongson_gmac_pci_info = {
        .setup = loongson_gmac_data,
 };
 
-static void loongson_gnet_fix_speed(void *priv, int speed, unsigned int mode)
+static void loongson_gnet_fix_speed(void *priv, phy_interface_t interface,
+                                   int speed, unsigned int mode)
 {
        struct loongson_data *ld = (struct loongson_data *)priv;
        struct net_device *ndev = dev_get_drvdata(ld->dev);
index bd5d3bf904008f2081428a15d7f699e49954c8ca..9b29516a5a7c708cc1a050be3556c43855559909 100644 (file)
@@ -643,7 +643,8 @@ static void ethqos_configure(struct qcom_ethqos *ethqos, int speed)
        return ethqos->configure_func(ethqos, speed);
 }
 
-static void ethqos_fix_mac_speed(void *priv, int speed, unsigned int mode)
+static void ethqos_fix_mac_speed(void *priv, phy_interface_t interface,
+                                int speed, unsigned int mode)
 {
        struct qcom_ethqos *ethqos = priv;
 
index 4c8991f3b38d73aa3406682a502d22c1a99634f0..c6b99814d391fed2387eb86e74536230f181a03d 100644 (file)
@@ -72,7 +72,8 @@ struct socfpga_dwmac {
        const struct socfpga_dwmac_ops *ops;
 };
 
-static void socfpga_dwmac_fix_mac_speed(void *bsp_priv, int speed,
+static void socfpga_dwmac_fix_mac_speed(void *bsp_priv,
+                                       phy_interface_t interface, int speed,
                                        unsigned int mode)
 {
        struct socfpga_dwmac *dwmac = (struct socfpga_dwmac *)bsp_priv;
index f50547b67fbc87a1c5550dd17b266a13aed3d0f8..6ebbf95d158f2b52e859b7cf16d63ce4ef7c536d 100644 (file)
@@ -91,11 +91,13 @@ struct sti_dwmac {
        struct regmap *regmap;
        bool gmac_en;
        int speed;
-       void (*fix_retime_src)(void *priv, int speed, unsigned int mode);
+       void (*fix_retime_src)(void *priv, phy_interface_t interface,
+                              int speed, unsigned int mode);
 };
 
 struct sti_dwmac_of_data {
-       void (*fix_retime_src)(void *priv, int speed, unsigned int mode);
+       void (*fix_retime_src)(void *priv, phy_interface_t interface,
+                              int speed, unsigned int mode);
 };
 
 enum {
@@ -114,7 +116,8 @@ static u32 stih4xx_tx_retime_val[] = {
                                 | STIH4XX_ETH_SEL_INTERNAL_NOTEXT_PHYCLK,
 };
 
-static void stih4xx_fix_retime_src(void *priv, int spd, unsigned int mode)
+static void stih4xx_fix_retime_src(void *priv, phy_interface_t interface,
+                                  int spd, unsigned int mode)
 {
        struct sti_dwmac *dwmac = priv;
        u32 src = dwmac->tx_retime_src;
@@ -170,7 +173,7 @@ static int sti_set_phy_intf_sel(void *bsp_priv, u8 phy_intf_sel)
        val = (dwmac->interface == PHY_INTERFACE_MODE_REVMII) ? 0 : ENMII;
        regmap_update_bits(regmap, reg, ENMII_MASK, val);
 
-       dwmac->fix_retime_src(dwmac, dwmac->speed, 0);
+       dwmac->fix_retime_src(dwmac, dwmac->interface, dwmac->speed, 0);
 
        return 0;
 }
index 82375d34ad57d62d3632169546b4787c47850dee..d7c730179a7f5ea77a06bfe30d7b7a7b5bae8004 100644 (file)
@@ -1071,7 +1071,8 @@ static void stmmac_mac_link_up(struct phylink_config *config,
        }
 
        if (priv->plat->fix_mac_speed)
-               priv->plat->fix_mac_speed(priv->plat->bsp_priv, speed, mode);
+               priv->plat->fix_mac_speed(priv->plat->bsp_priv, interface,
+                                         speed, mode);
 
        if (!duplex)
                ctrl &= ~priv->hw->link.duplex;
index 32352a216567e29b6bbfbdf8dc7913812b379247..b96ae9dadfaba6a5933f99d22c257b4917845542 100644 (file)
@@ -256,7 +256,8 @@ struct plat_stmmacenet_data {
        int (*set_phy_intf_sel)(void *priv, u8 phy_intf_sel);
        int (*set_clk_tx_rate)(void *priv, struct clk *clk_tx_i,
                               phy_interface_t interface, int speed);
-       void (*fix_mac_speed)(void *priv, int speed, unsigned int mode);
+       void (*fix_mac_speed)(void *priv, phy_interface_t interface,
+                             int speed, unsigned int mode);
        int (*fix_soc_reset)(struct stmmac_priv *priv);
        int (*serdes_powerup)(struct net_device *ndev, void *priv);
        void (*serdes_powerdown)(struct net_device *ndev, void *priv);