<tero.kri...@nokia.com> writes:

>  
>
>>-----Original Message-----
>>From: ext Kevin Hilman [mailto:khil...@deeprootsystems.com] 
>>Sent: 10 March, 2010 20:21
>>To: Kristo Tero (Nokia-D/Tampere)
>>Cc: linux-omap@vger.kernel.org
>>Subject: Re: [PATCHv6] OMAP3: Serial: Improved sleep logic
>>
>>Kevin Hilman <khil...@deeprootsystems.com> writes:
>>
>>> Tero Kristo <tero.kri...@nokia.com> writes:
>>>
>>>> From: Tero Kristo <tero.kri...@nokia.com>
>>>>
>>>> This patch contains following improvements:
>>>> - Only RX interrupt will now kick the sleep prevent timer
>>>> - TX fifo status is checked before disabling clocks, this 
>>will prevent
>>>>   on-going transmission to be cut
>>>> - Smartidle is now enabled/disabled only while switching 
>>clocks, as having
>>>>   smartidle enabled while RX/TX prevents any wakeups from 
>>being received
>>>>   from UART module
>>>> - Added workqueue for wakeup checks, as jiffy timer access 
>>within the
>>>>   idle loop results into skewed timers as jiffy timers are stopped
>>>> - Added garbage_timer for ignoring the first character 
>>received during
>>>>   the first tick after clock enable, this prevents garbage 
>>characters to be
>>>>   received in low sleep states
>>>> - omap_uart_enable_irqs() changed to use enable_irq / 
>>disable_irq instead
>>>>   of request / free. Using request/free changes the 
>>behavior after first
>>>>   suspend due to reversed interrupt handler ordering
>>>>
>>>> Signed-off-by: Tero Kristo <tero.kri...@nokia.com>
>>>
>>> Thanks Tero.  This version looks good.
>>>
>>> Adding to pm-fixes queue for 2.6.34-rcX after minor change below...
>>>
>>
>>There's still something slightly strange going on here...
>>
>>I noticed via powertop that the garbage timer is now one of the top
>>reasons for wakeup in an idle system.  Seems like the garbage timer
>>is firing when it shouldn't be, and triggering unnecessary wakeups
>>
>>Based on powertop stats, the garbage timer is firing about 3x more
>>often than the GPtimer that should be waking the system.
>
> You get one timer expire each wakeup cycle, but the system actually fires its 
> own timer for each UART, thus you get 3x. It is possible to optimize the 
> timer a bit by only firing it if we have a wakeup from UART, but this 
> probably causes occasional garbage to the console, if a wakeup from some 
> other source than UART and UART RX happen at the same time. Might be the 
> lesser of two evils though.
>
> I can experiment with this change a bit and see how it behaves.
>

OK, the 3x makes sense, but the garbage timer should never be the
cause of a wakeup.

Maybe you also need to be sure that the garbage timer is disabled
before clocks are disabled so it doesn't fire and cause a wakeup.

Kevin
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to