Thread (48 messages) 48 messages, 11 authors, 2015-03-11

[PATCH v2 5/6] watchdog: at91sam9: request the irq with IRQF_NO_SUSPEND

From: Boris Brezillon <hidden>
Date: 2015-03-11 07:33:58
Also in: linux-pm, linux-rtc, linux-serial, linux-watchdog, lkml

Rafael, Alexandre,

On Wed, 11 Mar 2015 02:03:08 +0100
"Rafael J. Wysocki" [off-list ref] wrote:
On Tuesday, March 10, 2015 11:33:05 PM Alexandre Belloni wrote:
quoted
On 10/03/2015 at 23:31:52 +0100, Rafael J. Wysocki wrote :
quoted
On Tuesday, March 10, 2015 10:33:17 PM Alexandre Belloni wrote:
quoted
Hi,

On 09/03/2015 at 15:30:01 +0100, Rafael J. Wysocki wrote :
quoted
quoted
quoted
quoted
Actaully, your platform should just refuse to enter suspend-to-RAM
when hw watchdog is enabled.
Quite likely, depending on how exactly the suspend is implemented.
We've had absolutely zero complain on that. It is quite clear in the
datasheet that failing to refresh the watchdog once started will lead to
a reset and that it is impossible to stop.
It is actually quite convenient to also ensure that you can actually
wake up from suspend because that can obviously go wrong.
I gather then that the suspend implementation is such that touching the
watchdog periodically while suspended is not a problem.

Again, can you please tell me how suspend is implemented on at91?
It actually depends on the architecture (at91rm9200, at91sam9 or sama5)
but basically, the clocks are switched off in almost all the peripheral
drivers then the ram self refresh activated, the master clock is
switched off using code running from SRAM and the core is then waiting
for interrupt.
OK, so it looks like enable_irq_wake() doesn't actually affect the hardware
on those platforms, is that correct?
I didn't exactly look in details but apart from the wakeup from gpio
handling (keeping the pio controller clocked in the case one of its gpio
has wakeup enabled), I don't think it does much more. It uses
irq_gc_set_wake().
Well, that only modifies gc->wake_active, so no hardware interactions.
I'm not sure I understand the whole discussion, but calling
enable_irq_wake() does affect suspend behavior on at91 platforms.
Take a look at the suspend() implementation [1], it's making use of the
wake_active field (modified by irq_gc_set_wake) when entering suspend
in order to keep wakeup IRQ sources enabled. 

Best Regards,

Boris


[1]http://lxr.free-electrons.com/source/drivers/irqchip/irq-atmel-aic.c#L106

-- 
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help