From: jiada_wang@mentor.com (Jiada Wang)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: imx: powerdown PLL before changing of its setting
Date: Tue, 20 May 2014 00:00:46 -0700 [thread overview]
Message-ID: <537AFD9E.9080203@mentor.com> (raw)
In-Reply-To: <537AF384.9070900@de.bosch.com>
Hi Dirk and Fabio
On 05/19/2014 11:17 PM, Dirk Behme wrote:
> Hi Fabio,
>
> On 19.05.2014 19:31, Fabio Estevam wrote:
>> Hi Jiada,
>>
>> On Wed, May 14, 2014 at 6:36 AM, Jiada Wang <jiada_wang@mentor.com>
>> wrote:
>>> According to i.MX6 user manual, "Before changing the PLL setting,
>>> power it down. Power up the PLL after the change"
>>> But currently PLL setting is being updated without power-down
>>> it first. This may end up with improper output/gitches which
>>> prevents furture operation.
>>>
>>> Signed-off-by: Jiada Wang <jiada_wang@mentor.com>
>>> ---
>>> arch/arm/mach-imx/clk-pllv3.c | 72
>>> +++++++++++++++++++++++++++++++++++++++----
>>> 1 file changed, 66 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-imx/clk-pllv3.c
>>> b/arch/arm/mach-imx/clk-pllv3.c
>>> index 6136405..f77edd6 100644
>>> --- a/arch/arm/mach-imx/clk-pllv3.c
>>> +++ b/arch/arm/mach-imx/clk-pllv3.c
>>> @@ -67,6 +67,42 @@ static int clk_pllv3_wait_lock(struct clk_pllv3 *pll)
>>> return readl_relaxed(pll->base) & BM_PLL_LOCK ? 0 : -ETIMEDOUT;
>>> }
>>>
>>> +static void clk_pllv3_powerdown(struct clk_pllv3 *pll)
>>> +{
>>> + u32 val;
>>> +
>>> + val = readl_relaxed(pll->base);
>>> + val |= BM_PLL_BYPASS;
>>> + writel_relaxed(val, pll->base);
>>> +
>>> + if (pll->powerup_set)
>>> + val &= ~BM_PLL_POWER;
>>> + else
>>> + val |= BM_PLL_POWER;
>>> + writel_relaxed(val, pll->base);
>>> +}
>>> +
>>> +static int clk_pllv3_powerrestore(struct clk_pllv3 *pll, u32 power,
>>> u32 bypass)
>>> +{
>>> + u32 val;
>>> + int ret;
>>> +
>>> + val = readl_relaxed(pll->base);
>>> + val &= ~BM_PLL_POWER;
>>
>> Shouldn't this be:
>> if (pll->powerup_set)
>> val |= BM_PLL_POWER;
>> else
>> val &= ~BM_PLL_POWER;
>>
>
> Jiada will correct me if I'm wrong, but to my understanding the job of
> this function is to *restore* the previously configured power state (not
> to set any particular one).
>
> The previously configured power state is passed in 'u32 power'. So we
> just mask out the POWER bit here to be able to restore the old power
> state, independent if it is 0 or 1. So I would think
>
> + val = readl_relaxed(pll->base);
> + val &= ~BM_PLL_POWER;
> + val |= power;
> + writel_relaxed(val, pll->base);
>
> is correct here.
>
> Best regards
>
> Dirk
>
Yes, this function restores power state as well as bypass state,
as set_rate() may be called before prepare(),
so we have no idea about power and bypass state here.
Thanks,
Jiada
prev parent reply other threads:[~2014-05-20 7:00 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-14 9:36 [PATCH] ARM: imx: powerdown PLL before changing of its setting Jiada Wang
2014-05-19 17:31 ` Fabio Estevam
2014-05-20 6:17 ` Dirk Behme
2014-05-20 7:00 ` Jiada Wang [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=537AFD9E.9080203@mentor.com \
--to=jiada_wang@mentor.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 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.