On 24.10.19 11:33, Peng Fan wrote:
> Add more clks for fec_mxc according to Linux Kernel 5.4.0-rc1
> drivers/net/ethernet/freescale/fec_main.c.
> 
> Since i.MX8MQ not support CLK_CCF, so add a check to restrict
> the code only effect when CONFIG_IMX8M and CONFIG_CLK_CCF both defined.
> 
> Signed-off-by: Peng Fan <peng....@nxp.com>

Reviewed-by: Frieder Schrempf <frieder.schre...@kontron.de>

> ---
> 
> V3:
>   Drop unneeded else
>   correct ipg->ahb
>   Other patches keep V1
> 
> V2:
>   Use CONFIG_IS_ENABLED
> 
>   drivers/net/fec_mxc.c | 72 
> ++++++++++++++++++++++++++++++++++++++++-----------
>   drivers/net/fec_mxc.h |  4 +++
>   2 files changed, 61 insertions(+), 15 deletions(-)
> 
> diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c
> index 080dbcf7db..5bc31fd362 100644
> --- a/drivers/net/fec_mxc.c
> +++ b/drivers/net/fec_mxc.c
> @@ -125,28 +125,29 @@ static int fec_mdio_read(struct ethernet_regs *eth, 
> uint8_t phyaddr,
>   
>   static int fec_get_clk_rate(void *udev, int idx)
>   {
> -#if IS_ENABLED(CONFIG_IMX8)
>       struct fec_priv *fec;
>       struct udevice *dev;
>       int ret;
>   
> -     dev = udev;
> -     if (!dev) {
> -             ret = uclass_get_device(UCLASS_ETH, idx, &dev);
> -             if (ret < 0) {
> -                     debug("Can't get FEC udev: %d\n", ret);
> -                     return ret;
> +     if (IS_ENABLED(CONFIG_IMX8) ||
> +         CONFIG_IS_ENABLED(CLK_CCF)) {
> +             dev = udev;
> +             if (!dev) {
> +                     ret = uclass_get_device(UCLASS_ETH, idx, &dev);
> +                     if (ret < 0) {
> +                             debug("Can't get FEC udev: %d\n", ret);
> +                             return ret;
> +                     }
>               }
> -     }
>   
> -     fec = dev_get_priv(dev);
> -     if (fec)
> -             return fec->clk_rate;
> +             fec = dev_get_priv(dev);
> +             if (fec)
> +                     return fec->clk_rate;
>   
> -     return -EINVAL;
> -#else
> -     return imx_get_fecclk();
> -#endif
> +             return -EINVAL;
> +     } else {
> +             return imx_get_fecclk();
> +     }
>   }
>   
>   static void fec_mii_setspeed(struct ethernet_regs *eth)
> @@ -1335,6 +1336,47 @@ static int fecmxc_probe(struct udevice *dev)
>                       return ret;
>               }
>   
> +             priv->clk_rate = clk_get_rate(&priv->ipg_clk);
> +     } else if (CONFIG_IS_ENABLED(CLK_CCF)) {
> +             ret = clk_get_by_name(dev, "ipg", &priv->ipg_clk);
> +             if (ret < 0) {
> +                     debug("Can't get FEC ipg clk: %d\n", ret);
> +                     return ret;
> +             }
> +             ret = clk_enable(&priv->ipg_clk);
> +             if(ret)
> +                     return ret;
> +
> +             ret = clk_get_by_name(dev, "ahb", &priv->ahb_clk);
> +             if (ret < 0) {
> +                     debug("Can't get FEC ahb clk: %d\n", ret);
> +                     return ret;
> +             }
> +             ret = clk_enable(&priv->ahb_clk);
> +             if (ret)
> +                     return ret;
> +
> +             ret = clk_get_by_name(dev, "enet_out", &priv->clk_enet_out);
> +             if (!ret) {
> +                     ret = clk_enable(&priv->clk_enet_out);
> +                     if (ret)
> +                             return ret;
> +             }
> +
> +             ret = clk_get_by_name(dev, "enet_clk_ref", &priv->clk_ref);
> +             if (!ret) {
> +                     ret = clk_enable(&priv->clk_ref);
> +                     if (ret)
> +                             return ret;
> +             }
> +
> +             ret = clk_get_by_name(dev, "ptp", &priv->clk_ptp);
> +             if (!ret) {
> +                     ret = clk_enable(&priv->clk_ptp);
> +                     if (ret)
> +                             return ret;
> +             }
> +
>               priv->clk_rate = clk_get_rate(&priv->ipg_clk);
>       }
>   
> diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h
> index e5f2dd75c5..723b06a651 100644
> --- a/drivers/net/fec_mxc.h
> +++ b/drivers/net/fec_mxc.h
> @@ -264,6 +264,10 @@ struct fec_priv {
>       u32 interface;
>   #endif
>       struct clk ipg_clk;
> +     struct clk ahb_clk;
> +     struct clk clk_enet_out;
> +     struct clk clk_ref;
> +     struct clk clk_ptp;
>       u32 clk_rate;
>   };
>   
> 
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to