From: Tony Lindgren <tony@atomide.com>
To: Jon Hunter <jon-hunter@ti.com>, Kevin Hilman <khilman@ti.com>
Cc: Tarun Kanti DebBarma <tarun.kanti@ti.com>,
linux-omap <linux-omap@vger.kernel.org>,
linux-arm <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH] ARM: OMAP2+: Fix dmtimer set source clock failure
Date: Tue, 7 Aug 2012 00:34:27 -0700 [thread overview]
Message-ID: <20120807073427.GO11011@atomide.com> (raw)
In-Reply-To: <1342210323-2129-1-git-send-email-jon-hunter@ti.com>
Hi,
* Jon Hunter <jon-hunter@ti.com> [120713 13:17]:
> Calling the dmtimer function omap_dm_timer_set_source() fails if following a
> call to pm_runtime_put() to disable the timer. For example the following
> sequence would fail to set the parent clock ...
>
> omap_dm_timer_stop(gptimer);
> omap_dm_timer_set_source(gptimer, OMAP_TIMER_SRC_32_KHZ);
>
> The following error message would be seen ...
>
> omap_dm_timer_set_source: failed to set timer_32k_ck as parent
>
> The problem is that, by design, pm_runtime_put() simply decrements the usage
> count and returns before the timer has actually been disabled. Therefore,
> setting the parent clock failed because the timer was still active when the
> trying to set the parent clock. Setting a parent clock will fail if the clock
> you are setting the parent of has a non-zero usage count. To ensure that this
> does not fail use pm_runtime_put_sync() when disabling the timer.
>
> Note that this will not be seen on OMAP1 devices, because these devices do
> not use the clock framework for dmtimers.
Kevin care to ack this one? This should also be Cc: stable it seems?
Regards,
Tony
> Signed-off-by: Jon Hunter <jon-hunter@ti.com>
> ---
> arch/arm/plat-omap/dmtimer.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
> index 626ad8c..7b6689a 100644
> --- a/arch/arm/plat-omap/dmtimer.c
> +++ b/arch/arm/plat-omap/dmtimer.c
> @@ -258,7 +258,7 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_enable);
>
> void omap_dm_timer_disable(struct omap_dm_timer *timer)
> {
> - pm_runtime_put(&timer->pdev->dev);
> + pm_runtime_put_sync(&timer->pdev->dev);
> }
> EXPORT_SYMBOL_GPL(omap_dm_timer_disable);
>
> --
> 1.7.9.5
>
WARNING: multiple messages have this Message-ID (diff)
From: tony@atomide.com (Tony Lindgren)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] ARM: OMAP2+: Fix dmtimer set source clock failure
Date: Tue, 7 Aug 2012 00:34:27 -0700 [thread overview]
Message-ID: <20120807073427.GO11011@atomide.com> (raw)
In-Reply-To: <1342210323-2129-1-git-send-email-jon-hunter@ti.com>
Hi,
* Jon Hunter <jon-hunter@ti.com> [120713 13:17]:
> Calling the dmtimer function omap_dm_timer_set_source() fails if following a
> call to pm_runtime_put() to disable the timer. For example the following
> sequence would fail to set the parent clock ...
>
> omap_dm_timer_stop(gptimer);
> omap_dm_timer_set_source(gptimer, OMAP_TIMER_SRC_32_KHZ);
>
> The following error message would be seen ...
>
> omap_dm_timer_set_source: failed to set timer_32k_ck as parent
>
> The problem is that, by design, pm_runtime_put() simply decrements the usage
> count and returns before the timer has actually been disabled. Therefore,
> setting the parent clock failed because the timer was still active when the
> trying to set the parent clock. Setting a parent clock will fail if the clock
> you are setting the parent of has a non-zero usage count. To ensure that this
> does not fail use pm_runtime_put_sync() when disabling the timer.
>
> Note that this will not be seen on OMAP1 devices, because these devices do
> not use the clock framework for dmtimers.
Kevin care to ack this one? This should also be Cc: stable it seems?
Regards,
Tony
> Signed-off-by: Jon Hunter <jon-hunter@ti.com>
> ---
> arch/arm/plat-omap/dmtimer.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
> index 626ad8c..7b6689a 100644
> --- a/arch/arm/plat-omap/dmtimer.c
> +++ b/arch/arm/plat-omap/dmtimer.c
> @@ -258,7 +258,7 @@ EXPORT_SYMBOL_GPL(omap_dm_timer_enable);
>
> void omap_dm_timer_disable(struct omap_dm_timer *timer)
> {
> - pm_runtime_put(&timer->pdev->dev);
> + pm_runtime_put_sync(&timer->pdev->dev);
> }
> EXPORT_SYMBOL_GPL(omap_dm_timer_disable);
>
> --
> 1.7.9.5
>
next prev parent reply other threads:[~2012-08-07 7:34 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-13 20:12 [PATCH] ARM: OMAP2+: Fix dmtimer set source clock failure Jon Hunter
2012-07-13 20:12 ` Jon Hunter
2012-08-07 7:34 ` Tony Lindgren [this message]
2012-08-07 7:34 ` Tony Lindgren
2012-08-07 18:21 ` Kevin Hilman
2012-08-07 18:21 ` Kevin Hilman
2012-08-08 6:47 ` Tony Lindgren
2012-08-08 6:47 ` Tony Lindgren
-- strict thread matches above, loose matches on Subject: below --
2012-07-13 20:10 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=20120807073427.GO11011@atomide.com \
--to=tony@atomide.com \
--cc=jon-hunter@ti.com \
--cc=khilman@ti.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=tarun.kanti@ti.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.