public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
From: phdm@macq.eu (Philippe De Muyter)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: imx6q: support ptp and rmii clock from pad
Date: Fri, 7 Feb 2014 11:45:18 +0100	[thread overview]
Message-ID: <20140207104518.GA7085@frolo.macqel> (raw)
In-Reply-To: <1391666018-12825-1-git-send-email-shawn.guo@linaro.org>

Thanks, Shawn

your patch works perfectly.  I can now use the same kernel on my sabresd
board (RGMII, enet_ref_clock generated by the imx6q) and my custom board
(RMII, clock generated by the PHY).

some comments. though :

the patch did not apply cleanly in clk-imx6q.c on v3.13

don't forget to complete Documentation/devicetree/bindings/

But, again, many thanks for the support

Philippe


On Thu, Feb 06, 2014 at 01:53:38PM +0800, Shawn Guo wrote:
> On imx6qdl, the ENET RMII and PTP clock can come from either internal
> ANATOP/CCM or external clock source through pad GPIO_16.  But in case
> of the external clock source, bit IOMUXC_GPR1[21] needs to be cleared.
> 
> The patch adds the support for systems that use an external clock source
> and distinguishes above two cases by checking if the PTP clock specified
> in device tree is the one coming from the internal ANATOP/CCM.
> 
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> ---
>  arch/arm/mach-imx/clk-imx6q.c  |    1 +
>  arch/arm/mach-imx/mach-imx6q.c |   36 +++++++++++++++++++++++++++++++++++-
>  2 files changed, 36 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c
> index dd4f1e3..45de2e5 100644
> --- a/arch/arm/mach-imx/clk-imx6q.c
> +++ b/arch/arm/mach-imx/clk-imx6q.c
> @@ -437,6 +437,7 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
>  
>  	clk_register_clkdev(clk[gpt_ipg], "ipg", "imx-gpt.0");
>  	clk_register_clkdev(clk[gpt_ipg_per], "per", "imx-gpt.0");
> +	clk_register_clkdev(clk[enet_ref], "enet_ref", NULL);
>  
>  	if ((imx_get_soc_revision() != IMX_CHIP_REVISION_1_0) ||
>  	    cpu_is_imx6dl()) {
> diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c
> index f9cbbf9..d131499b 100644
> --- a/arch/arm/mach-imx/mach-imx6q.c
> +++ b/arch/arm/mach-imx/mach-imx6q.c
> @@ -182,16 +182,50 @@ static void __init imx6q_enet_phy_init(void)
>  
>  static void __init imx6q_1588_init(void)
>  {
> +	struct device_node *np;
> +	struct clk *ptp_clk;
> +	struct clk *enet_ref;
>  	struct regmap *gpr;
> +	u32 clksel;
> +
> +	np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-fec");
> +	if (!np) {
> +		pr_warn("%s: failed to find fec node\n", __func__);
> +		return;
> +	}
> +
> +	ptp_clk = of_clk_get(np, 2);
> +	if (IS_ERR(ptp_clk)) {
> +		pr_warn("%s: failed to get ptp clock\n", __func__);
> +		goto put_node;
> +	}
> +
> +	enet_ref = clk_get_sys(NULL, "enet_ref");
> +	if (IS_ERR(enet_ref)) {
> +		pr_warn("%s: failed to get enet clock\n", __func__);
> +		goto put_ptp_clk;
> +	}
>  
> +	/*
> +	 * If enet_ref from ANATOP/CCM is the PTP clock source, we need to
> +	 * set bit IOMUXC_GPR1[21].  Or the PTP clock must be from pad
> +	 * (external OSC), and we need to clear the bit.
> +	 */
> +	clksel = ptp_clk == enet_ref ? IMX6Q_GPR1_ENET_CLK_SEL_ANATOP :
> +				       IMX6Q_GPR1_ENET_CLK_SEL_PAD;
>  	gpr = syscon_regmap_lookup_by_compatible("fsl,imx6q-iomuxc-gpr");
>  	if (!IS_ERR(gpr))
>  		regmap_update_bits(gpr, IOMUXC_GPR1,
>  				IMX6Q_GPR1_ENET_CLK_SEL_MASK,
> -				IMX6Q_GPR1_ENET_CLK_SEL_ANATOP);
> +				clksel);
>  	else
>  		pr_err("failed to find fsl,imx6q-iomux-gpr regmap\n");
>  
> +	clk_put(enet_ref);
> +put_ptp_clk:
> +	clk_put(ptp_clk);
> +put_node:
> +	of_node_put(np);
>  }
>  
>  static void __init imx6q_init_machine(void)
> -- 
> 1.7.9.5
> 

-- 
Philippe De Muyter +32 2 6101532 Macq SA rue de l'Aeronef 2 B-1140 Bruxelles

  reply	other threads:[~2014-02-07 10:45 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-06  5:53 [PATCH] ARM: imx6q: support ptp and rmii clock from pad Shawn Guo
2014-02-07 10:45 ` Philippe De Muyter [this message]
2014-02-10  6:03   ` Shawn Guo
2014-02-10  8:26     ` Philippe De Muyter

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=20140207104518.GA7085@frolo.macqel \
    --to=phdm@macq.eu \
    --cc=linux-arm-kernel@lists.infradead.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox