[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