From: jon-hunter@ti.com (Jon Hunter)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 02/10] ARM: OMAP: Fix timer posted mode support
Date: Thu, 6 Sep 2012 09:20:07 -0500 [thread overview]
Message-ID: <5048B117.7050601@ti.com> (raw)
In-Reply-To: <50489DBD.5030200@ti.com>
On 09/06/2012 07:57 AM, Vaibhav Hiremath wrote:
>
>
> On 9/6/2012 12:34 AM, Jon Hunter wrote:
>> Currently the dmtimer posted mode is being enabled when the function
>> __omap_dm_timer_reset() is called. This function is only being called for
>> OMAP1 timers and OMAP2+ timers that are being used as system timers. Hence,
>> for OMAP2+ timers that are NOT being used as a system timer, posted mode is
>> not enabled but the "timer->posted" variable is still set (incorrectly) in
>> the omap_dm_timer_prepare() function.
>>
>> This is a regression introduced by commit 3392cdd3 (ARM: OMAP: dmtimer:
>> switch-over to platform device driver) which changed the code to only call
>> omap_dm_timer_reset() for OMAP1 devices. Although this is a regression from
>> the original code it only impacts performance and so is not needed for stable.
>>
>> Signed-off-by: Jon Hunter <jon-hunter@ti.com>
>> ---
>> arch/arm/mach-omap2/timer.c | 3 +--
>> arch/arm/plat-omap/dmtimer.c | 14 +++++---------
>> arch/arm/plat-omap/include/plat/dmtimer.h | 9 ++++++++-
>> 3 files changed, 14 insertions(+), 12 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
>> index 5471706..e24ee0f 100644
>> --- a/arch/arm/mach-omap2/timer.c
>> +++ b/arch/arm/mach-omap2/timer.c
>> @@ -194,10 +194,9 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer,
>> }
>> __omap_dm_timer_init_regs(timer);
>> __omap_dm_timer_reset(timer, 1, 1);
>> - timer->posted = 1;
>> + __omap_dm_timer_enable_posted(timer);
>>
>> timer->rate = clk_get_rate(timer->fclk);
>> -
>> timer->reserved = 1;
>>
>> return res;
>> diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c
>> index c34f55b..22790ea 100644
>> --- a/arch/arm/plat-omap/dmtimer.c
>> +++ b/arch/arm/plat-omap/dmtimer.c
>> @@ -122,21 +122,15 @@ static void omap_dm_timer_wait_for_reset(struct omap_dm_timer *timer)
>>
>> static void omap_dm_timer_reset(struct omap_dm_timer *timer)
>> {
>> - omap_dm_timer_enable(timer);
>> if (timer->pdev->id != 1) {
>> omap_dm_timer_write_reg(timer, OMAP_TIMER_IF_CTRL_REG, 0x06);
>> omap_dm_timer_wait_for_reset(timer);
>> }
>> -
>> __omap_dm_timer_reset(timer, 0, 0);
>> - omap_dm_timer_disable(timer);
>> - timer->posted = 1;
>> }
>>
>> int omap_dm_timer_prepare(struct omap_dm_timer *timer)
>> {
>> - int ret;
>> -
>> /*
>> * FIXME: OMAP1 devices do not use the clock framework for dmtimers so
>> * do not call clk_get() for these devices.
>> @@ -150,13 +144,15 @@ int omap_dm_timer_prepare(struct omap_dm_timer *timer)
>> }
>> }
>>
>> + omap_dm_timer_enable(timer);
>> +
>> if (timer->capability & OMAP_TIMER_NEEDS_RESET)
>> omap_dm_timer_reset(timer);
>>
>> - ret = omap_dm_timer_set_source(timer, OMAP_TIMER_SRC_32_KHZ);
>> + __omap_dm_timer_enable_posted(timer);
>> + omap_dm_timer_disable(timer);
>>
>> - timer->posted = 1;
>> - return ret;
>> + return omap_dm_timer_set_source(timer, OMAP_TIMER_SRC_32_KHZ);
>
> May be I am speculating here and I know this is tested and supposed to
> work, but Isn't it safe to set parent keeping module enables.
So you would rather change the functional clock while the timer is
enabled/active? So although that we are doing this today, that does not
sound like a good idea to me :-)
> I would still recommend you to move is before omap_dm_timer_disable().
> There could be devices or hw bugs/issues, may be related to standby/idle
> protocol happening underneath module enable/disable.
The register for setting the timer parent clock is located in the
Configuration Module (OMAP1) and PRCM (OMAP2+) and so there is no
requirement to keep the timer active while doing this.
Furthermore, if you look at the omap_dm_timer_set_source() function that
can be called from any driver using the timer, we never enable the timer
when setting the timer clock source. So this way is more consistent with
how the set_source function is implemented.
Cheers
Jon
next prev parent reply other threads:[~2012-09-06 14:20 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-05 19:04 [PATCH 00/10] ARM: OMAP: DMTIMER fixes and clean-up Jon Hunter
2012-09-05 19:04 ` [PATCH 01/10] ARM: OMAP3+: Implement timer workaround for errata i103 and i767 Jon Hunter
2012-09-06 5:07 ` Vaibhav Hiremath
2012-09-06 14:06 ` Jon Hunter
2012-09-06 14:42 ` Jon Hunter
2012-09-06 15:20 ` Jon Hunter
2012-09-13 10:26 ` Hiremath, Vaibhav
2012-09-13 10:24 ` Hiremath, Vaibhav
2012-09-05 19:04 ` [PATCH 02/10] ARM: OMAP: Fix timer posted mode support Jon Hunter
2012-09-06 12:57 ` Vaibhav Hiremath
2012-09-06 14:20 ` Jon Hunter [this message]
2012-09-06 16:01 ` Jon Hunter
2012-09-13 10:24 ` Hiremath, Vaibhav
2012-09-05 19:04 ` [PATCH 03/10] ARM: OMAP3: Correct HWMOD DMTIMER SYSC register declarations Jon Hunter
2012-09-05 19:04 ` [PATCH 04/10] ARM: OMAP2/3: Define HWMOD software reset status for DMTIMERs Jon Hunter
2012-09-05 19:04 ` [PATCH 05/10] ARM: OMAP2+: Don't use __omap_dm_timer_reset() Jon Hunter
2012-09-05 19:04 ` [PATCH 06/10] ARM: OMAP: Fix dmtimer reset for timer1 Jon Hunter
2012-09-05 19:04 ` [PATCH 07/10] ARM: OMAP: Clean-up dmtimer reset code Jon Hunter
2012-09-05 19:04 ` [PATCH 08/10] ARM: OMAP: Clean-up timer posted mode support Jon Hunter
2012-09-07 22:22 ` Tony Lindgren
2012-09-10 21:59 ` Jon Hunter
2012-09-11 0:58 ` Tony Lindgren
2012-09-11 16:26 ` Jon Hunter
2012-09-11 16:34 ` Tony Lindgren
2012-09-13 3:26 ` Jon Hunter
2012-09-05 19:04 ` [PATCH 09/10] ARM: OMAP: Add dmtimer interrupt disable function Jon Hunter
2012-09-06 12:58 ` Vaibhav Hiremath
2012-09-06 14:26 ` Jon Hunter
2012-09-05 19:04 ` [PATCH 10/10] ARM: OMAP: Remove unnecessary call to clk_get() Jon Hunter
2012-09-06 12:58 ` [PATCH 00/10] ARM: OMAP: DMTIMER fixes and clean-up Vaibhav Hiremath
2012-09-06 14:30 ` 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=5048B117.7050601@ti.com \
--to=jon-hunter@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).