[U-Boot] [PATCH V3 5/6] net: fec_mxc: support i.MX8M with CLK_CCF
Schrempf Frieder
frieder.schrempf at kontron.de
Thu Oct 24 09:41:18 UTC 2019
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.fan at nxp.com>
Reviewed-by: Frieder Schrempf <frieder.schrempf at 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;
> };
>
>
More information about the U-Boot
mailing list