From: maxime.ripard@free-electrons.com (Maxime Ripard)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 07/16] clk: sunxi-ng: Add phase clock support
Date: Mon, 23 May 2016 19:01:29 +0200 [thread overview]
Message-ID: <20160523170129.GB27618@lukather> (raw)
In-Reply-To: <CAGb2v661dvdPKj9DWL7LWGgiDCEk7G-a_7jv5gb+KBMoWbR8Lg@mail.gmail.com>
Hi,
On Sun, May 22, 2016 at 12:43:48AM +0800, Chen-Yu Tsai wrote:
> > +static int ccu_phase_set_phase(struct clk_hw *hw, int degrees)
> > +{
> > + struct ccu_phase *phase = hw_to_ccu_phase(hw);
> > + struct clk_hw *parent, *pparent;
> > + unsigned int parent_rate, pparent_rate;
>
> grandparent(_rate) would be easier to understand.
Ack.
>
> > + unsigned long flags;
> > + u32 reg;
> > + u8 delay;
> > +
> > + /* Get our parent clock, it's the one that can adjust its rate */
> > + parent = clk_hw_get_parent(hw);
> > + if (!parent)
> > + return -EINVAL;
> > +
> > + /* And its rate */
> > + parent_rate = clk_hw_get_rate(parent);
> > + if (!parent_rate)
> > + return -EINVAL;
> > +
> > + /* Now, get our parent's parent (most likely some PLL) */
> > + pparent = clk_hw_get_parent(parent);
> > + if (!pparent)
> > + return -EINVAL;
> > +
> > + /* And its rate */
> > + pparent_rate = clk_hw_get_rate(pparent);
> > + if (!pparent_rate)
> > + return -EINVAL;
> > +
> > + if (degrees != 180) {
> > + u16 step, parent_div;
> > +
> > + /* Get our parent divider */
> > + parent_div = pparent_rate / parent_rate;
> > +
> > + /*
> > + * We can only outphase the clocks by multiple of the
> > + * PLL's period.
> > + *
> > + * Since our parent clock is only a divider, and the
> > + * formula to get the outphasing in degrees is deg =
> > + * 360 * delta / period
> > + *
> > + * If we simplify this formula, we can see that the
> > + * only thing that we're concerned about is the number
> > + * of period we want to outphase our clock from, and
> > + * the divider set by our parent clock.
> > + */
> > + step = DIV_ROUND_CLOSEST(360, parent_div);
> > + delay = DIV_ROUND_CLOSEST(degrees, step);
>
> Doesn't this mean some delay values are impossible to set?
>
> For instance, for PLL = 600 MHz and this clock = 50 MHz, div would be 12,
> and a step would be 30 degrees. This means we can't ask for a delay of 6,
> which is 180 degrees.
>
> For PLL = 600 MHz, clock = 100 MHz, div would be 6, and a step is 60
> degrees. Therefor we can't ask for a delay of 3.
You don't ask for a delay, you ask for an outphasing in degrees. In
the hardware, in the register 0 means an outphasing of 180 degrees
(and this has been confirmed by Allwinner a while back). In the two
cases you point out, we would have two ways of achieving the same
thing, we prefer one over another, but I don't see how it's
problematic.
It's also a direct copy of the current code we have, which didn't
raise any objection, or had any known bugs.
> > +struct ccu_phase {
> > + u8 shift;
> > + u8 width;
>
> Not sure why you used struct ccu_factor in the divider table clock,
> but separate fields directly in ccu_phase here.
Because this is not meant for the same thing. ccu_factor is probably
going to go away anyway because of the dividers consolidation.
Thanks!
Maxime
--
Maxime Ripard, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160523/2ae847cb/attachment-0001.sig>
next prev parent reply other threads:[~2016-05-23 17:01 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-08 20:01 [PATCH 00/16] clk: sunxi: introduce "modern" clock support Maxime Ripard
2016-05-08 20:01 ` [PATCH 01/16] clk: fix critical clock locking Maxime Ripard
2016-05-09 22:11 ` Stephen Boyd
2016-05-13 7:50 ` Maxime Ripard
2016-05-08 20:01 ` [PATCH 02/16] clk: sunxi-ng: Add common infrastructure Maxime Ripard
2016-05-09 10:01 ` Chen-Yu Tsai
2016-05-15 18:31 ` Maxime Ripard
2016-05-16 7:02 ` Chen-Yu Tsai
2016-05-16 8:02 ` Jean-Francois Moine
2016-05-16 20:15 ` Maxime Ripard
2016-05-17 6:54 ` Jean-Francois Moine
2016-05-18 19:59 ` Maxime Ripard
2016-05-08 20:01 ` [PATCH 03/16] clk: sunxi-ng: Add fixed factor clock support Maxime Ripard
2016-05-09 10:05 ` Chen-Yu Tsai
2016-05-16 13:15 ` Jean-Francois Moine
2016-05-16 21:08 ` Maxime Ripard
2016-05-08 20:01 ` [PATCH 04/16] clk: sunxi-ng: Add gate " Maxime Ripard
2016-05-08 20:01 ` [PATCH 05/16] clk: sunxi-ng: Add mux " Maxime Ripard
2016-05-21 16:18 ` Chen-Yu Tsai
2016-05-22 19:20 ` Maxime Ripard
2016-05-08 20:01 ` [PATCH 06/16] clk: sunxi-ng: Add divider table clock Maxime Ripard
2016-05-21 16:30 ` Chen-Yu Tsai
2016-05-08 20:01 ` [PATCH 07/16] clk: sunxi-ng: Add phase clock support Maxime Ripard
2016-05-21 16:43 ` Chen-Yu Tsai
2016-05-23 17:01 ` Maxime Ripard [this message]
2016-05-24 9:01 ` Chen-Yu Tsai
2016-05-08 20:01 ` [PATCH 08/16] clk: sunxi-ng: Add M-factor " Maxime Ripard
2016-05-11 6:46 ` Jean-Francois Moine
2016-05-15 18:51 ` Maxime Ripard
2016-05-21 17:09 ` Chen-Yu Tsai
2016-05-22 19:22 ` Maxime Ripard
2016-05-08 20:01 ` [PATCH 09/16] clk: sunxi-ng: Add P-factor " Maxime Ripard
2016-05-08 20:01 ` [PATCH 10/16] clk: sunxi-ng: Add M-P factor " Maxime Ripard
2016-05-23 13:45 ` Chen-Yu Tsai
2016-05-23 17:18 ` Maxime Ripard
2016-05-24 4:14 ` Chen-Yu Tsai
2016-05-24 21:07 ` Maxime Ripard
2016-05-08 20:01 ` [PATCH 11/16] clk: sunxi-ng: Add N-K-factor " Maxime Ripard
2016-05-23 13:58 ` Chen-Yu Tsai
2016-05-08 20:01 ` [PATCH 12/16] clk: sunxi-ng: Add N-M-factor " Maxime Ripard
2016-05-09 7:24 ` Jean-Francois Moine
2016-05-15 19:04 ` Maxime Ripard
2016-05-08 20:01 ` [PATCH 13/16] clk: sunxi-ng: Add N-K-M Factor clock Maxime Ripard
2016-05-11 8:45 ` Jean-Francois Moine
2016-05-15 19:08 ` Maxime Ripard
2016-05-23 14:10 ` Chen-Yu Tsai
2016-05-08 20:01 ` [PATCH 14/16] clk: sunxi-ng: Add N-K-M-P factor clock Maxime Ripard
2016-05-11 8:49 ` Jean-Francois Moine
2016-05-23 14:36 ` Chen-Yu Tsai
2016-05-30 7:57 ` Maxime Ripard
2016-05-08 20:01 ` [PATCH 15/16] clk: sunxi-ng: Add H3 clocks Maxime Ripard
2016-05-09 7:39 ` Jean-Francois Moine
2016-05-15 19:18 ` Maxime Ripard
2016-05-13 9:45 ` Jean-Francois Moine
2016-05-18 14:02 ` Maxime Ripard
2016-05-18 16:23 ` Jean-Francois Moine
2016-05-18 16:27 ` Jean-Francois Moine
2016-05-16 13:47 ` Jean-Francois Moine
2016-05-18 21:20 ` Maxime Ripard
2016-05-30 16:15 ` Chen-Yu Tsai
2016-06-01 19:19 ` Maxime Ripard
2016-06-03 6:42 ` Chen-Yu Tsai
2016-06-03 6:55 ` Chen-Yu Tsai
2016-05-08 20:01 ` [PATCH 16/16] ARM: dt: sun8i: switch the H3 to the new CCU driver Maxime Ripard
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=20160523170129.GB27618@lukather \
--to=maxime.ripard@free-electrons.com \
--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