From: Ranjith Lohithakshan <ranjithl@ti.com>
To: Paul Walmsley <paul@pwsan.com>
Cc: "linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>
Subject: Re: [PATCH] AM35xx: Add clock support for new modules on AM35xx
Date: Fri, 08 Jan 2010 16:17:04 +0530 [thread overview]
Message-ID: <4B470D28.7010900@ti.com> (raw)
In-Reply-To: <alpine.DEB.2.00.1001051134240.2083@utopia.booyaka.com>
Hello Paul,
On Wed, 06-Jan-10 2:51 AM +0530, Paul Walmsley wrote:
> On Fri, 18 Dec 2009, Ranjith Lohithakshan wrote:
>
>> On Fri, 18-Dec-09 7:12 AM +0530, Paul Walmsley wrote:
>>
>>> +/* Clocks for AM35XX */
>>> +static struct clk emac_ick = {
>>> + .name = "emac_ick",
>>> + .ops = &clkops_omap2_dflt,
>>> Shouldn't this clock use &clkops_omap2_dflt_wait (or rather, some custom
>>> version that knows how to read the _ACK bits in IPSS_CLK_CTRL) and test
>>> CPGMAC_VBUSP_CLK_EN_ACK? Same for the other IPSS VBUSP clocks? (I
>> guess
>>> "VBUSP" is a synonym for "interface"?)
>> I will ad a custom clkops to address this. Do we need a find_companion
>> to be defined? The VBUSP clock ACK's do not depend on functional clocks
>> and the functional clocks themselves don't have ant ACK or status bits.
>> EMAC, VPFE amd MUSBOTG are initiators, but the their ACK bits are just
>> for the target idle status.
>
> I see four ACK bits marked as "clock status bits" in the TRM. Are these
> interface clock status bits for initiator interfaces, or are they module
> target IdleAck bits? If they are the former, then they are useless and
> there is no point waiting for these clocks. If they are the latter, then
> yes, you'll need a find_companion, because the clock code must ensure that
> both the interface clock and main functional clock are both enabled before
> checking the module's target idle status, and the AM35xx IPSS does this in
> a completely different way than the OMAP35xx. I guess the IPSS was just
> 'bolted on' to the chip, rather than really integrated into the OMAP2 PRCM
> design.
These ACK bits are for the target IdleAck status. I will add a custom
find_companion code for AM35xx. As you rightly said, the IPSS was kind
of bolted together and not properly integrated into the PRCM
>> One of the issues on AM35xx is regarding the status indicator for new
>> clocks. Here 1 indicates as enabled and 0 as not ready state, similar to
>> 24xx case but just opposite to 34xx clocks. And now we have a mix of
>> these two on AM35xx.
>
> Wow, that's really craptacular.
>
>> In omap2_cm_wait_idlest, I do not get a per clock granularity to
>> decide what should be the status check for that particular
>> clock. One of the approach I am thinking is to define a new clock
>> flag (say INVERT_ENABLE_STATUS) and set it for the new AM35xx
>> clocks. And in omap2_module_wait_ready I will do the cpu check and
>> flag check on a per clock basis and determine the status that need
>> to be checked and pass it to omap2_module_wait_ready to check what
>> we want. omap2_module_wait_ready will not be doing any cpu checks as
>> its done today. Let me know what you think.
>
> (I guess you mean omap2_cm_wait_module_ready() in the last two sentences?)
I am actually referring to omap2_module_wait_ready defined in
mach-omap2/clock.c
> How about extending find_idlest to pass back whether to test against 0 or
> 1? The cpu code will then move into the find_idlest code, and you can
> just create a few new find_idlest functions for the AM35xx clocks. Let's
> try to avoid creating new clock flags for this, I'm trying to move all of
> this module IDLEST testing code out of the clock code and into the hwmod
> code where it belongs.
OK. I will extend the existing find_idlest to pass back what value needs
to be checked as you suggested. I will make this change as a separate patch.
>>>> +static struct clk emac_fck = {
>>>> + .name = "emac_fck",
>>>> + .ops = &clkops_omap2_dflt,
>>>> + .clkdm_name = "core_l3_clkdm",
>>> Is this the correct clockdomain for this clock? It seems unlikely that a
>>> 50MHz functional clock would be in core_l3_clkdm. Usually these are all
>>> interface clocks. This applies for all the other functional clocks
>> listed
>>> in this file also.
>> Would it be OK if we just don't set clkdm_name. I am not sure whether we
>> can map it to any existing OMAP3 clock domains that way
>
> I'd like to see all new clocks added with a clockdomain, even if it is not
> a software-controllable clockdomain. That makes it possible for others to
> understand what is really going on from a power management point of view.
> What is the clockdomain structure for these new clocks?
All the VBUSP (interface) clocks are derived from core_l3_clk and I am
making them as part of core_l3_clk domain. The rmii_ck/emac_fck and
vpfe_fck are sourced from external clock sources. (AM35XX TRM section
4.7.7.12)
>>>> + .rate = 50000000,
>>> What's the parent of this clock? Looking at TRM section 4.7.7.12 it
>>> appears that it gets this from an off-chip source, "rmii_clk"? Guess
>> that
>>> should probably be defined as the fixed source clock, and emac_fck should
>>> list rmii_clk as its parent?
>>>
>>>> + .enable_reg = OMAP343X_CTRL_REGADDR(AM35XX_CONTROL_IPSS_CLK_CTRL),
>>>> + .enable_bit = AM35XX_CPGMAC_FCLK_SHIFT,
>>>> + .recalc = &omap2_clksel_recalc,
>>> This .recalc field is wrong, since there's no .clksel field defined. If
>>> you define that parent, then this should be followparent_recalc. The
>>> parent should have .flags = RATE_FIXED and no .recalc.
>> Do we really need to define an rmii_ck? Can we make emac_fck itself as
>> the root clock with no parent? Here is what I was thinking of. Let me
>> know if you see any issues with this
>
> Yes, please define the parent clocks appropriately. They will probably be
> in different clockdomains from the downstream clocks. Where does rmii_clk
> come from? Is this an off-chip clock? Is this coming from one of the
> on-chip DPLLs?
rmii_ck and vpfe_fck are from off-chip sources. These are fixed rate
clocks being fed to the chip. Do we need to associate a dummy or virtual
clock domain for these clocks or is it OK if we treat it similar to the
way we currently treat 32K timer clock (RATE_FIXED, clockops_null, no
clock domain and having no parent)?
>> static struct clk emac_fck = {
>> .name = "emac_fck",
>> .ops = &clkops_omap2_dflt,
>> .flags = RATE_FIXED,
>> .rate = 50000000,
>> .enable_reg = OMAP343X_CTRL_REGADDR(OMAP3517_CONTROL_IP_CLK_CTRL),
>> .enable_bit = OMAP3517_CPGMAC_FCLK_SHIFT,
>> };
>>
>>>> +static struct clk vpfe_fck = {
>>>> + .name = "vpfe_fck",
>>>> + .ops = &clkops_omap2_dflt,
>>>> + .clkdm_name = "core_l3_clkdm",
>>>> + .rate = 27000000,
>>>> + .enable_reg = OMAP343X_CTRL_REGADDR(AM35XX_CONTROL_IPSS_CLK_CTRL),
>>>> + .enable_bit = AM35XX_VPFE_FCLK_SHIFT,
>>>> + .recalc = &omap2_clksel_recalc,
>>> This fixed rate clock isn't right, for the same reasons as described
>>> above.
>> Would make it similar to emac_fck depending on what we decide.
>
- Ranjith
next prev parent reply other threads:[~2010-01-08 10:47 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-16 13:57 [PATCH] AM35xx: Add clock support for new modules on AM35xx Ranjith Lohithakshan
2009-12-18 1:42 ` Paul Walmsley
2009-12-18 1:45 ` Paul Walmsley
2009-12-18 10:31 ` Ranjith Lohithakshan
2010-01-04 8:20 ` Lohithakshan, Ranjith
2010-01-05 21:21 ` Paul Walmsley
2010-01-08 10:47 ` Ranjith Lohithakshan [this message]
2010-01-08 23:07 ` Paul Walmsley
2010-01-11 18:08 ` Ranjith Lohithakshan
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=4B470D28.7010900@ti.com \
--to=ranjithl@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox