]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: stmmac: dwc-qos: clean up clock initialisation
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Mon, 24 Feb 2025 16:53:15 +0000 (16:53 +0000)
committerJakub Kicinski <kuba@kernel.org>
Wed, 26 Feb 2025 02:17:54 +0000 (18:17 -0800)
Clean up the clock initialisation by providing a helper to find a
named clock in the bulk clocks, and provide the name of the stmmac
clock in match data so we can locate the stmmac clock in generic
code.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Tested-by: Thierry Reding <treding@nvidia.com>
Link: https://patch.msgid.link/E1tmbhj-004vSz-Pt@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/dwmac-dwc-qos-eth.c

index acb0a2e1664f94c6d83ef1864154ef26e58fefe0..6cadf24a575c5a7da290fae5b8cf80df3ceed4fe 100644 (file)
@@ -35,6 +35,16 @@ struct tegra_eqos {
        struct gpio_desc *reset;
 };
 
+static struct clk *dwc_eth_find_clk(struct plat_stmmacenet_data *plat_dat,
+                                   const char *name)
+{
+       for (int i = 0; i < plat_dat->num_clks; i++)
+               if (strcmp(plat_dat->clks[i].id, name) == 0)
+                       return plat_dat->clks[i].clk;
+
+       return NULL;
+}
+
 static int dwc_eth_dwmac_config_dt(struct platform_device *pdev,
                                   struct plat_stmmacenet_data *plat_dat)
 {
@@ -121,12 +131,7 @@ static int dwc_qos_probe(struct platform_device *pdev,
                         struct plat_stmmacenet_data *plat_dat,
                         struct stmmac_resources *stmmac_res)
 {
-       for (int i = 0; i < plat_dat->num_clks; i++) {
-               if (strcmp(plat_dat->clks[i].id, "apb_pclk") == 0)
-                       plat_dat->stmmac_clk = plat_dat->clks[i].clk;
-               else if (strcmp(plat_dat->clks[i].id, "phy_ref_clk") == 0)
-                       plat_dat->pclk = plat_dat->clks[i].clk;
-       }
+       plat_dat->pclk = dwc_eth_find_clk(plat_dat, "phy_ref_clk");
 
        return 0;
 }
@@ -237,18 +242,12 @@ static int tegra_eqos_probe(struct platform_device *pdev,
 
        eqos->dev = &pdev->dev;
        eqos->regs = res->addr;
+       eqos->clk_slave = plat_dat->stmmac_clk;
 
        if (!is_of_node(dev->fwnode))
                goto bypass_clk_reset_gpio;
 
-       for (int i = 0; i < plat_dat->num_clks; i++) {
-               if (strcmp(plat_dat->clks[i].id, "slave_bus") == 0) {
-                       eqos->clk_slave = plat_dat->clks[i].clk;
-                       plat_dat->stmmac_clk = eqos->clk_slave;
-               } else if (strcmp(plat_dat->clks[i].id, "tx") == 0) {
-                       eqos->clk_tx = plat_dat->clks[i].clk;
-               }
-       }
+       eqos->clk_tx = dwc_eth_find_clk(plat_dat, "tx");
 
        eqos->reset = devm_gpiod_get(&pdev->dev, "phy-reset", GPIOD_OUT_HIGH);
        if (IS_ERR(eqos->reset)) {
@@ -312,15 +311,18 @@ struct dwc_eth_dwmac_data {
                     struct plat_stmmacenet_data *plat_dat,
                     struct stmmac_resources *res);
        void (*remove)(struct platform_device *pdev);
+       const char *stmmac_clk_name;
 };
 
 static const struct dwc_eth_dwmac_data dwc_qos_data = {
        .probe = dwc_qos_probe,
+       .stmmac_clk_name = "apb_pclk",
 };
 
 static const struct dwc_eth_dwmac_data tegra_eqos_data = {
        .probe = tegra_eqos_probe,
        .remove = tegra_eqos_remove,
+       .stmmac_clk_name = "slave_bus",
 };
 
 static int dwc_eth_dwmac_probe(struct platform_device *pdev)
@@ -360,6 +362,9 @@ static int dwc_eth_dwmac_probe(struct platform_device *pdev)
        if (ret)
                return dev_err_probe(&pdev->dev, ret, "Failed to enable clocks\n");
 
+       plat_dat->stmmac_clk = dwc_eth_find_clk(plat_dat,
+                                               data->stmmac_clk_name);
+
        ret = data->probe(pdev, plat_dat, &stmmac_res);
        if (ret < 0) {
                dev_err_probe(&pdev->dev, ret, "failed to probe subdriver\n");