From: Jon Hunter <jon-hunter@ti.com>
To: Paul Walmsley <paul@pwsan.com>
Cc: linux-omap <linux-omap@vger.kernel.org>, b-cousson@ti.com
Subject: Re: [PATCH 1/6] OMAP4: Add missing clock divider for OCP_ABE_ICLK
Date: Fri, 15 Jul 2011 09:34:36 -0500 [thread overview]
Message-ID: <4E204FFC.5080700@ti.com> (raw)
In-Reply-To: <alpine.DEB.2.00.1107150216380.16606@utopia.booyaka.com>
Hi Paul,
On 7/15/2011 3:21, Paul Walmsley wrote:
> cc'ing Benoît
>
> Hi Jon
>
> On Thu, 14 Jul 2011, Jon Hunter wrote:
>
>> From: Jon Hunter<jon-hunter@ti.com>
>>
>> The parent clock of the OCP_ABE_ICLK is the AESS_FCLK and the
>> parent clock of the AESS_FCLK is the ABE_FCLK...
>>
>> ABE_FCLK --> AESS_FCLK --> OCP_ABE_ICLK
>>
>> The AESS_FCLK and OCP_ABE_ICLK clocks both have dividers which
>> determine their operational frequency. However, the dividers for
>> the AESS_FCLK and OCP_ABE_ICLK are controlled via a single bit,
>> which is the CM1_ABE_AESS_CLKCTRL[24] bit.> When this bit is set to
>> 0, the AESS_FCLK divider is 1 and the OCP_ABE_ICLK divider is 2.
>> Similarly, when this bit is set to 1, the AESS_FCLK divider is 2
>> and the OCP_ABE_ICLK is 1.
>
> Sigh. This type of hardware design makes software design difficult :-(
Hopefully, because this is a interface clock the impact is really
minimal...more below...
>> The above relationship between the AESS_FCLK and OCP_ABE_ICLK
>> dividers ensure that the OCP_ABE_ICLK clock is always half the
>> frequency of the ABE_CLK...
>>
>> OCP_ABE_ICLK = ABE_FCLK/2
>>
>> The divider for the OCP_ABE_ICLK is currently missing so add a
>> divider that will ensure the OCP_ABE_ICLK frequency is always half
>> the ABE_FCLK frequency.
>>
>> Signed-off-by: Jon Hunter<jon-hunter@ti.com>
>> ---
>> arch/arm/mach-omap2/clock44xx_data.c | 16 +++++++++++++++-
>> 1 files changed, 15 insertions(+), 1 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c
>> index 8c96567..6e158ce 100644
>> --- a/arch/arm/mach-omap2/clock44xx_data.c
>> +++ b/arch/arm/mach-omap2/clock44xx_data.c
>> @@ -1301,11 +1301,25 @@ static struct clk mcasp3_fclk = {
>> .recalc =&followparent_recalc,
>> };
>>
>> +static const struct clksel_rate div2_2to1_rates[] = {
>> + { .div = 1, .val = 1, .flags = RATE_IN_4430 },
>> + { .div = 2, .val = 0, .flags = RATE_IN_4430 },
>> + { .div = 0 },
>> +};
>> +
>> +static const struct clksel ocp_abe_iclk_div[] = {
>> + { .parent =&aess_fclk, .rates = div2_2to1_rates },
>> + { .parent = NULL },
>> +};
>> +
>> static struct clk ocp_abe_iclk = {
>> .name = "ocp_abe_iclk",
>> .parent =&aess_fclk,
>> + .clksel = ocp_abe_iclk_div,
>> + .clksel_reg = OMAP4430_CM1_ABE_AESS_CLKCTRL,
>> + .clksel_mask = OMAP4430_CLKSEL_AESS_FCLK_MASK,
>> .ops =&clkops_null,
>> - .recalc =&followparent_recalc,
>> + .recalc =&omap2_clksel_recalc,
>> };
>>
>> static struct clk per_abe_24m_fclk = {
>
> I guess the reason that this patch can get away with this is because it
> doesn't allow software to change the rate of ocp_abe_iclk, and the
> ocp_abe_iclk is a child of aess_fclk, so when aess_fclk is changed, it
> will recalc ocp_abe_iclk.
>
> Benoît, what do you think? Is this a reasonable approach for the script?
> Or do we need to deal with some kind of 'linked clock' implementation...
If you want my two cents on this matter, I would say that...
1). People should not need to configure the "ocp_abe_iclk" clock
directly, because regardless of the divider setting it is always 1/2 the
"abe_fclk". In other words, only the "aess_fclk" frequency is really
changing because of the divider and the above relationship ensures that
the "ocp_abe_iclk" is always the same frequency. So a user only cares
about the "aess_fclk" frequency and the "ocp_abe_iclk" frequency is
handled for them.
2). The "ocp_abe_iclk" is an interface clock and is not a parent to any
other functional clock and therefore, is not driving any internal logic
in a peripheral which would have a direct impact of the speed of that
peripheral. However, there does appear to be another bug here in the
clock44xx_data.c as it shows that the "ocp_abe_iclk" is parent to the
"slimbus1_fck" which I believe is incorrect. According to the TRM, the
the ocp_abe_iclk is parent to the slimbus1_iclk. I can send another
patch for this. However, I will let Benoit chime in first.
Cheers
Jon
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2011-07-15 14:34 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-14 23:24 [PATCH 1/6] OMAP4: Add missing clock divider for OCP_ABE_ICLK Jon Hunter
2011-07-15 8:21 ` Paul Walmsley
2011-07-15 14:34 ` Jon Hunter [this message]
2011-07-18 20:57 ` Jon Hunter
2011-07-18 21:46 ` Jon Hunter
2011-07-26 22:45 ` Cousson, Benoit
2011-08-29 4:09 ` Paul Walmsley
2011-09-14 19:32 ` Jon Hunter
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=4E204FFC.5080700@ti.com \
--to=jon-hunter@ti.com \
--cc=b-cousson@ti.com \
--cc=linux-omap@vger.kernel.org \
--cc=paul@pwsan.com \
/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.