net: ravb: Support multiple clocks

The RZ/G2 series uses an external clock as a reference to the AVB.
If this clock is controlled by an external programmable clock,
it must be requested by the consumer or it will not turn on.
In order to do this, update the driver to use bulk enable and
disable functions to enable clocks for boards with multiple clocks.

Signed-off-by: Adam Ford <aford173@gmail.com>
This commit is contained in:
Adam Ford 2021-12-06 10:29:26 -06:00 committed by Marek Vasut
parent a1c01b17c5
commit 182754f43a

View file

@ -129,7 +129,7 @@ struct ravb_priv {
struct phy_device *phydev; struct phy_device *phydev;
struct mii_dev *bus; struct mii_dev *bus;
void __iomem *iobase; void __iomem *iobase;
struct clk clk; struct clk_bulk clks;
struct gpio_desc reset_gpio; struct gpio_desc reset_gpio;
}; };
@ -485,7 +485,7 @@ static int ravb_probe(struct udevice *dev)
iobase = map_physmem(pdata->iobase, 0x1000, MAP_NOCACHE); iobase = map_physmem(pdata->iobase, 0x1000, MAP_NOCACHE);
eth->iobase = iobase; eth->iobase = iobase;
ret = clk_get_by_index(dev, 0, &eth->clk); ret = clk_get_bulk(dev, &eth->clks);
if (ret < 0) if (ret < 0)
goto err_mdio_alloc; goto err_mdio_alloc;
@ -518,7 +518,7 @@ static int ravb_probe(struct udevice *dev)
eth->bus = miiphy_get_dev_by_name(dev->name); eth->bus = miiphy_get_dev_by_name(dev->name);
/* Bring up PHY */ /* Bring up PHY */
ret = clk_enable(&eth->clk); ret = clk_enable_bulk(&eth->clks);
if (ret) if (ret)
goto err_mdio_register; goto err_mdio_register;
@ -533,7 +533,7 @@ static int ravb_probe(struct udevice *dev)
return 0; return 0;
err_mdio_reset: err_mdio_reset:
clk_disable(&eth->clk); clk_release_bulk(&eth->clks);
err_mdio_register: err_mdio_register:
mdio_free(mdiodev); mdio_free(mdiodev);
err_mdio_alloc: err_mdio_alloc:
@ -545,7 +545,7 @@ static int ravb_remove(struct udevice *dev)
{ {
struct ravb_priv *eth = dev_get_priv(dev); struct ravb_priv *eth = dev_get_priv(dev);
clk_disable(&eth->clk); clk_release_bulk(&eth->clks);
free(eth->phydev); free(eth->phydev);
mdio_unregister(eth->bus); mdio_unregister(eth->bus);