linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: sboyd@codeaurora.org (Stephen Boyd)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 2/2] clk: imx: improve precision of AV PLL to 1 Hz
Date: Thu, 27 Oct 2016 18:41:30 -0700	[thread overview]
Message-ID: <20161028014130.GE16026@codeaurora.org> (raw)
In-Reply-To: <66f5967187f915fe7039f4dbfb77db88a2423094.1476267249.git.emil@limesaudio.com>

On 10/12, Emil Lundmark wrote:
> The audio and video PLLs are designed to have a precision of 1 Hz if some
> conditions are met. The current implementation only allows a precision that
> depends on the rate of the parent clock. E.g., if the parent clock is 24
> MHz, the precision will be 24 Hz; or more generally the precision will be
> 
>     p / 10^6 Hz
> 
> where p is the parent clock rate. This comes down to how the register
> values for the PLL's fractional loop divider are chosen.
> 
> The clock rate calculation for the PLL is
> 
>     PLL output frequency = Fref * (DIV_SELECT + NUM / DENOM)
> 
> or with a shorter notation
> 
>     r = p * (d + a / b)
> 
> In addition to all variables being integers, we also have the following
> conditions:
> 
>     27 <= d <= 54
> 
>     -2^29 <= a <= 2^29-1
>      0    <  b <= 2^30-1
>     |a| < b
> 
> Here, d, a and b are register values for the fractional loop divider. We
> want to chose d, a and b such that f(p, r) = p, i.e. f is our round_rate
> function. Currently, d and b are chosen as
> 
>     d = r / p
>     b = 10^6
> 
> hence we get the poor precision. And a is defined in terms of r, d, p and
> b:
> 
>     a = (r - d * p) * b / p
> 
> I propose that if p <= 2^30-1 (i.e., the max value for b), we chose b as
> 
>     b = p
> 
> We can do this since
> 
>     |a| < b
> 
>     |(r - d * p) * b / p| < b
> 
>     |r - d * p| < p
> 
> Which have two solutions, one of them is when p < 0, so we can skip that
> one. The other is when p > 0 and
> 
>     p * (d - 1) < r < p * (d + 1)
> 
> Substitute d = r / p:
> 
>     (r - p) < r < (r + p)  <=>  p > 0
> 
> So, as long as p > 0, we can chose b = p. This is a good choise for b since
> 
>     a = (r - d * p) * b / p
>       = (r - d * p) * p / p
>       = r - d * p
> 
>     r = p * (d + a / b)
>       = p * d + p * a / b
>       = p * d + p * a / p
>       = p * d + a
> 
> and if d = r / p:
> 
>     a = r - d * p
>       = r - r / p * p
>       = 0
> 
>     r = p * d + a
>       = p * d + 0
>       = p * r / p
>       = r
> 
> I reckon this is the intention by the design of the clock rate formula.
> 
> Signed-off-by: Emil Lundmark <emil@limesaudio.com>
> ---

Applied to clk-next

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

  parent reply	other threads:[~2016-10-28  1:41 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-12 10:31 [PATCH v3 0/2] clk: imx: fix AV PLL rate setting Emil Lundmark
2016-10-12 10:31 ` [PATCH v3 1/2] clk: imx: fix integer overflow in AV PLL round rate Emil Lundmark
2016-10-14 13:33   ` Fabio Estevam
2016-10-28  1:41   ` Stephen Boyd
2016-10-28 11:47     ` Fabio Estevam
2016-10-28 18:13       ` Stephen Boyd
2016-10-28 19:32         ` Fabio Estevam
2016-11-02  0:07           ` Stephen Boyd
2016-10-12 10:31 ` [PATCH v3 2/2] clk: imx: improve precision of AV PLL to 1 Hz Emil Lundmark
2016-10-14 13:34   ` Fabio Estevam
2016-10-28  1:41   ` Stephen Boyd [this message]
2016-10-24  7:34 ` [PATCH v3 0/2] clk: imx: fix AV PLL rate setting Shawn Guo

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=20161028014130.GE16026@codeaurora.org \
    --to=sboyd@codeaurora.org \
    --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;
as well as URLs for NNTP newsgroup(s).