mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Barebox List <barebox@lists.infradead.org>,
	 Sascha Hauer <s.hauer@pengutronix.de>
Subject: Re: [PATCH] clk: imx: improve precision of AV PLL to 1 Hz
Date: Fri, 27 Sep 2024 12:40:34 +0200	[thread overview]
Message-ID: <172743363473.100528.5958821855328519019.b4-ty@pengutronix.de> (raw)
In-Reply-To: <20240926113320.3780408-1-s.hauer@pengutronix.de>


On Thu, 26 Sep 2024 13:33:20 +0200, Sascha Hauer wrote:
> Adoption of Linux commit:
> 
> | commit c5a8045a553e32529ffb6bfb33fcad4d38aec2c7
> | Author: Emil Lundmark <emil@limesaudio.com>
> | Date:   Wed Oct 12 12:31:41 2016 +0200
> |
> |     clk: imx: improve precision of AV PLL to 1 Hz
> |
> |     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>
> |     Reviewed-by: Fabio Estevam <fabio.estevam@nxp.com>
> |     Acked-by: Shawn Guo <shawnguo@kernel.org>
> |     Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
> 
> [...]

Applied, thanks!

[1/1] clk: imx: improve precision of AV PLL to 1 Hz
      https://git.pengutronix.de/cgit/barebox/commit/?id=af3d99396a8b (link may not be stable)

Best regards,
-- 
Sascha Hauer <s.hauer@pengutronix.de>




      reply	other threads:[~2024-09-27 10:43 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-26 11:33 Sascha Hauer
2024-09-27 10:40 ` Sascha Hauer [this message]

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=172743363473.100528.5958821855328519019.b4-ty@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=barebox@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