Skip to content
  • Zhang Rui's avatar
    rtc: cmos: allow using ACPI for RTC alarm instead of HPET · 311ee9c1
    Zhang Rui authored
    
    
    It's found that the HPET timer prevents the platform from entering
    Low Power S0 on some new Intel platforms.
    
    This means that
    1. users can still use RTC wake Alarm for suspend-to-idle, but the system
       never enters Low Power S0, which is a waste of power.
    or
    2. if users want to put the system into Low Power S0, they can not use
       RTC as the wakeup source.
    
    To fix this, we need to stop using the HPET timer for wake alarm.
    But disabling CONFIG_HPET_EMULATE_RTC is not an option because HPET
    emulates PIT at the same time, and this is needed on some of these
    platforms.
    
    Thus, introduce a new mode (use_acpi_alarm) to the rtc_cmos driver,
    so that, even with CONFIG_HPET_EMULATE_RTC enabled, it's still possible to
    use ACPI SCI for RTC Alarm, including UIE/AIE/wkalrm, instead of HPET.
    
    Only necessary changes are made for the new "use_acpi_alarm" mode, including
    1. drop all the calls to HPET emulation code, including the HPET irq
       handler for rtc interrupt.
    2. enabling/disabling ACPI RTC Fixed event upon RTC UIE/AIE request.
    3. acknowledge the RTC Alarm in ACPI RTC Fixed event handler.
    
    There is no functional change made in this patch if the new mode is not
    enabled.
    
    Note: this "use_acpi_alarm" mode is made based on the assumption that
    ACPI RTC Fixed event is reliable both at runtime and during system wakeup.
    And this has been verified on a couple of platforms I have, including
    a MS Surface Pro 4 (SKL), a Lenovo Yoga 900 (SKL), and a HP 9360 (KBL).
    
    Signed-off-by: default avatarZhang Rui <rui.zhang@intel.com>
    Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
    311ee9c1