Handling of enet_out on i.MX28
Andy Duan
fugang.duan at nxp.com
Thu Oct 20 05:29:44 PDT 2016
From: Uwe Kleine-König <u.kleine-koenig at pengutronix.de> Sent: Thursday, October 20, 2016 5:11 PM
> To: Andy Duan <fugang.duan at nxp.com>; Fabio Estevam Estevam
> <fabio.estevam at nxp.com>; Shawn Guo <shawnguo at kernel.org>;
> devicetree at vger.kernel.org
> Cc: kernel at pengutronix.de; linux-arm-kernel at lists.infradead.org
> Subject: Handling of enet_out on i.MX28
>
> Hello,
>
> The i.MX28 reference manual specifies for HW_CLKCTRL_ENET.CLK_OUT_EN:
> "NOTE: This bit must be configured before ENET PLL is enabled.".
>
> Currently this is not implemented: ENET PLL (aka pll2) is the parent of
> enet_out and so common clk enables the PLL first and only then sets
> HW_CLKCTRL_ENET.CLK_OUT_EN.
>
> For now this is a theoretical problem because I don't see any issues. I only
> notice the discrepancy between manual and reality.
>
> Do you think this is a problem?
>
I don't know the history. But I think this is a problem. Maybe it bring some clock glitch that may cause PHY (with RMII) abnormal.
> Apart from that I'm not happy with the handling of this clk. IMHO it should
> better be called "enet-ref" or similar (for the fec). imx28.dtsi specifies that
> the clk is in use[1] and if my machine doesn't I have to
> do:
>
> &mac0 {
> ...
> /* overwrite clocks and clock-names to remove enet_out */
> clocks = <&clks 57>, <&clks 57>;
> clock-names = "ipg", "ahb";
> ...
> };
>
> in my board.dts. This is ugly because I have to repeat stuff that is already in
> imx28.dtsi and it's not understandable without the comment.
>
> It would be nice if dtc allowed to modify an array, then we could do:
>
> clocks += <&clks 64>;
> clock-names = += "enet_out";
>
> (assuming the included dtsi doesn't specify this clock).
>
> I first though it would be a good idea to specify the enet-ref clk as
> follows:
>
> &mac0 {
> ...
> mdio {
> clocks = <&clks 64>;
> clock-names = "enet-ref";
> ...
> };
> };
>
In RMII mode, this clock is for phy and MAC reference clock.
It is better to specify this clock as "enet_clk_ref" and "enet_out" that is easy to understand.
In dtsi file, we can just define ipg and ahb clock.
clocks = <&clks 57>, <&clks 57>;
clock-names = "ipg","ahb";
In dts file, different boards may have design mode like RMII/MII, RMII mode needs to define enet_out and enet_clk_ref, MII mode doesn't need this clocks.
So it depends on board design, we can overwrite the clock in dts board file.
Like in RMII mode:
clocks = <&clks 57>, <&clks 57>, <&clks 64>, <&clks 64>;
clock-names = "ipg","ahb", "enet_clk_ref","enet_out";
In MII mode: no necessary to overwrite them.
> but while this makes it easier for the board.dts to add (or remove) it, it's not
> really right this way because the reference clock is needed for data RX and TX,
> not the mdio bus. Technically these are two different buses even though the
> "passengers" are often the same. (Even if two MACs are in use, the enet-ref
> signal is shared.)
>
> What do you think?
>
> Best regards
> Uwe
>
> [1] clocks = <&clks 57>, <&clks 57>, <&clks 64>; clock-names = "ipg",
> "ahb", "enet_out"; in &mac0.
>
> --
> Pengutronix e.K. | Uwe Kleine-König |
> Industrial Linux Solutions | http://www.pengutronix.de/ |
More information about the linux-arm-kernel
mailing list