net: stmmac: qcom-ethqos: convert to set_clk_tx_rate() method

Set the RGMII link clock using the set_clk_tx_rate() method rather than
coding it into the .fix_mac_speed() method. This simplifies ethqos's
ethqos_fix_mac_speed().

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/E1vuSLF-0000000ASci-42kh@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
master
Russell King (Oracle) 2026-02-23 09:35:01 +00:00 committed by Jakub Kicinski
parent fb42f19e67
commit 9192320a65
1 changed files with 11 additions and 10 deletions

View File

@ -103,7 +103,6 @@ struct qcom_ethqos {
void (*configure_func)(struct qcom_ethqos *ethqos,
phy_interface_t interface, int speed);
unsigned int link_clk_rate;
struct clk *link_clk;
struct phy *serdes_phy;
int serdes_speed;
@ -175,19 +174,20 @@ static void rgmii_dump(void *priv)
rgmii_readl(ethqos, EMAC_SYSTEM_LOW_POWER_DEBUG));
}
static void
ethqos_update_link_clk(struct qcom_ethqos *ethqos, int speed)
static int ethqos_set_clk_tx_rate(void *bsp_priv, struct clk *clk_tx_i,
phy_interface_t interface, int speed)
{
struct qcom_ethqos *ethqos = bsp_priv;
long rate;
if (!phy_interface_mode_is_rgmii(ethqos->phy_mode))
return;
if (!phy_interface_mode_is_rgmii(interface))
return 0;
rate = rgmii_clock(speed);
if (rate > 0)
ethqos->link_clk_rate = rate * 2;
if (rate < 0)
return rate;
clk_set_rate(ethqos->link_clk, ethqos->link_clk_rate);
return clk_set_rate(ethqos->link_clk, rate * 2);
}
static void
@ -643,7 +643,6 @@ static void ethqos_fix_mac_speed(void *priv, phy_interface_t interface,
{
struct qcom_ethqos *ethqos = priv;
ethqos_update_link_clk(ethqos, speed);
ethqos_configure(ethqos, interface, speed);
}
@ -821,12 +820,14 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
"Failed to get serdes phy\n");
ethqos->serdes_speed = SPEED_1000;
ethqos_update_link_clk(ethqos, SPEED_1000);
ethqos_set_clk_tx_rate(ethqos, NULL, plat_dat->phy_interface,
SPEED_1000);
qcom_ethqos_set_sgmii_loopback(ethqos, true);
ethqos_set_func_clk_en(ethqos);
plat_dat->bsp_priv = ethqos;
plat_dat->set_clk_tx_rate = ethqos_set_clk_tx_rate;
plat_dat->fix_mac_speed = ethqos_fix_mac_speed;
plat_dat->dump_debug_regs = rgmii_dump;
plat_dat->ptp_clk_freq_config = ethqos_ptp_clk_freq_config;