[U-Boot] [PATCH 3/3] net: ravb: Add clock handling support
Nobuhiro Iwamatsu
iwamatsu at nigauri.org
Wed Aug 2 23:16:11 UTC 2017
Applied to rmobile branch, thanks!
2017-07-22 6:20 GMT+09:00 Marek Vasut <marek.vasut at gmail.com>:
> Add support for enabling and disabling the clock using the clock
> framework based on the content of OF instead of doing it manually
> in the board file.
>
> Signed-off-by: Marek Vasut <marek.vasut+renesas at gmail.com>
> Cc: Joe Hershberger <joe.hershberger at ni.com>
> Cc: Nobuhiro Iwamatsu <iwamatsu at nigauri.org>
> ---
> drivers/net/ravb.c | 21 +++++++++++++++++++--
> 1 file changed, 19 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/net/ravb.c b/drivers/net/ravb.c
> index ce0eacceb6..8db127ba06 100644
> --- a/drivers/net/ravb.c
> +++ b/drivers/net/ravb.c
> @@ -10,6 +10,7 @@
> */
>
> #include <common.h>
> +#include <clk.h>
> #include <dm.h>
> #include <errno.h>
> #include <miiphy.h>
> @@ -120,6 +121,7 @@ struct ravb_priv {
> struct phy_device *phydev;
> struct mii_dev *bus;
> void __iomem *iobase;
> + struct clk clk;
> };
>
> static inline void ravb_flush_dcache(u32 addr, u32 len)
> @@ -432,27 +434,38 @@ int ravb_start(struct udevice *dev)
> struct ravb_priv *eth = dev_get_priv(dev);
> int ret;
>
> - ret = ravb_reset(dev);
> + ret = clk_enable(ð->clk);
> if (ret)
> return ret;
>
> + ret = ravb_reset(dev);
> + if (ret)
> + goto err;
> +
> ravb_base_desc_init(eth);
> ravb_tx_desc_init(eth);
> ravb_rx_desc_init(eth);
>
> ret = ravb_config(dev);
> if (ret)
> - return ret;
> + goto err;
>
> /* Setting the control will start the AVB-DMAC process. */
> writel(CCC_OPC_OPERATION, eth->iobase + RAVB_REG_CCC);
>
> return 0;
> +
> +err:
> + clk_disable(ð->clk);
> + return ret;
> }
>
> static void ravb_stop(struct udevice *dev)
> {
> + struct ravb_priv *eth = dev_get_priv(dev);
> +
> ravb_reset(dev);
> + clk_disable(ð->clk);
> }
>
> static int ravb_probe(struct udevice *dev)
> @@ -466,6 +479,10 @@ static int ravb_probe(struct udevice *dev)
> iobase = map_physmem(pdata->iobase, 0x1000, MAP_NOCACHE);
> eth->iobase = iobase;
>
> + ret = clk_get_by_index(dev, 0, ð->clk);
> + if (ret < 0)
> + goto err_mdio_alloc;
> +
> mdiodev = mdio_alloc();
> if (!mdiodev) {
> ret = -ENOMEM;
> --
> 2.11.0
>
--
Nobuhiro Iwamatsu
iwamatsu at {nigauri.org / debian.org}
GPG ID: 40AD1FA6
More information about the U-Boot
mailing list