From: b-cousson@ti.com (Benoit Cousson)
To: linux-arm-kernel@lists.infradead.org
Subject: OMAP4 clock/pm fixes [was: [PATCH v4 2/3] ARM: omap: hwmod: get rid of all omap_clk_get_by_name usage
Date: Fri, 5 Oct 2012 14:20:09 +0200 [thread overview]
Message-ID: <506ED079.70700@ti.com> (raw)
In-Reply-To: <506EAC89.2070307@ti.com>
Hi Archit,
On 10/05/2012 11:46 AM, Archit Taneja wrote:
> Hi,
>
> On Friday 31 August 2012 01:58 PM, Archit Taneja wrote:
>> On Friday 31 August 2012 01:57 PM, Tomi Valkeinen wrote:
>>> On Fri, 2012-08-31 at 13:50 +0530, Archit Taneja wrote:
>>>> On Friday 31 August 2012 12:45 PM, Tomi Valkeinen wrote:
>>>>> On Fri, 2012-08-31 at 11:53 +0530, Archit Taneja wrote:
>>>>>
>>>>>> The only little problem was that during bootup, when hwmods are
>>>>>> setup,
>>>>>> only the 'parent' hwmod was able to get reset properly, all the other
>>>>>> 'child' hwmods don't have modulemode bits tied to them, and hence
>>>>>> weren't able to reset. So we got some error prints.
>>>>>>
>>>>>> Once DSS driver kicks in, the driver ensures the parent is enabled
>>>>>> for
>>>>>> any child to be enabled, so we don't face the issue again.
>>>>>>
>>>>>> So, if DSS driver is not built in, and if the bootloader left DSS
>>>>>> in a
>>>>>> bad state, the DSS clocks might remain messed up all the time since
>>>>>> hwmod fwk wasn't able to reset them.
>>>>>>
>>>>>> I think this is why we didn't proceed with remove "dss_fck" as a
>>>>>> slave
>>>>>> clock. If this issue is minor, we could go ahead and remove it.
>>>>>
>>>>> I wonder if we could handle this with a custom reset function. We
>>>>> already have a reset func for dss core. If I remember right, the main
>>>>> point for that is the fact that omap 4 doesn't have a softreset for dss
>>>>> core, so we manually write the default values to registers.
>>>>>
>>>>> For omap2/3 this would be simple: skip the resets for all other dss
>>>>> submodules, and dss core's reset would enable all the clocks and set
>>>>> the
>>>>> softreset bit. This would reset all the submodules also.
>>>>>
>>>>> Omap4 is more tricky. I guess we'd need to enable all the clocks,
>>>>> clear
>>>>> manually dss core's registers, and then set softreset bits in all the
>>>>> submodules. So in this case dss core would need to have information
>>>>> about the other submodules.
>>>>
>>>> The is a good idea. I don't clearly understand your approach though.
>>>> Are
>>>> you saying we have a custom reset function for only dss core? And reset
>>>> the submodules in it manually?
>>>
>>> Yes.
>>>
>>>> An alternative approach would be to implement custom reset functions
>>>> for
>>>> each submodule(or each hwmod), and in the beginning of every reset
>>>> function, add a hack to enable MODULEMODE bits(since we don't want
>>>> hwmod
>>>> fwk to touch MODULEMODE for the DSS submodules), and then set the soft
>>>> reset bits.
>>>
>>> I thought about that also. We'd need reset functions for all of them,
>>> and for omap2/3 we'd just reset the submodules again as they have
>>> already been reset with the dss core reset.
>>>
>>> The dss submodule resets are a bit linked. For omap2/3 the connection is
>>> obvious as dss core reset resets also the submodules, and for omap4 we
>>> have this requirement for the modulemode. That's why I though it'd be
>>> perhaps cleaner to handle the reset of the DSS block as a whole, in one
>>> place.
>>>
>>>> Your approach would ensure that we get a clean reset of DSS, but it
>>>> would still give the annoying prints when each of the submodule
>>>> tries to
>>>> reset itself.
>>>
>>> The other submodules would not be reset by the hwmod framework at all,
>>> so there wouldn't be prints. I think there's a flag for that.
>
> Sorry for bringing up an old thread. I was working on cleaning up the
> OMAP4 DSS related clock/pm issues, hence brought it up.
>
> We were discussing here on how to setting up and reset the OMAP4 DSS
> submodules correctly without tying the MODULEMODE bits to the
> corresponding hwmods.
>
> Tomi, your suggestion was to do soft resets for the submodules manually
> in the dss_core hwmod's custom reset function itself, and use the flag
> HWMOD_INIT_NO_RESET to prevent _reset() being called.
Yep, that's the right approach.
> However, this won't still resolve the issue of the errors we see a
> bootup. The function _setup_reset() looks like this:
>
> static int _setup_reset(struct omap_hwmod *oh)
> {
> ...
> r = _enable(oh);
> if (r) {
> pr_warning("omap_hwmod: %s: cannot be enabled for
> reset (%d)\n", oh->name, oh->_state);
> return -EINVAL;
> }
> ...
>
> if (!(oh->flags & HWMOD_INIT_NO_RESET))
> r = _reset(oh);
>
> ...
> }
>
> So, even if we have ask hwmod not to reset the DSS submodules, it will
> still try to enable them, and we can't enable them since MODULEMODE
> isn't tied to them. I don't see how we can get a clean reset done for
> the DSS submodules without making some changes in hwmod framework.
Yeah, I do agree. Some module cannot but enabled automatically in the fmwk due to PM dependency.
This is the case as well for MCPDM, IPU, DSP, ISS, FDIF...
In that case the early setup should just be skipped and the DSS driver should take care of that during probe / pm_runtime_enable.
I already have a WIP series that delay the setup until the driver probe the device. It will allow the setup to work properly in the case of the DSS assuming the DISPC and other sub IPs are setup in the context of DSS probe. At that time the DSS will be enabled already and thus every sub IPs will be able to get enabled.
It is done in the context of DT boot, but should work as well for legacy boot.
I can share the current crappy patches as soon as I fixed a couple of regression introduced by the patches :-(
Regards,
Benoit
next prev parent reply other threads:[~2012-10-05 12:20 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-29 8:56 [PATCH v4 0/3] Prepare for OMAP2+ movement to Common Clk Rajendra Nayak
2012-08-29 8:56 ` [PATCH v4 1/3] ARM: omap: clk: add clk_prepare and clk_unprepare Rajendra Nayak
2012-08-30 0:03 ` Turquette, Mike
2012-08-29 8:56 ` [PATCH v4 2/3] ARM: omap: hwmod: get rid of all omap_clk_get_by_name usage Rajendra Nayak
2012-08-30 0:08 ` Russell King - ARM Linux
2012-08-30 8:37 ` Rajendra Nayak
2012-08-30 0:15 ` Turquette, Mike
2012-08-30 8:39 ` Rajendra Nayak
2012-08-30 11:57 ` Benoit Cousson
2012-08-30 16:42 ` Tomi Valkeinen
2012-08-31 6:23 ` Archit Taneja
2012-08-31 7:15 ` Tomi Valkeinen
2012-08-31 8:20 ` Archit Taneja
2012-08-31 8:27 ` Tomi Valkeinen
2012-08-31 8:28 ` Archit Taneja
2012-10-05 9:46 ` OMAP4 clock/pm fixes [was: " Archit Taneja
2012-10-05 12:20 ` Benoit Cousson [this message]
2012-10-05 12:29 ` Archit Taneja
2012-10-05 12:37 ` Rajendra Nayak
2012-10-05 13:20 ` Archit Taneja
2012-10-05 13:31 ` Rajendra Nayak
2012-10-05 13:46 ` Archit Taneja
2012-10-05 13:51 ` Benoit Cousson
2012-09-22 18:55 ` Paul Walmsley
2012-09-24 5:09 ` Rajendra Nayak
2012-08-29 8:56 ` [PATCH v4 3/3] ARM: OMAP2+: clock: Remove all direct dereferencing of struct clk Rajendra Nayak
2012-08-30 20:56 ` [PATCH v4 0/3] Prepare for OMAP2+ movement to Common Clk Paul Walmsley
2012-08-31 5:03 ` Vaibhav Hiremath
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=506ED079.70700@ti.com \
--to=b-cousson@ti.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).