* [PATCH 1/2] ARM: local timers: Unmask interrupt before new TVAL is set
@ 2012-08-10 21:57 Rohit Vaswani
2012-08-11 10:17 ` Marc Zyngier
0 siblings, 1 reply; 3+ messages in thread
From: Rohit Vaswani @ 2012-08-10 21:57 UTC (permalink / raw)
To: marc.zyngier, Russell King
Cc: Rohit Vaswani, linux-arm-kernel, linux-kernel, linux-arm-msm
Level triggered interrupt is deasserted when a new TVAL is written
only when the interrupt is unmasked. Make sure that the interrupt
is unmasked in CTL register before TVAL is written.
If this order is not followed, there are chances that on some
hardware you would not receive any timer interrupts.
Signed-off-by: Rohit Vaswani <rvaswani@codeaurora.org>
---
arch/arm/kernel/arch_timer.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/arm/kernel/arch_timer.c b/arch/arm/kernel/arch_timer.c
index dd58035..1d0d9df 100644
--- a/arch/arm/kernel/arch_timer.c
+++ b/arch/arm/kernel/arch_timer.c
@@ -126,8 +126,8 @@ static int arch_timer_set_next_event(unsigned long evt,
ctrl |= ARCH_TIMER_CTRL_ENABLE;
ctrl &= ~ARCH_TIMER_CTRL_IT_MASK;
- arch_timer_reg_write(ARCH_TIMER_REG_TVAL, evt);
arch_timer_reg_write(ARCH_TIMER_REG_CTRL, ctrl);
+ arch_timer_reg_write(ARCH_TIMER_REG_TVAL, evt);
return 0;
}
--
Sent by an employee of the Qualcomm Innovation Center,Inc
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 1/2] ARM: local timers: Unmask interrupt before new TVAL is set
2012-08-10 21:57 [PATCH 1/2] ARM: local timers: Unmask interrupt before new TVAL is set Rohit Vaswani
@ 2012-08-11 10:17 ` Marc Zyngier
2012-08-14 18:49 ` Rohit Vaswani
0 siblings, 1 reply; 3+ messages in thread
From: Marc Zyngier @ 2012-08-11 10:17 UTC (permalink / raw)
To: Rohit Vaswani; +Cc: Russell King, linux-arm-msm, linux-arm-kernel, linux-kernel
On Fri, 10 Aug 2012 14:57:34 -0700, Rohit Vaswani
<rvaswani@codeaurora.org>
wrote:
> Level triggered interrupt is deasserted when a new TVAL is written
> only when the interrupt is unmasked. Make sure that the interrupt
> is unmasked in CTL register before TVAL is written.
> If this order is not followed, there are chances that on some
> hardware you would not receive any timer interrupts.
>
> Signed-off-by: Rohit Vaswani <rvaswani@codeaurora.org>
> ---
> arch/arm/kernel/arch_timer.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/kernel/arch_timer.c b/arch/arm/kernel/arch_timer.c
> index dd58035..1d0d9df 100644
> --- a/arch/arm/kernel/arch_timer.c
> +++ b/arch/arm/kernel/arch_timer.c
> @@ -126,8 +126,8 @@ static int arch_timer_set_next_event(unsigned long
evt,
> ctrl |= ARCH_TIMER_CTRL_ENABLE;
> ctrl &= ~ARCH_TIMER_CTRL_IT_MASK;
>
> - arch_timer_reg_write(ARCH_TIMER_REG_TVAL, evt);
> arch_timer_reg_write(ARCH_TIMER_REG_CTRL, ctrl);
> + arch_timer_reg_write(ARCH_TIMER_REG_TVAL, evt);
But by doing so, you're opening a window where TVAL can be negative (from
a previous timer trigger) and the interrupt unmasked, which would lead to
an immediate trigger, before TVAL is updated with the new value.
Does your hardware deassert the interrupt even when the enable bit is not
set? If so, would the following sequence work?
ctrl &= ~(ARCH_TIMER_CTRL_ENABLE | ARCH_TIMER_CTRL_IT_MASK);
arch_timer_reg_write(ARCH_TIMER_REG_CTRL, ctrl);
arch_timer_reg_write(ARCH_TIMER_REG_TVAL, evt);
ctrl |= ARCH_TIMER_CTRL_ENABLE;
arch_timer_reg_write(ARCH_TIMER_REG_CTRL, ctrl);
Thanks,
M.
--
Fast, cheap, reliable. Pick two.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 1/2] ARM: local timers: Unmask interrupt before new TVAL is set
2012-08-11 10:17 ` Marc Zyngier
@ 2012-08-14 18:49 ` Rohit Vaswani
0 siblings, 0 replies; 3+ messages in thread
From: Rohit Vaswani @ 2012-08-14 18:49 UTC (permalink / raw)
To: Marc Zyngier; +Cc: Russell King, linux-arm-msm, linux-arm-kernel, linux-kernel
On 8/11/2012 3:17 AM, Marc Zyngier wrote:
> On Fri, 10 Aug 2012 14:57:34 -0700, Rohit Vaswani
> <rvaswani@codeaurora.org>
> wrote:
>> Level triggered interrupt is deasserted when a new TVAL is written
>> only when the interrupt is unmasked. Make sure that the interrupt
>> is unmasked in CTL register before TVAL is written.
>> If this order is not followed, there are chances that on some
>> hardware you would not receive any timer interrupts.
>>
>> Signed-off-by: Rohit Vaswani <rvaswani@codeaurora.org>
>> ---
>> arch/arm/kernel/arch_timer.c | 2 +-
>> 1 files changed, 1 insertions(+), 1 deletions(-)
>>
>> diff --git a/arch/arm/kernel/arch_timer.c b/arch/arm/kernel/arch_timer.c
>> index dd58035..1d0d9df 100644
>> --- a/arch/arm/kernel/arch_timer.c
>> +++ b/arch/arm/kernel/arch_timer.c
>> @@ -126,8 +126,8 @@ static int arch_timer_set_next_event(unsigned long
> evt,
>> ctrl |= ARCH_TIMER_CTRL_ENABLE;
>> ctrl &= ~ARCH_TIMER_CTRL_IT_MASK;
>>
>> - arch_timer_reg_write(ARCH_TIMER_REG_TVAL, evt);
>> arch_timer_reg_write(ARCH_TIMER_REG_CTRL, ctrl);
>> + arch_timer_reg_write(ARCH_TIMER_REG_TVAL, evt);
> But by doing so, you're opening a window where TVAL can be negative (from
> a previous timer trigger) and the interrupt unmasked, which would lead to
> an immediate trigger, before TVAL is updated with the new value.
>
> Does your hardware deassert the interrupt even when the enable bit is not
> set? If so, would the following sequence work?
>
> ctrl &= ~(ARCH_TIMER_CTRL_ENABLE | ARCH_TIMER_CTRL_IT_MASK);
> arch_timer_reg_write(ARCH_TIMER_REG_CTRL, ctrl);
>
> arch_timer_reg_write(ARCH_TIMER_REG_TVAL, evt);
>
> ctrl |= ARCH_TIMER_CTRL_ENABLE;
> arch_timer_reg_write(ARCH_TIMER_REG_CTRL, ctrl);
>
> Thanks,
>
> M.
Thanks Marc, this works. I will re-send the patch with these changes.
Thanks,
Rohit Vaswani
--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-08-14 18:49 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-10 21:57 [PATCH 1/2] ARM: local timers: Unmask interrupt before new TVAL is set Rohit Vaswani
2012-08-11 10:17 ` Marc Zyngier
2012-08-14 18:49 ` Rohit Vaswani
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).