All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Turquette <mturquette@linaro.org>
To: swarren@wwwdotorg.org, thierry.reding@gmail.com,
	gnurou@gmail.com, pdeschrijver@nvidia.com, rjw@rjwysocki.net,
	viresh.kumar@linaro.org
Cc: pwalmsley@nvidia.com, vinceh@nvidia.com, pgaikwad@nvidia.com,
	linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
	linux-tegra@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, tuomas.tynkkynen@iki.fi,
	Mikko Perttunen <mikko.perttunen@kapsi.fi>
Subject: Re: [PATCH v8 10/18] clk: tegra: Initialize PLL_X before CCLK_G to ensure it has a parent
Date: Fri, 10 Apr 2015 14:08:32 -0700	[thread overview]
Message-ID: <20150410210832.14369.65901@quantum> (raw)
In-Reply-To: <1425213881-5262-11-git-send-email-mikko.perttunen@kapsi.fi>

Quoting Mikko Perttunen (2015-03-01 04:44:33)
> This patch moves the initialization of PLL_X to be slightly before
> that of CCLK_G. This ensures that at boot, CCLK_G will immediately
> have a parent and the common clock framework can determine its
> clock rate correctly.
> 
> Without this patch, calling clk_put on CCLK_G could cause the CCF
> to set its rate to zero, hanging the system.

Hi Mikko,

Patch looks fine to me but I wanted to get more info on the behavior you
mentioned above about clk_put. Is there some special circumstance that
causes this for you? Why does calling clk_put adjust the rate of your
clock?

Thanks,
Mike

