From: megous@megous.com (Ondřej Jirman)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 06/14] ARM: sun8i: clk: Add clk-factor rate application method
Date: Fri, 1 Jul 2016 02:53:52 +0200 [thread overview]
Message-ID: <64d0c1e2-d818-0806-7c92-c10603b4f6f5@megous.com> (raw)
In-Reply-To: <20160630204001.GC5485@lukather>
On 30.6.2016 22:40, Maxime Ripard wrote:
> Hi,
>
> On Sat, Jun 25, 2016 at 05:45:03AM +0200, megous at megous.com wrote:
>> From: Ondrej Jirman <megous@megous.com>
>>
>> PLL1 on H3 requires special factors application algorithm,
>> when the rate is changed. This algorithm was extracted
>> from the arisc code that handles frequency scaling
>> in the BSP kernel.
>>
>> This commit adds optional apply function to
>> struct factors_data, that can implement non-trivial
>> factors application method, when necessary.
>>
>> Also struct clk_factors_config is extended with position
>> of the PLL lock flag.
>
> Have you tested the current implementation, and found that it was not
> working, or did you duplicate the arisc code directly?
Also of note is that similar code probably doesn't crash in u-boot,
because there, before changing the PLL1 clock, the cpu is switched to
24MHz osc, so it is not overclocked, even if factors align in such a way
that you'd get the behavior I described in the other email.
>> /**
>> + * sun8i_h3_apply_pll1_factors() - applies n, k, m, p factors to the
>> + * register using an algorithm that tries to reserve the PLL lock
>> + */
>> +
>> +static void sun8i_h3_apply_pll1_factors(struct clk_factors *factors, struct factors_request *req)
>> +{
>> + const struct clk_factors_config *config = factors->config;
>> + u32 reg;
>> +
>> + /* Fetch the register value */
>> + reg = readl(factors->reg);
>> +
>> + if (FACTOR_GET(config->pshift, config->pwidth, reg) < req->p) {
>> + reg = FACTOR_SET(config->pshift, config->pwidth, reg, req->p);
>> +
>> + writel(reg, factors->reg);
>> + __delay(2000);
>> + }
>
> So there was some doubts about the fact that P was being used, or at
> least that it was useful.
>
>> + if (FACTOR_GET(config->mshift, config->mwidth, reg) < req->m) {
>> + reg = FACTOR_SET(config->mshift, config->mwidth, reg, req->m);
>> +
>> + writel(reg, factors->reg);
>> + __delay(2000);
>> + }
>> +
>> + reg = FACTOR_SET(config->nshift, config->nwidth, reg, req->n);
>> + reg = FACTOR_SET(config->kshift, config->kwidth, reg, req->k);
>> +
>> + writel(reg, factors->reg);
>> + __delay(20);
>> +
>> + while (!(readl(factors->reg) & (1 << config->lock)));
>
> So, they are applying the dividers first, and then applying the
> multipliers, and then wait for the PLL to stabilize.
>
>> +
>> + if (FACTOR_GET(config->mshift, config->mwidth, reg) > req->m) {
>> + reg = FACTOR_SET(config->mshift, config->mwidth, reg, req->m);
>> +
>> + writel(reg, factors->reg);
>> + __delay(2000);
>> + }
>> +
>> + if (FACTOR_GET(config->pshift, config->pwidth, reg) > req->p) {
>> + reg = FACTOR_SET(config->pshift, config->pwidth, reg, req->p);
>> +
>> + writel(reg, factors->reg);
>> + __delay(2000);
>> + }
>
> However, this is kind of weird, why would you need to re-apply the
> dividers? Nothing really changes. Have you tried without that part?
>
> Since this is really specific, I guess you could simply make the
> clk_ops for the nkmp clocks public, and just re-implement set_rate
> using that logic.
>
> You might also need to set an upper limit on P, since the last value
> (4) is not a valid one.
>
> I guess you could do that by adding a max field in the __ccu_div
> structure.
>
> Maxime
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160701/e95205dd/attachment.sig>
next prev parent reply other threads:[~2016-07-01 0:53 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-25 3:44 [PATCH v2] Thermal regulation for Orange Pi PC and Orange Pi One megous at megous.com
2016-06-25 3:44 ` [PATCH v2 01/14] ARM: clk: sunxi: Add driver for the H3 THS clock megous at megous.com
2016-06-25 7:13 ` Maxime Ripard
2016-06-25 15:23 ` Ondřej Jirman
2016-06-28 11:52 ` Maxime Ripard
2016-06-25 3:44 ` [PATCH v2 02/14] thermal: sun8i_ths: Add support for the thermal sensor on Allwinner H3 megous at megous.com
2016-06-25 7:10 ` Maxime Ripard
2016-06-25 15:12 ` Ondřej Jirman
2016-06-28 11:39 ` Maxime Ripard
2016-06-25 3:45 ` [PATCH v2 03/14] dt-bindings: document sun8i_ths - H3 thermal sensor driver megous at megous.com
2016-06-28 20:56 ` Rob Herring
2016-06-25 3:45 ` [PATCH v2 04/14] regulator: SY8106A regulator driver megous at megous.com
2016-06-26 11:26 ` Mark Brown
2016-06-26 15:07 ` Ondřej Jirman
2016-06-27 14:54 ` Mark Brown
2016-06-28 16:27 ` Ondřej Jirman
2016-06-27 15:10 ` Mark Brown
2016-06-25 3:45 ` [PATCH v2 05/14] dt-bindings: document " megous at megous.com
2016-06-26 11:27 ` Mark Brown
2016-06-26 15:10 ` Ondřej Jirman
2016-06-26 18:52 ` Mark Brown
2016-06-25 3:45 ` [PATCH v2 06/14] ARM: sun8i: clk: Add clk-factor rate application method megous at megous.com
2016-06-30 20:40 ` Maxime Ripard
2016-07-01 0:50 ` Ondřej Jirman
2016-07-01 5:37 ` Jean-Francois Moine
2016-07-01 6:34 ` Ondřej Jirman
2016-07-01 7:47 ` Jean-Francois Moine
2016-07-15 8:53 ` Maxime Ripard
2016-07-15 10:38 ` Ondřej Jirman
2016-07-15 13:27 ` Jean-Francois Moine
2016-07-15 13:48 ` Ondřej Jirman
2016-07-15 14:22 ` [linux-sunxi] " Michal Suchanek
2016-07-15 16:33 ` Ondřej Jirman
2016-07-21 9:51 ` Maxime Ripard
2016-07-21 9:48 ` Maxime Ripard
2016-07-21 9:52 ` Ondřej Jirman
2016-07-26 6:32 ` Maxime Ripard
2016-07-28 11:27 ` Changed: sunxi-ng clock code - NKMP clock implementation is wrong Ondřej Jirman
2016-07-28 11:38 ` [linux-sunxi] " Chen-Yu Tsai
2016-07-28 21:00 ` Maxime Ripard
2016-07-28 22:01 ` Ondřej Jirman
2016-07-31 10:31 ` Maxime Ripard
2016-07-31 22:01 ` Ondřej Jirman
2016-08-31 20:25 ` Maxime Ripard
2016-07-01 0:53 ` Ondřej Jirman [this message]
2016-07-15 8:19 ` [PATCH v2 06/14] ARM: sun8i: clk: Add clk-factor rate application method Maxime Ripard
2016-06-25 3:45 ` [PATCH v2 07/14] ARM: dts: sun8i: Use sun8i-h3-pll1-clk for pll1 in H3 megous at megous.com
2016-06-25 3:45 ` [PATCH v2 08/14] ARM: dts: sun8i: Add thermal sensor node to the sun8i-h3.dtsi megous at megous.com
2016-06-25 3:45 ` [PATCH v2 09/14] ARM: dts: sun8i: Add cpu0 label to sun8i-h3.dtsi megous at megous.com
2016-06-25 3:45 ` [PATCH v2 10/14] ARM: dts: sun8i: Add r_twi I2C controller megous at megous.com
2016-06-25 7:16 ` Maxime Ripard
2016-06-25 3:45 ` [PATCH v2 11/14] ARM: dts: sun8i: Add sy8106a regulator to Orange Pi PC megous at megous.com
2016-06-25 3:45 ` [PATCH v2 12/14] ARM: dts: sun8i: Setup CPU operating points for Onrage PI PC megous at megous.com
2016-06-25 3:45 ` [PATCH v2 13/14] ARM: dts: sun8i: Add gpio-regulator used on Orange Pi One megous at megous.com
2016-06-25 7:18 ` Maxime Ripard
2016-06-25 3:45 ` [PATCH v2 14/14] ARM: dts: sun8i: Enable DVFS " megous at megous.com
2016-06-30 11:13 ` [linux-sunxi] " Michal Suchanek
2016-06-30 14:19 ` Ondřej Jirman
2016-06-30 15:16 ` Michal Suchanek
2016-06-30 15:32 ` Ondřej Jirman
2016-06-30 15:50 ` Michal Suchanek
2016-06-30 15:53 ` Ondřej Jirman
2016-07-01 10:54 ` Michal Suchanek
2016-06-30 14:23 ` Siarhei Siamashka
2016-07-01 1:17 ` Ondřej Jirman
2016-07-22 0:41 ` Ondřej Jirman
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=64d0c1e2-d818-0806-7c92-c10603b4f6f5@megous.com \
--to=megous@megous.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;
as well as URLs for NNTP newsgroup(s).