From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lukasz Majewski Date: Wed, 2 Jan 2019 09:47:37 +0100 Subject: [U-Boot] [PATCH v1 11/14] DM: net: imx: Provide weak function to initialize fec clocks In-Reply-To: References: <20190101233745.16433-1-lukma@denx.de> <20190101233745.16433-12-lukma@denx.de> Message-ID: <20190102094737.1e1b1111@jawa> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Marek, > On 1/2/19 12:37 AM, Lukasz Majewski wrote: > > This patch is necessary to initialize some board/soc specific > > clocks - like anatop, which is used to clock PHY and FEC block > > itself. > > > > The initialization is performed with device tree by introducing two > > new properties - namely; > > 'fsl,enet-loopback-clk' and 'fsl,enet-freq' which specify the need > > to select proper enet clock and the clock value itself. > > > > Previously this setup was done in the board_etc_init() function, > > which has been removed after switching to DM/DTS. > > > > Signed-off-by: Lukasz Majewski > > --- > > > > drivers/net/fec_mxc.c | 25 +++++++++++++++++++++++++ > > drivers/net/fec_mxc.h | 2 ++ > > 2 files changed, 27 insertions(+) > > > > diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c > > index 99c5c649a0..728d6c9456 100644 > > --- a/drivers/net/fec_mxc.c > > +++ b/drivers/net/fec_mxc.c > > @@ -1297,6 +1297,23 @@ static void fec_gpio_reset(struct fec_priv > > *priv) } > > } > > #endif > > +/* > > + * This function is mostly intended for some soc/board specific > > + * clock initialization (like anatop clock on iMX6) done > > + * previously in board_eth_init() > > + */ > > +__weak int set_fec_clock(int fec_id, enum enet_freq freq); > > + > > +static int fec_clk_init(struct udevice *dev) > > +{ > > + struct fec_priv *priv = dev_get_priv(dev); > > + int ret = 0; > > + > > + if (priv->enet_loopback_clk) > > + ret = set_fec_clock(dev->seq, priv->freq); > > + > > + return ret; > > +} > > > > static int fecmxc_probe(struct udevice *dev) > > { > > @@ -1321,6 +1338,10 @@ static int fecmxc_probe(struct udevice *dev) > > priv->clk_rate = clk_get_rate(&priv->ipg_clk); > > } > > > > + ret = fec_clk_init(dev); > > + if (ret) > > + return ret; > > + > > ret = fec_alloc_descs(priv); > > if (ret) > > return ret; > > @@ -1455,6 +1476,10 @@ static int fecmxc_ofdata_to_platdata(struct > > udevice *dev) } > > #endif > > > > + priv->enet_loopback_clk = dev_read_bool(dev, > > "fsl,enet-loopback-clk"); > > + if (priv->enet_loopback_clk) > > + dev_read_u32(dev, "fsl,enet-freq", &priv->freq); > > dev_read_u32() returns error value, so what happens if this fails ? Good point - I will add the necessary check. > > > + > > return 0; > > } > > > > diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h > > index e9a661f0a1..666b34304c 100644 > > --- a/drivers/net/fec_mxc.h > > +++ b/drivers/net/fec_mxc.h > > @@ -261,6 +261,8 @@ struct fec_priv { > > #endif > > #ifdef CONFIG_DM_ETH > > u32 interface; > > + bool enet_loopback_clk; /* anatop reference clk via PAD > > loopback */ > > + enum enet_freq freq; > > #endif > > struct clk ipg_clk; > > u32 clk_rate; > > > > Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma at denx.de -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 488 bytes Desc: OpenPGP digital signature URL: