All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gary Thomas <gary@mlbassoc.com>
To: meta-freescale@yoctoproject.org
Subject: Re: Kernel 3.10.53 can't set ENET_REF_CLK to 50 MHz
Date: Mon, 11 May 2015 07:17:33 -0600	[thread overview]
Message-ID: <5550ABED.5030204@mlbassoc.com> (raw)
In-Reply-To: <5550AA0B.9080908@mail.bg>

[-- Attachment #1: Type: text/plain, Size: 2742 bytes --]

On 2015-05-11 07:09, Nikolay Dimitrov wrote:
> Hi gang,
>
> While porting kernel 3.10.53 to an imx6d-based board, I stumbled upon
> the following issue - my board has a 100 MBit/s RMII PHY which needs 50
> MHz reference clock from the SOC, but during the kernel initialization
> the clock is configured as 125 MHz (observed with a oscilloscope on a
> test pad). The reference clock is sent from pin GPIO_16 to the PHY.
>
> I assume there's no hardware issue with the board, as the old kernel
> 3.10.17 works fine on the same board. Also U-Boot successfully
> downloads the 3.10.53 kernel via network, just before observing the
> fore-mentioned issue.
>
> Here are the relevant parts of my DT:
>
>
> &fec {
>      pinctrl-names = "default";
>      pinctrl-0 = <&pinctrl_enet_4>;
>      phy-mode = "rmii";
>      phy-reset-gpios = <&gpio4 5 0>;
>      phy-reset-duration = <1>;
>      status = "okay";
> };
>
> &iomuxc {
>      pinctrl-names = "default";
>      pinctrl-0 = <&pinctrl_hog_1>;
>
>      enet {
>          pinctrl_enet_4: enetgrp-4 {
>              fsl,pins = <
>                  MX6QDL_PAD_GPIO_16__ENET_REF_CLK    0x4001b0a8
>                  MX6QDL_PAD_ENET_MDIO__ENET_MDIO        0x1b0b0
>                  MX6QDL_PAD_ENET_MDC__ENET_MDC        0x1b0b0
>                  MX6QDL_PAD_ENET_TXD0__ENET_TX_DATA0    0x1b0b0
>                  MX6QDL_PAD_ENET_TXD1__ENET_TX_DATA1    0x1b0b0
>                  MX6QDL_PAD_ENET_TX_EN__ENET_TX_EN    0x1b0b0
>                  MX6QDL_PAD_ENET_RXD0__ENET_RX_DATA0    0x1b0b0
>                  MX6QDL_PAD_ENET_RXD1__ENET_RX_DATA1    0x1b0b0
>                  MX6QDL_PAD_ENET_RX_ER__ENET_RX_ER    0x1b0b0
>                  MX6QDL_PAD_ENET_CRS_DV__ENET_RX_EN    0x1b0b0
>              >;
>          };
>      };
> };
>
>
> Here's a bootlog extract that shows the FEC-related messages:
>
>
> ...
> libphy: fec_enet_mii_bus: probed
> fec 2188000.ethernet eth0: registered PHC device 0
> ...
> fec 2188000.ethernet eth0: Freescale FEC PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=2188000.ethernet:01, irq
> =-1)
> IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
> Waiting up to 110 more seconds for network.
> ...
>
>
> In general, I'm looking at the appropriate way to set the
> CCM_ANALOG_PLL_ENET.DIV_SELECT to 50 MHz.
>
> Thanks in advance for your comments. Regards,
> Nikolay

Here's how I solved this - I added a "ref-clock" property to
my fec node and set it to 50MHz.

-- 
------------------------------------------------------------
Gary Thomas                 |  Consulting for the
MLB Associates              |    Embedded world
------------------------------------------------------------

[-- Attachment #2: 0001-Set-up-and-start-enet_ref-clock-needed-by-Micrel-PHY.patch --]
[-- Type: text/x-patch, Size: 1440 bytes --]

From f7b6e2268d7107e9e260c67644691e64d9432dfd Mon Sep 17 00:00:00 2001
From: Gary Thomas <gary@mlbassoc.com>
Date: Wed, 29 Apr 2015 09:19:21 -0600
Subject: [PATCH] Set up and start enet_ref clock - needed by Micrel PHY

---
 arch/arm/mach-imx/clk-imx6q.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c
index 608c9bcf..21dc524 100644
--- a/arch/arm/mach-imx/clk-imx6q.c
+++ b/arch/arm/mach-imx/clk-imx6q.c
@@ -753,16 +753,18 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
 	imx_clk_set_rate(clk[pll4_audio_div], 541900800);
 
         /* Set [default] enet_ref clock to 125M to supply for RGMII tx_clk */
-        clk_set_rate(clk[enet_ref], 125000000);
+        imx_clk_set_rate(clk[enet_ref], 125000000);
         np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-fec");
         if (np) {
                 u32 clock_frequency;
                 int ret;
                 ret = of_property_read_u32(np, "ref-clock", &clock_frequency);
                 if (ret == 0) {
-                        clk_set_rate(clk[enet_ref], clock_frequency);
+                        imx_clk_set_rate(clk[enet_ref], clock_frequency);
                 }
         }
+        // This clock may be needed very early on
+        imx_clk_prepare_enable(clk[enet_ref]);
 
 #ifdef CONFIG_MX6_VPU_352M
 	/*
-- 
1.9.1


  reply	other threads:[~2015-05-11 13:17 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-11 13:09 Kernel 3.10.53 can't set ENET_REF_CLK to 50 MHz Nikolay Dimitrov
2015-05-11 13:17 ` Gary Thomas [this message]
2015-05-11 14:15   ` Nikolay Dimitrov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5550ABED.5030204@mlbassoc.com \
    --to=gary@mlbassoc.com \
    --cc=meta-freescale@yoctoproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.