Commit 196b07ba authored by Russell King (Oracle)'s avatar Russell King (Oracle) Committed by Jakub Kicinski
Browse files

net: stmmac: dwc-qos: clean up clock initialisation



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: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Tested-by: default avatarThierry Reding <treding@nvidia.com>
Link: https://patch.msgid.link/E1tmbhj-004vSz-Pt@rmk-PC.armlinux.org.uk


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent cff60826
Loading
Loading
Loading
Loading
+19 −14
Original line number Diff line number Diff line
@@ -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");