RE: [PATCH] omap2plus: wdt: Fix boot warn when CONFIG_PM_RUNTIME=n

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 

> -----Original Message-----
> From: Kevin Hilman [mailto:khilman@xxxxxxxxxxxxxxxxxxx] 
> Sent: Wednesday, October 20, 2010 5:31 AM
> To: Varadarajan, Charulatha
> Cc: Cousson, Benoit; Paul Walmsley; linux-omap@xxxxxxxxxxxxxxx
> Subject: Re: [PATCH] omap2plus: wdt: Fix boot warn when 
> CONFIG_PM_RUNTIME=n
> 
> "Varadarajan, Charulatha" <charu@xxxxxx> writes:
> 
> > Paul, Benoit, 
> >
> > Please provide your input on this.
> >
> >> -----Original Message-----
> >> From: Kevin Hilman [mailto:khilman@xxxxxxxxxxxxxxxxxxx] 
> >> Sent: Tuesday, October 12, 2010 11:57 PM
> >> To: Cousson, Benoit
> >> Cc: Varadarajan, Charulatha; Paul Walmsley; 
> linux-omap@xxxxxxxxxxxxxxx
> >> Subject: Re: [PATCH] omap2plus: wdt: Fix boot warn when 
> >> CONFIG_PM_RUNTIME=n
> >> 
> >> "Cousson, Benoit" <b-cousson@xxxxxx> writes:
> >> 
> >> > Adding more folks to the discussion.
> >> >
> >> > On 10/12/2010 9:30 AM, Varadarajan, Charulatha wrote:
> >> >>
> >> >>> From: Cousson, Benoit
> >> >>> Sent: Tuesday, October 12, 2010 12:45 PM
> >> >>> To: Varadarajan, Charulatha
> >> >>>
> >> >>> Hi Charu,
> >> >>>
> >> >>> On 10/11/2010 2:02 PM, Varadarajan, Charulatha wrote:
> >> >>>> Fix the below warning during boot
> >> >>>>
> >> >>>> [    0.000000] WARNING: at 
> arch/arm/mach-omap2/omap_hwmod.c:1185
> >> >>> _omap_hwmod_enable+0x34/0x150()
> >> >>>> [    0.000000] omap_hwmod: wd_timer2: enabled state can 
> >> only be entered
> >> >>> from initialized, idle, or disabled state
> >> >>>> [    0.000000] Modules linked in:
> >> >>>> [    0.000000] [<c0050460>] (unwind_backtrace+0x0/0xe4) from
> >> >>> [<c0083954>] (warn_slowpath_common+0x4c/0x64)
> >> >>>> [    0.000000] [<c0083954>] 
> (warn_slowpath_common+0x4c/0x64) from
> >> >>> [<c00839ec>] (warn_slowpath_fmt+0x2c/0x3c)
> >> >>>> [    0.000000] [<c00839ec>] (warn_slowpath_fmt+0x2c/0x3c) from
> >> >>> [<c0059be4>] (_omap_hwmod_enable+0x34/0x150)
> >> >>>> [    0.000000] [<c0059be4>] 
> (_omap_hwmod_enable+0x34/0x150) from
> >> >>> [<c0059d28>] (omap_hwmod_enable+0x28/0x3c)
> >> >>>> [    0.000000] [<c0059d28>] (omap_hwmod_enable+0x28/0x3c) from
> >> >>> [<c005580c>] (omap2_disable_wdt+0x48/0xdc)
> >> >>>> [    0.000000] [<c005580c>] (omap2_disable_wdt+0x48/0xdc) from
> >> >>> [<c0058898>] (omap_hwmod_for_each_by_class+0x60/0xa4)
> >> >>>> [    0.000000] [<c0058898>] 
> >> (omap_hwmod_for_each_by_class+0x60/0xa4)
> >> >>> from [<c000f6d0>] (omap2_init_devices+0x44/0x330)
> >> >>>> [    0.000000] [<c000f6d0>] 
> (omap2_init_devices+0x44/0x330) from
> >> >>> [<c0049578>] (do_one_initcall+0xcc/0x1a4)
> >> >>>> [    0.000000] [<c0049578>] (do_one_initcall+0xcc/0x1a4) from
> >> >>> [<c0008780>] (kernel_init+0x148/0x210)
> >> >>>> [    0.000000] [<c0008780>] (kernel_init+0x148/0x210) 
> >> from [<c004acb8>]
> >> >>> (kernel_thread_exit+0x0/0x8)
> >> >>>> [    0.000000] ---[ end trace 1b75b31a2719ed1f ]---
> >> >>>> [    0.000000] wd_timer2: Could not enable clocks for 
> >> omap2_disable_wdt
> >> >>>>
> >> >>>> When CONFIG_PM_RUNTIME is not defined, watchdog timer 
> >> clocks are not
> >> >>>> disabled after a watchdog reset. Hence in 
> >> omap2_disable_wdt(), it is
> >> >>>> not required to enable clocks before accessing the 
> watchdog timer
> >> >>>> registers if CONFIG_PM_RUNTIME is not defined.
> >> >>>
> >> >>> I'm not a big fan of adding some dependencies with 
> >> CONFIG_PM_RUNTIME
> >> >>> inside this code.
> >> >>>
> >> >>> The real root cause is not CONFIG_PM_RUNTIME, but mostly the
> >> >>> skip_setup_idle variable added in 
> >> arch/arm/mach-omap2/io.c by Paul.
> >> >>
> >> >> Yes.
> >> >>
> >> >>>
> >> >>> So I'd rather use that parameter as an input for the 
> >> omap2_disable_wdt.
> >> >>
> >> >> I also thought about this, but we need to
> >> >>
> >> >> 1. call omap2_disable_wdt() in omap2_init_common_hw() 
> rather than
> >> >> omap2_init_devices(). That would involve movement of
> >> >> omap2_disable_wdt() from devices.c to io.c.
> >> >> (or)
> >> >> 2. make skip_setup_idle global
> >> >> (or)
> >> >> 3. make omap2_disable_wdt() global and call it from
> >> >> omap2_init_common_hw() and pass skip_setup_idle as parameter.
> >> >>
> >> >> I felt that the usage of CONFIG_PM_RUNTIME is better than 
> >> the above.
> >> >> But still we may consider any of the above options or any other
> >> >> option. Please suggest.
> >> >
> >> > It is maybe easier, but I don't think it is better...
> >> >
> >> > As I said, CONFIG_PM_RUNTIME is not the root cause of your 
> >> issue, just
> >> > an indirect cause. OK, maybe strictly speaking, it is the 
> >> root cause,
> >> > since it started for that... but that not the cause that 
> we should
> >> > consider in your case.
> >> >
> >> > If we decide to remove that CONFIG_PM_RUNTIME dependency 
> in the io /
> >> > hwmod code, nobody will be able to find the relation with 
> >> your code in
> >> > WDT.
> >> >
> >> > That's why you should not do that, for my point of view.
> >> >
> >> > Paul, Kevin,
> >> > Any thoughts on that point?
> >> 
> >> I agree that this is not strictly a dependency on PM_RUNTIME.
> >> 
> >> What's really needed is a way for low-level hwmod users like 
> >> this to be
> >> able to check whether the hwmod is already enabled.  
> >> Something like this
> >> (completely untested):
> >> 
> >> bool omap_hwmod_is_enabled(struct omap_hwmod *oh)
> >> {
> >> 	return (oh->_state == _HWMOD_STATE_ENABLED);
> >> }
> >

Okay. Would do the needful and send the patch soon.


> > Kevin,
> >
> > Thanks. This is similar to what we were discussing internally and
> > I would prefer this. But is it a good idea to allow drivers to
> > know the state of oh and then enable/idle the device?
> >
> > Or should it be used only in exceptional situations like 
> the scenario
> > addressed in this patch?
> 
> For the long term (2.6.38), we should follow the direction that Paul
> laid out.
> 
> For the short term (2.6.37) what we need is a fix for this regression.
> I propose you follow the above approach (checking if it's already
> enabled.)
> 
> As it is a temporary hack, it's probably best not to create 
> the new API
> that could be abused.  Instead, just directly check oh->_state in the
> devices.c code (documented with FIXME comments.)
> 
> I'm OK with this short term fix for 2.6.37 if you agree to work on
> Paul's solution for 2.6.38.
> 
> Kevin
> 
> --
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux