Skip to content
  • Gabriele Mazzotta's avatar
    rtc: cmos: Restore alarm after resume · 68669d55
    Gabriele Mazzotta authored
    
    
    Some platform firmware may interfere with the RTC alarm over suspend,
    resulting in the kernel and hardware having different ideas about system
    state but also potentially causing problems with firmware that assumes the
    OS will clean this case up.  This patch restores the RTC alarm on resume
    to ensure that kernel and hardware are in sync.
    
    The case we've seen is Intel Rapid Start, which is a firmware-mediated
    feature that automatically transitions systems from suspend-to-RAM to
    suspend-to-disk without OS involvement.  It does this by setting the RTC
    alarm and a flag that indicates that on wake it should perform the
    transition rather than re-starting the OS.  However, if the OS has set a
    wakeup alarm that would wake the machine earlier, it refuses to overwrite
    it and allows the system to wake instead.
    
    This fails in the following situation:
    
    1) User configures Intel Rapid Start to transition after (say) 15
    minutes
    2) User suspends to RAM. Firmware sets the wakeup alarm for 15 minutes
    in the future
    3) User resumes after 5 minutes. Firmware does not reset the alarm, and
    as such it is still set for 10 minutes in the future
    4) User suspends after 5 minutes. Firmware notices that the alarm is set
    for 5 minutes in the future, which is less than the 15 minute transition
    threshold. It therefore assumes that the user wants the machine to wake
    in 5 minutes
    5) System resumes after 5 minutes
    
    The worst case scenario here is that the user may have put the system in a
    bag between (4) and (5), resulting in it running in a confined space and
    potentially overheating.  This seems reasonably important.  The Rapid
    Start support code got added in 3.11, but it can be configured in the
    firmware regardless of kernel support.
    
    Signed-off-by: default avatarGabriele Mazzotta <gabriele.mzt@gmail.com>
    Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@free-electrons.com>
    68669d55