All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Turquette <mturquette@linaro.org>
To: Tero Kristo <t-kristo@ti.com>, Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: Stefan Roese <stefan.roese@gmail.com>,
	linux-omap <linux-omap@vger.kernel.org>,
	Paul Walmsley <paul@pwsan.com>
Subject: Re: Odd behavior with dpll4_m4x2_ck on omap3 + DT
Date: Tue, 10 Sep 2013 14:17:47 -0700	[thread overview]
Message-ID: <20130910211747.11074.21480@quantum> (raw)
In-Reply-To: <522F1BF9.5050006@ti.com>

Quoting Tero Kristo (2013-09-10 06:17:45)
> On 09/10/2013 03:40 PM, Tomi Valkeinen wrote:
> > On 10/09/13 15:24, Tero Kristo wrote:
> >> On 09/10/2013 03:19 PM, Tomi Valkeinen wrote:
> >>> On 10/09/13 15:12, Tero Kristo wrote:
> >>>
> >>>> If it claims it is not locked, it means the DPLL itself is disabled. You
> >>>> could try clk_enable for the clock before doing clk_set_rate.
> >>>
> >>> Hmm, so is it required to enable the clock before setting the rate? If
> >>> so, I think I'm using the clocks wrong in all the places =).
> >>
> >> In generic case, it is not. But DPLLs behave strangely if they go to low
> >> power stop mode. If there is any downstream clock enabled for a specific
> >> DPLL it is enabled and things work okay.
> >>
> >> One could also argue that the API behavior in OMAP is wrong currently,
> >> as the bypass rate is something you are most likely never actually going
> >> to use for anything....
> >>
> >> Just try the change and check the results.
> >
> > Ok, so as Stefan said, enabling the clock fixes the issue.
> >
> > How do you suggest we fix this? Changing omapdss to enable the clock
> > before changing its rate is not very difficult, so it can be used as a
> > quick fix. But it doesn't sound like a proper fix if this is not
> > normally required.
> 
> The quick fix sounds good to me.
> 
> > And, maybe I'm missing something as I don't have good understanding of
> > the PRCM's PLLs, but the current behavior sounds odd. So the DPLL is
> > off, and in bypass mode. When we try to change the rate of the clock
> > provided by the PLL, shouldn't it fail, as bypass mode's rate cannot be
> > changed? Or better, change the non-bypass rate.
> 
> In theory, DPLLs can also be used in their bypass mode to feed customer 
> nodes clocks. I just think the check in the clkoutx2_recalc is wrong, 
> and should be enhanced to actually check what is the target mode for the 
> clock once it is enabled. Maybe something like this would work properly:
> 
> diff --git a/arch/arm/mach-omap2/dpll3xxx.c b/arch/arm/mach-omap2/dpll3xxx.c
> index 3a0296c..ba218fb 100644
> --- a/arch/arm/mach-omap2/dpll3xxx.c
> +++ b/arch/arm/mach-omap2/dpll3xxx.c
> @@ -658,14 +658,12 @@ unsigned long omap3_clkoutx2_recalc(struct clk_hw *hw,
> 
>          dd = pclk->dpll_data;
> 
> -       WARN_ON(!dd->enable_mask);
> -
> -       v = __raw_readl(dd->control_reg) & dd->enable_mask;
> -       v >>= __ffs(dd->enable_mask);
> -       if ((v != OMAP3XXX_EN_DPLL_LOCKED) || (dd->flags & DPLL_J_TYPE))
> +       if ((dd->flags & DPLL_J_TYPE) ||
> +           __clk_get_rate(dd->clk_bypass) == __clk_get_rate(pclk))

Two quick asides here:

1) might be nice if the J_TYPE pll was it's own clock type

2) would be nice if the check for bypass used something like:

if (clk_get_parent(hw->clk) == dd->bypass_clk)
	rate = parent_rate;

Which implies that the DPLLs become proper mux clocks.

Regards,
Mike

>                  rate = parent_rate;
>          else
>                  rate = parent_rate * 2;
> +
>          return rate;
>   }
> 
> 
> >
> > How is the DPLL4's clock rate 432000000 anyway in bypass mode. Isn't
> > bypass mode usually plain sys-clock, or such?
> 
> This again reflects the rate that the clock has once it is enabled, the 
> clkoutx2 does not.
> 
> Getting comment from someone like Paul would probably help here.
> 
> -Tero

  reply	other threads:[~2013-09-10 21:17 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-28  9:22 Odd behavior with dpll4_m4x2_ck on omap3 + DT Tomi Valkeinen
2013-08-28  9:48 ` Tero Kristo
2013-08-28 10:14   ` Tomi Valkeinen
2013-08-28 11:40     ` Tero Kristo
2013-09-10 11:33       ` Stefan Roese
2013-09-10 12:12         ` Tero Kristo
2013-09-10 12:19           ` Tomi Valkeinen
2013-09-10 12:24             ` Tero Kristo
2013-09-10 12:40               ` Tomi Valkeinen
2013-09-10 13:17                 ` Tero Kristo
2013-09-10 21:17                   ` Mike Turquette [this message]
2013-09-10 21:57                     ` Mike Turquette
2013-09-11  7:21                   ` Tomi Valkeinen
2013-09-13  7:51                     ` Stefan Roese
2013-09-13 11:34                       ` Tero Kristo
2013-09-16 19:45                         ` Mike Turquette
2013-09-27  8:41                         ` Tomi Valkeinen
2013-09-27 11:24                           ` Tero Kristo
2013-09-30  7:56                             ` Tomi Valkeinen
2013-10-07  8:21                   ` Paul Walmsley
2013-10-08  1:35                     ` Mike Turquette
2013-10-13 20:17                       ` Paul Walmsley
2013-09-10 12:25           ` Stefan Roese

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=20130910211747.11074.21480@quantum \
    --to=mturquette@linaro.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=paul@pwsan.com \
    --cc=stefan.roese@gmail.com \
    --cc=t-kristo@ti.com \
    --cc=tomi.valkeinen@ti.com \
    /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.