net: stmmac: pass interface mode into fix_mac_speed() method

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>
This commit is contained in:
Russell King (Oracle) 2026-02-23 09:34:41 +00:00 committed by Jakub Kicinski
parent 834c72ca30
commit cd0aa65153
8 changed files with 26 additions and 14 deletions

View 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;

View 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;

View 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);

View 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;

View 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;

View 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;
}

View 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;

View 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);