> 
> Signed-off-by: Mikko Perttunen <mikko.perttunen@kapsi.fi>
> ---
> v8:
> - Added
> 
>  drivers/clk/tegra/clk-tegra-super-gen4.c | 46 ++++++++++++++++++--------------
>  1 file changed, 26 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/clk/tegra/clk-tegra-super-gen4.c b/drivers/clk/tegra/clk-tegra-super-gen4.c
> index f1f4410..c5ea9ee 100644
> --- a/drivers/clk/tegra/clk-tegra-super-gen4.c
> +++ b/drivers/clk/tegra/clk-tegra-super-gen4.c
> @@ -104,6 +104,32 @@ void __init tegra_super_clk_gen4_init(void __iomem *clk_base,
>         struct clk *clk;
>         struct clk **dt_clk;
>  
> +       /*
> +        * Register PLL_X first so that CCLK_G has a parent at registration
> +        * time. This ensures that the common clock framework knows CCLK_G's
> +        * rate.
> +        */
> +
> +#if defined(CONFIG_ARCH_TEGRA_114_SOC) || defined(CONFIG_ARCH_TEGRA_124_SOC)
> +       /* PLLX */
> +       dt_clk = tegra_lookup_dt_id(tegra_clk_pll_x, tegra_clks);
> +       if (!dt_clk)
> +               return;
> +
> +       clk = tegra_clk_register_pllxc("pll_x", "pll_ref", clk_base,
> +                       pmc_base, CLK_IGNORE_UNUSED, params, NULL);
> +       *dt_clk = clk;
> +
> +       /* PLLX_OUT0 */
> +
> +       dt_clk = tegra_lookup_dt_id(tegra_clk_pll_x_out0, tegra_clks);
> +       if (!dt_clk)
> +               return;
> +       clk = clk_register_fixed_factor(NULL, "pll_x_out0", "pll_x",
> +                                       CLK_SET_RATE_PARENT, 1, 2);
> +       *dt_clk = clk;
> +#endif
> +
>         /* CCLKG */
>         dt_clk = tegra_lookup_dt_id(tegra_clk_cclk_g, tegra_clks);
>         if (dt_clk) {
> @@ -127,25 +153,5 @@ void __init tegra_super_clk_gen4_init(void __iomem *clk_base,
>         }
>  
>         tegra_sclk_init(clk_base, tegra_clks);
> -
> -#if defined(CONFIG_ARCH_TEGRA_114_SOC) || defined(CONFIG_ARCH_TEGRA_124_SOC)
> -       /* PLLX */
> -       dt_clk = tegra_lookup_dt_id(tegra_clk_pll_x, tegra_clks);
> -       if (!dt_clk)
> -               return;
> -
> -       clk = tegra_clk_register_pllxc("pll_x", "pll_ref", clk_base,
> -                       pmc_base, CLK_IGNORE_UNUSED, params, NULL);
> -       *dt_clk = clk;
> -
> -       /* PLLX_OUT0 */
> -
> -       dt_clk = tegra_lookup_dt_id(tegra_clk_pll_x_out0, tegra_clks);
> -       if (!dt_clk)
> -               return;
> -       clk = clk_register_fixed_factor(NULL, "pll_x_out0", "pll_x",
> -                                       CLK_SET_RATE_PARENT, 1, 2);
> -       *dt_clk = clk;
> -#endif
>  }
>  
> -- 
> 2.3.0
> 

WARNING: multiple messages have this Message-ID (diff)
From: Michael Turquette <mturquette@linaro.org>
To: Mikko Perttunen <mikko.perttunen@kapsi.fi>,
	swarren@wwwdotorg.org, thierry.reding@gmail.com,
	gnurou@gmail.com, pdeschrijver@nvidia.com, rjw@rjwysocki.net,
	viresh.kumar@linaro.org
Cc: pwalmsley@nvidia.com, vinceh@nvidia.com, pgaikwad@nvidia.com,
	linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
	linux-tegra@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, tuomas.tynkkynen@iki.fi,
	"Mikko Perttunen" <mikko.perttunen@kapsi.fi>
Subject: Re: [PATCH v8 10/18] clk: tegra: Initialize PLL_X before CCLK_G to ensure it has a parent
Date: Fri, 10 Apr 2015 14:08:32 -0700	[thread overview]
Message-ID: <20150410210832.14369.65901@quantum> (raw)
In-Reply-To: <1425213881-5262-11-git-send-email-mikko.perttunen@kapsi.fi>

Quoting Mikko Perttunen (2015-03-01 04:44:33)
> This patch moves the initialization of PLL_X to be slightly before
> that of CCLK_G. This ensures that at boot, CCLK_G will immediately
> have a parent and the common clock framework can determine its
> clock rate correctly.
> 
> Without this patch, calling clk_put on CCLK_G could cause the CCF
> to set its rate to zero, hanging the system.

Hi Mikko,

Patch looks fine to me but I wanted to get more info on the behavior you
mentioned above about clk_put. Is there some special circumstance that
causes this for you? Why does calling clk_put adjust the rate of your
clock?

Thanks,
Mike

> 
> Signed-off-by: Mikko Perttunen <mikko.perttunen@kapsi.fi>
> ---
> v8:
> - Added
> 
>  drivers/clk/tegra/clk-tegra-super-gen4.c | 46 ++++++++++++++++++--------------
>  1 file changed, 26 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/clk/tegra/clk-tegra-super-gen4.c b/drivers/clk/tegra/clk-tegra-super-gen4.c
> index f1f4410..c5ea9ee 100644
> --- a/drivers/clk/tegra/clk-tegra-super-gen4.c
> +++ b/drivers/clk/tegra/clk-tegra-super-gen4.c
> @@ -104,6 +104,32 @@ void __init tegra_super_clk_gen4_init(void __iomem *clk_base,
>         struct clk *clk;
>         struct clk **dt_clk;
>  
> +       /*
> +        * Register PLL_X first so that CCLK_G has a parent at registration
> +        * time. This ensures that the common clock framework knows CCLK_G's
> +        * rate.
> +        */
> +
> +#if defined(CONFIG_ARCH_TEGRA_114_SOC) || defined(CONFIG_ARCH_TEGRA_124_SOC)
> +       /* PLLX */
> +       dt_clk = tegra_lookup_dt_id(tegra_clk_pll_x, tegra_clks);
> +       if (!dt_clk)
> +               return;
> +
> +       clk = tegra_clk_register_pllxc("pll_x", "pll_ref", clk_base,
> +                       pmc_base, CLK_IGNORE_UNUSED, params, NULL);
> +       *dt_clk = clk;
> +
> +       /* PLLX_OUT0 */
> +
> +       dt_clk = tegra_lookup_dt_id(tegra_clk_pll_x_out0, tegra_clks);
> +       if (!dt_clk)
> +               return;
> +       clk = clk_register_fixed_factor(NULL, "pll_x_out0", "pll_x",
> +                                       CLK_SET_RATE_PARENT, 1, 2);
> +       *dt_clk = clk;
> +#endif
> +
>         /* CCLKG */
>         dt_clk = tegra_lookup_dt_id(tegra_clk_cclk_g, tegra_clks);
>         if (dt_clk) {
> @@ -127,25 +153,5 @@ void __init tegra_super_clk_gen4_init(void __iomem *clk_base,
>         }
>  
>         tegra_sclk_init(clk_base, tegra_clks);
> -
> -#if defined(CONFIG_ARCH_TEGRA_114_SOC) || defined(CONFIG_ARCH_TEGRA_124_SOC)
> -       /* PLLX */
> -       dt_clk = tegra_lookup_dt_id(tegra_clk_pll_x, tegra_clks);
> -       if (!dt_clk)
> -               return;
> -
> -       clk = tegra_clk_register_pllxc("pll_x", "pll_ref", clk_base,
> -                       pmc_base, CLK_IGNORE_UNUSED, params, NULL);
> -       *dt_clk = clk;
> -
> -       /* PLLX_OUT0 */
> -
> -       dt_clk = tegra_lookup_dt_id(tegra_clk_pll_x_out0, tegra_clks);
> -       if (!dt_clk)
> -               return;
> -       clk = clk_register_fixed_factor(NULL, "pll_x_out0", "pll_x",
> -                                       CLK_SET_RATE_PARENT, 1, 2);
> -       *dt_clk = clk;
> -#endif
>  }
>  
> -- 
> 2.3.0
> 

WARNING: multiple messages have this Message-ID (diff)
From: mturquette@linaro.org (Michael Turquette)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v8 10/18] clk: tegra: Initialize PLL_X before CCLK_G to ensure it has a parent
Date: Fri, 10 Apr 2015 14:08:32 -0700	[thread overview]
Message-ID: <20150410210832.14369.65901@quantum> (raw)
In-Reply-To: <1425213881-5262-11-git-send-email-mikko.perttunen@kapsi.fi>

Quoting Mikko Perttunen (2015-03-01 04:44:33)
> This patch moves the initialization of PLL_X to be slightly before
> that of CCLK_G. This ensures that at boot, CCLK_G will immediately
> have a parent and the common clock framework can determine its
> clock rate correctly.
> 
> Without this patch, calling clk_put on CCLK_G could cause the CCF
> to set its rate to zero, hanging the system.

Hi Mikko,

Patch looks fine to me but I wanted to get more info on the behavior you
mentioned above about clk_put. Is there some special circumstance that
causes this for you? Why does calling clk_put adjust the rate of your
clock?

Thanks,
Mike

> 
> Signed-off-by: Mikko Perttunen <mikko.perttunen@kapsi.fi>
> ---
> v8:
> - Added
> 
>  drivers/clk/tegra/clk-tegra-super-gen4.c | 46 ++++++++++++++++++--------------
>  1 file changed, 26 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/clk/tegra/clk-tegra-super-gen4.c b/drivers/clk/tegra/clk-tegra-super-gen4.c
> index f1f4410..c5ea9ee 100644
> --- a/drivers/clk/tegra/clk-tegra-super-gen4.c
> +++ b/drivers/clk/tegra/clk-tegra-super-gen4.c
> @@ -104,6 +104,32 @@ void __init tegra_super_clk_gen4_init(void __iomem *clk_base,
>         struct clk *clk;
>         struct clk **dt_clk;
>  
> +       /*
> +        * Register PLL_X first so that CCLK_G has a parent at registration
> +        * time. This ensures that the common clock framework knows CCLK_G's
> +        * rate.
> +        */
> +
> +#if defined(CONFIG_ARCH_TEGRA_114_SOC) || defined(CONFIG_ARCH_TEGRA_124_SOC)
> +       /* PLLX */
> +       dt_clk = tegra_lookup_dt_id(tegra_clk_pll_x, tegra_clks);
> +       if (!dt_clk)
> +               return;
> +
> +       clk = tegra_clk_register_pllxc("pll_x", "pll_ref", clk_base,
> +                       pmc_base, CLK_IGNORE_UNUSED, params, NULL);
> +       *dt_clk = clk;
> +
> +       /* PLLX_OUT0 */
> +
> +       dt_clk = tegra_lookup_dt_id(tegra_clk_pll_x_out0, tegra_clks);
> +       if (!dt_clk)
> +               return;
> +       clk = clk_register_fixed_factor(NULL, "pll_x_out0", "pll_x",
> +                                       CLK_SET_RATE_PARENT, 1, 2);
> +       *dt_clk = clk;
> +#endif
> +
>         /* CCLKG */
>         dt_clk = tegra_lookup_dt_id(tegra_clk_cclk_g, tegra_clks);
>         if (dt_clk) {
> @@ -127,25 +153,5 @@ void __init tegra_super_clk_gen4_init(void __iomem *clk_base,
>         }
>  
>         tegra_sclk_init(clk_base, tegra_clks);
> -
> -#if defined(CONFIG_ARCH_TEGRA_114_SOC) || defined(CONFIG_ARCH_TEGRA_124_SOC)
> -       /* PLLX */
> -       dt_clk = tegra_lookup_dt_id(tegra_clk_pll_x, tegra_clks);
> -       if (!dt_clk)
> -               return;
> -
> -       clk = tegra_clk_register_pllxc("pll_x", "pll_ref", clk_base,
> -                       pmc_base, CLK_IGNORE_UNUSED, params, NULL);
> -       *dt_clk = clk;
> -
> -       /* PLLX_OUT0 */
> -
> -       dt_clk = tegra_lookup_dt_id(tegra_clk_pll_x_out0, tegra_clks);
> -       if (!dt_clk)
> -               return;
> -       clk = clk_register_fixed_factor(NULL, "pll_x_out0", "pll_x",
> -                                       CLK_SET_RATE_PARENT, 1, 2);
> -       *dt_clk = clk;
> -#endif
>  }
>  
> -- 
> 2.3.0
> 

  reply	other threads:[~2015-04-10 21:08 UTC|newest]

Thread overview: 90+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-01 12:44 [PATCH v8 00/18] Tegra124 CL-DVFS / DFLL clocksource + cpufreq Mikko Perttunen
2015-03-01 12:44 ` Mikko Perttunen
2015-03-01 12:44 ` [PATCH v8 02/18] clk: tegra: Add library for the DFLL clock source (open-loop mode) Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
2015-03-01 12:44 ` [PATCH v8 04/18] clk: tegra: Add functions for parsing CVB tables Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
     [not found] ` <1425213881-5262-1-git-send-email-mikko.perttunen-/1wQRMveznE@public.gmane.org>
2015-03-01 12:44   ` [PATCH v8 01/18] clk: tegra: Add binding for the Tegra124 DFLL clocksource Mikko Perttunen
2015-03-01 12:44     ` Mikko Perttunen
2015-03-01 12:44     ` Mikko Perttunen
2015-03-01 12:44   ` [PATCH v8 03/18] clk: tegra: Add closed loop support for the DFLL Mikko Perttunen
2015-03-01 12:44     ` Mikko Perttunen
2015-03-01 12:44     ` Mikko Perttunen
2015-03-01 12:44   ` [PATCH v8 05/18] clk: tegra: Introduce ability for SoC-specific reset control callbacks Mikko Perttunen
2015-03-01 12:44     ` Mikko Perttunen
2015-03-01 12:44     ` Mikko Perttunen
2015-03-01 12:44   ` [PATCH v8 07/18] clk: tegra: Add Tegra124 DFLL clocksource platform driver Mikko Perttunen
2015-03-01 12:44     ` Mikko Perttunen
2015-03-01 12:44     ` Mikko Perttunen
2015-03-01 12:44   ` [PATCH v8 11/18] ARM: tegra: Add the DFLL to Tegra124 device tree Mikko Perttunen
2015-03-01 12:44     ` Mikko Perttunen
2015-03-01 12:44     ` Mikko Perttunen
2015-03-01 12:44   ` [PATCH v8 16/18] ARM: tegra: Add entries for cpufreq on Tegra124 Mikko Perttunen
2015-03-01 12:44     ` Mikko Perttunen
2015-03-01 12:44     ` Mikko Perttunen
2015-03-01 12:44 ` [PATCH v8 06/18] clk: tegra: Add DFLL DVCO reset control for Tegra124 Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
2015-03-01 12:44 ` [PATCH v8 08/18] clk: tegra: Save/restore CCLKG_BURST_POLICY on suspend Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
2015-03-01 12:44 ` [PATCH v8 09/18] clk: tegra: Add the DFLL as a possible parent of the cclk_g clock Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
2015-03-01 12:44 ` [PATCH v8 10/18] clk: tegra: Initialize PLL_X before CCLK_G to ensure it has a parent Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
2015-04-10 21:08   ` Michael Turquette [this message]
2015-04-10 21:08     ` Michael Turquette
2015-04-10 21:08     ` Michael Turquette
2015-04-11 11:00     ` Mikko Perttunen
2015-04-11 11:00       ` Mikko Perttunen
2015-04-11 11:00       ` Mikko Perttunen
2015-04-13 12:17       ` Tomeu Vizoso
2015-04-13 12:17         ` Tomeu Vizoso
2015-04-13 12:17         ` Tomeu Vizoso
     [not found]         ` <CAAObsKCHUG7Auwu29My5xfynsQ1Jm6KB0bGxf1e3uUO6dvsBRA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-04-13 19:31           ` Michael Turquette
2015-04-13 19:31             ` Michael Turquette
2015-04-13 19:31             ` Michael Turquette
2015-04-13 19:35             ` Mikko Perttunen
2015-04-13 19:35               ` Mikko Perttunen
2015-04-13 19:35               ` Mikko Perttunen
2015-03-01 12:44 ` [PATCH v8 12/18] ARM: tegra: Enable the DFLL on the Jetson TK1 Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
2015-03-01 12:44 ` [PATCH v8 13/18] cpufreq: tegra124: Add device tree bindings Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
2015-03-01 12:44 ` [PATCH v8 14/18] cpufreq: tegra: Rename tegra-cpufreq to tegra20-cpufreq Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
2015-03-01 12:44 ` [PATCH v8 15/18] cpufreq: Add cpufreq driver for Tegra124 Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
2015-03-02  8:49   ` Paul Bolle
2015-03-02  8:49     ` Paul Bolle
2015-03-03 11:33     ` Mikko Perttunen
2015-03-03 11:33       ` Mikko Perttunen
2015-03-04  7:11       ` Tuomas Tynkkynen
2015-03-04  7:11         ` Tuomas Tynkkynen
2015-03-05 10:15         ` Mikko Perttunen
2015-03-05 10:15           ` Mikko Perttunen
2015-03-01 12:44 ` [PATCH v8 17/18] ARM: tegra: Add CPU regulator to the Jetson TK1 device tree Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
2015-03-01 12:44 ` [PATCH v8 18/18] ARM: tegra: enable Tegra124 cpufreq driver by default Mikko Perttunen
2015-03-01 12:44   ` Mikko Perttunen
2015-03-11 10:07 ` [PATCH v8 00/18] Tegra124 CL-DVFS / DFLL clocksource + cpufreq Thierry Reding
2015-03-11 10:07   ` Thierry Reding
2015-04-10 21:11   ` Michael Turquette
2015-04-10 21:11     ` Michael Turquette
2015-04-14 11:25     ` Mikko Perttunen
2015-04-14 11:25       ` Mikko Perttunen
2015-04-14 17:21       ` Boris Brezillon
2015-04-14 17:21         ` Boris Brezillon
2015-04-14 19:40         ` Mikko Perttunen
2015-04-14 19:40           ` Mikko Perttunen
2015-04-14 21:06           ` Michael Turquette
2015-04-14 21:06             ` Michael Turquette
2015-04-14 21:10             ` Mikko Perttunen
2015-04-14 21:10               ` Mikko Perttunen
2015-04-14 14:43     ` Thierry Reding
2015-04-14 14:43       ` Thierry Reding
2015-04-14 21:09       ` Michael Turquette
2015-04-14 21:09         ` Michael Turquette

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=20150410210832.14369.65901@quantum \
    --to=mturquette@linaro.org \
    --cc=gnurou@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=mikko.perttunen@kapsi.fi \
    --cc=pdeschrijver@nvidia.com \
    --cc=pgaikwad@nvidia.com \
    --cc=pwalmsley@nvidia.com \
    --cc=rjw@rjwysocki.net \
    --cc=swarren@wwwdotorg.org \
    --cc=thierry.reding@gmail.com \
    --cc=tuomas.tynkkynen@iki.fi \
    --cc=vinceh@nvidia.com \
    --cc=viresh.kumar@linaro.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.