diff options
Diffstat (limited to 'drivers/net/designware_tegra186.c')
-rw-r--r-- | drivers/net/designware_tegra186.c | 66 |
1 files changed, 19 insertions, 47 deletions
diff --git a/drivers/net/designware_tegra186.c b/drivers/net/designware_tegra186.c index 58484d4095..86f97e853e 100644 --- a/drivers/net/designware_tegra186.c +++ b/drivers/net/designware_tegra186.c @@ -1,4 +1,4 @@ -// SPDX-License-Identifier: GPL-2.0 +// SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2016, NVIDIA CORPORATION. * Copyright (c) 2019, Ahmad Fatoum, Pengutronix @@ -195,7 +195,7 @@ static int eqos_set_ethaddr_tegra186(struct eth_device *edev, const unsigned cha * ported to some system where the expectation above is true. */ - if (!eqos->started) { + if (!edev->active) { memcpy(eqos->macaddr, mac, 6); return 0; } @@ -203,7 +203,7 @@ static int eqos_set_ethaddr_tegra186(struct eth_device *edev, const unsigned cha return eqos_set_ethaddr(edev, mac); } -static int eqos_init_tegra186(struct device_d *dev, struct eqos *eqos) +static int eqos_init_tegra186(struct device *dev, struct eqos *eqos) { struct eqos_tegra186 *priv = to_tegra186(eqos); int phy_reset; @@ -213,12 +213,11 @@ static int eqos_init_tegra186(struct device_d *dev, struct eqos *eqos) priv->rst = reset_control_get(dev, "eqos"); if (IS_ERR(priv->rst)) { - ret = PTR_ERR(priv->rst); - dev_err(dev, "reset_get_by_name(rst) failed: %s\n", strerror(-ret)); - return ret; + dev_err(dev, "reset_get_by_name(rst) failed: %pe\n", priv->rst); + return PTR_ERR(priv->rst); } - phy_reset = of_get_named_gpio(dev->device_node, "phy-reset-gpios", 0); + phy_reset = of_get_named_gpio(dev->of_node, "phy-reset-gpios", 0); if (gpio_is_valid(phy_reset)) { ret = gpio_request(phy_reset, "phy-reset"); if (ret) @@ -230,29 +229,16 @@ static int eqos_init_tegra186(struct device_d *dev, struct eqos *eqos) priv->clks = xmemdup(tegra186_clks, sizeof(tegra186_clks)); priv->num_clks = ARRAY_SIZE(tegra186_clks); - return 0; - -release_res: - reset_control_put(priv->rst); - return ret; -} - -static int eqos_start_tegra186(struct eth_device *edev) -{ - struct eqos *eqos = edev->priv; - struct eqos_tegra186 *priv = to_tegra186(eqos); - int ret; - ret = clk_bulk_enable(priv->num_clks, priv->clks); if (ret < 0) { eqos_err(eqos, "clk_bulk_enable() failed: %s\n", strerror(-ret)); - return ret; + goto release_res; } ret = eqos_clks_set_rate_tegra186(priv); if (ret < 0) { eqos_err(eqos, "clks_set_rate() failed: %s\n", strerror(-ret)); - goto err; + goto err_stop_clks; } eqos_reset_tegra186(priv, false); @@ -261,30 +247,14 @@ static int eqos_start_tegra186(struct eth_device *edev) goto err_stop_clks; } - udelay(10); - - ret = eqos_start(edev); - if (ret) - goto err_stop_resets; - return 0; -err_stop_resets: - eqos_reset_tegra186(priv, true); err_stop_clks: clk_bulk_disable(priv->num_clks, priv->clks); -err: - return ret; -} - - -static void eqos_stop_tegra186(struct eth_device *edev) -{ - struct eqos_tegra186 *priv = to_tegra186(edev->priv); - - eqos_reset_tegra186(priv, true); +release_res: + reset_control_put(priv->rst); - clk_bulk_disable(priv->num_clks, priv->clks); + return ret; } static void eqos_adjust_link_tegra186(struct eth_device *edev) @@ -306,27 +276,28 @@ static const struct eqos_ops tegra186_ops = { .init = eqos_init_tegra186, .get_ethaddr = eqos_get_ethaddr, .set_ethaddr = eqos_set_ethaddr_tegra186, - .start = eqos_start_tegra186, - .stop = eqos_stop_tegra186, .adjust_link = eqos_adjust_link_tegra186, .get_csr_clk_rate = eqos_get_csr_clk_rate_tegra186, - .mdio_wait_us = 10, .clk_csr = EQOS_MDIO_ADDR_CR_20_35, .config_mac = EQOS_MAC_RXQ_CTRL0_RXQ0EN_ENABLED_DCB, }; -static int eqos_probe_tegra186(struct device_d *dev) +static int eqos_probe_tegra186(struct device *dev) { return eqos_probe(dev, &tegra186_ops, xzalloc(sizeof(struct eqos_tegra186))); } -static void eqos_remove_tegra186(struct device_d *dev) +static void eqos_remove_tegra186(struct device *dev) { struct eqos_tegra186 *priv = to_tegra186(dev->priv); eqos_remove(dev); + eqos_reset_tegra186(priv, true); + + clk_bulk_disable(priv->num_clks, priv->clks); + clk_bulk_put(priv->num_clks, priv->clks); gpio_free(priv->phy_reset_gpio); @@ -337,8 +308,9 @@ static const struct of_device_id eqos_tegra186_ids[] = { { .compatible = "nvidia,tegra186-eqos" }, { /* sentinel */ } }; +MODULE_DEVICE_TABLE(of, eqos_tegra186_ids); -static struct driver_d eqos_tegra186_driver = { +static struct driver eqos_tegra186_driver = { .name = "eqos-tegra186", .probe = eqos_probe_tegra186, .remove = eqos_remove_tegra186, |