1. 25 5月, 2018 1 次提交
    • R
      ACPI: EC: Dispatch the EC GPE directly on s2idle wake · 68e22011
      Rafael J. Wysocki 提交于
      On platforms where the Low Power S0 Idle _DSM interface is used,
      on wakeup from suspend-to-idle, when it is known that the ACPI SCI
      has triggered while suspended, dispatch the EC GPE in order to catch
      all EC events that may have triggered the wakeup before carrying out
      the noirq phase of device resume.
      
      That is needed to handle power button wakeup on some platforms where
      the EC goes into a low-power mode during suspend-to-idle and while in
      that mode it will discard events after a timeout.  If that timeout is
      shorter than the time it takes to complete the noirq resume of
      devices, looking for EC events after the latter is too late.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Reported-by: NZhang Rui <rui.zhang@intel.com>
      Tested-by: NWendy Wang <wendy.wang@intel.com>
      68e22011
  2. 23 4月, 2018 1 次提交
  3. 31 3月, 2018 1 次提交
    • C
      ACPI / PM: Fix keyboard wakeup from suspend-to-idle on ASUS UX331UA · 6f1d7c45
      Chris Chiu 提交于
      This issue happens on new ASUS laptop UX331UA which has modern
      standby mode (suspend-to-idle). Pressing keys on the PS2 keyboard
      can't wake up the system from suspend-to-idle which is not expected.
      However, pressing power button can wake up without problem.
      
      Per the engineers of ASUS, the keypress event is routed to Embedded
      Controller (EC) in standby mode. EC then signals the SCI event to
      BIOS so BIOS would Notify() power button to wake up the system. It's
      from BIOS perspective. What we observe here is that kernel receives
      the SCI event from SCI interrupt handler which informs that the GPE
      status bit belongs to EC needs to be handled and then queries the EC
      to find out what event is pending. Then execute the following ACPI
      _QDF method which defined in ACPI DSDT for EC to notify power button.
      
       Method (_QDF, 0, NotSerialized)  // _Qxx: EC Query
              {
                  Notify (PWRB, 0x80) // Status Change
              }
      
      With more debug messages added to analyze this problem, we find that
      the keypress does wake up the system from suspend-to-idle but it's back
      to suspend again almost immediately. As we see in the following messages,
      the acpi_button_notify() is invoked but acpi_pm_wakeup_event() can not
      really wake up the system here because acpi_s2idle_wakeup() is false.
      The acpi_s2idle_wakeup() returnd false because the acpi_s2idle_sync() has
      alrealdy exited.
      
      [   52.987048] s2idle_loop going s2idle
      [   59.713392] acpi_s2idle_wake enter
      [   59.713394] acpi_s2idle_wake exit
      [   59.760888] acpi_ev_gpe_detect enter
      [   59.760893] acpi_s2idle_sync enter
      [   59.760893] acpi_ec_query_flushed ec pending queries 0
      [   59.760953] Read registers for GPE 50-57: Status=01, Enable=01, RunEnable=01, WakeEnable=00
      [   59.760955] ACPI: EC: ===== IRQ (1) =====
      [   59.760972] ACPI: EC: EC_SC(R) = 0x28 SCI_EVT=1 BURST=0 CMD=1 IBF=0 OBF=0
      [   59.760979] ACPI: EC: +++++ Polling enabled +++++
      [   59.760979] ACPI: EC: ##### Command(QR_EC) submitted/blocked #####
      [   59.761003] acpi_s2idle_sync exit
      [   59.769587] ACPI: EC: ##### Query(0xdf) started #####
      [   59.769611] ACPI: EC: ##### Query(0xdf) stopped #####
      [   59.774154] acpi_button_notify button type 1
      [   59.813175] s2idle_loop going s2idle
      
      acpi_s2idle_sync() already makes an effort to flush the EC event
      queue, but in this case, the EC event has yet to be generated when
      the call to acpi_ec_flush_work() is made. The event is generated
      shortly after, through the ongoing handling of the SCI interrupt
      which is happening on another CPU, and we must synchronize that
      to make sure that it has run and completed. Adding another call to
      acpi_os_wait_events_complete() solves this issue, since that
      function synchronizes with SCI interrupt completion.
      Signed-off-by: NChris Chiu <chiu@endlessm.com>
      [ rjw: Subject ]
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      6f1d7c45
  4. 19 3月, 2018 1 次提交
    • R
      ACPI / PM: Reduce LPI constraints logging noise · fa54150a
      Rafael J. Wysocki 提交于
      If a device referred to by ACPI LPI constrains (coming from function 1
      of the Low Power S0 Idle _DSM interface) is not power-manageable via
      ACPI (no _PS0 method and no power resources), the code generating
      diagnostic information for the LPI constraints will print a message
      about that to the kernel log on every system suspend-resume cycle
      (possibly for multiple times).
      
      That is not very useful and noisy, so modify that code to disregard
      the LPI list entries corresponding to the devices that are not power-
      manageable after printing that information for them once.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Reviewed-by: NSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
      fa54150a
  5. 23 2月, 2018 1 次提交
  6. 22 2月, 2018 1 次提交
    • R
      ACPI / PM: Do not reconfigure GPEs for suspend-to-idle · 147a7d9d
      Rafael J. Wysocki 提交于
      It is reported that commit 235d81a6 (ACPI / PM: Clean up device
      wakeup enable/disable code) broke wakeup from suspend-to-idle on
      some platforms.  That is due to the acpi_enable_all_wakeup_gpes() in
      acpi_s2idle_prepare() which needs acpi_enable_wakeup_devices() to be
      called before it as the latter sets up the GPE masks used by the
      former and commit 235d81a6 removed acpi_enable_wakeup_devices()
      invocation from the suspend-to-idle path.
      
      However, acpi_enable_wakeup_devices() does more than just setting
      the GPE masks and the remaining part of it is not necessary for
      suspend-to-idle.  Moreover, non-wakeup GPEs are disabled on suspend-
      to-idle entry to avoid spurious wakeups, but that should not be
      strictly necessary any more after commit 33e4f80e (ACPI / PM:
      Ignore spurious SCI wakeups from suspend-to-idle) which prevents
      spurious GPE wakeups from resuming the system.  The only consequence
      of leaving non-wakeup GPEs enabled may be more interrupt-related
      activity while suspended, which is not ideal (more energy is used
      if that happens), but it is not critical too.
      
      For this reason, drop the GPE reconfiguration from the suspend-to-idle
      path entirely.
      
      This change also allows Dells XPS13 9360 blacklisted by commit
      71630b7a (ACPI / PM: Blacklist Low Power S0 Idle _DSM for Dell
      XPS13 9360) to use the power button for waking up from suspend-
      to-idle and it helps at least one other older Dell system (the
      wakeup button GPE on that one is not listed in _PRW for any
      devices, so it is not regarded as a wakeup one and gets disabled
      on suspend-to-idle entry today).
      
      Fixes: 235d81a6 (ACPI / PM: Clean up device wakeup enable/disable code)
      Reported-by: NDu Wenkai <wenkai.du@intel.com>
      Tested-by: NDu Wenkai <wenkai.du@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      147a7d9d
  7. 12 1月, 2018 1 次提交
  8. 27 11月, 2017 1 次提交
    • R
      ACPI / PM: Make it possible to ignore the system sleep blacklist · 57044031
      Rafael J. Wysocki 提交于
      The ACPI code supporting system transitions to sleep states uses
      an internal blacklist to apply special handling to some machines
      reported to behave incorrectly in some ways.
      
      However, some entries of that blacklist cover problematic as well as
      non-problematic systems, so give the users of the latter a chance to
      ignore the blacklist and run their systems in the default way by
      adding acpi_sleep=nobl to the kernel command line.
      
      For example, that allows the users of Dell XPS13 9360 systems not
      affected by the issue that caused the blacklist entry for this
      machine to be added by commit 71630b7a (ACPI / PM: Blacklist Low
      Power S0 Idle _DSM for Dell XPS13 9360) to use suspend-to-idle with
      the Low Power S0 Idle _DSM interface which in principle should be
      more energy-efficient than S3 on them.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      57044031
  9. 07 11月, 2017 1 次提交
  10. 14 9月, 2017 1 次提交
  11. 18 8月, 2017 1 次提交
    • S
      ACPI / PM: Check low power idle constraints for debug only · 726fb6b4
      Srinivas Pandruvada 提交于
      For SoC to achieve its lowest power platform idle state a set of hardware
      preconditions must be met. These preconditions or constraints can be
      obtained by issuing a device specific method (_DSM) with function "1".
      Refer to the document provided in the link below.
      
      Here during initialization (from attach() callback of LPS0 device), invoke
      function 1 to get the device constraints. Each enabled constraint is
      stored in a table.
      
      The devices in this table are used to check whether they were in required
      minimum state, while entering suspend. This check is done from platform
      freeze wake() callback, only when /sys/power/pm_debug_messages attribute
      is non zero.
      
      If any constraint is not met and device is ACPI power managed then it
      prints the device information to kernel logs.
      
      Also if debug is enabled in acpi/sleep.c, the constraint table and state
      of each device on wake is dumped in kernel logs.
      
      Since pm_debug_messages_on setting is used as condition to check
      constraints outside kernel/power/main.c, pm_debug_messages_on is changed
      to a global variable.
      
      Link: http://www.uefi.org/sites/default/files/resources/Intel_ACPI_Low_Power_S0_Idle.pdfSigned-off-by: NSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      726fb6b4
  12. 11 8月, 2017 2 次提交
  13. 05 8月, 2017 1 次提交
    • R
      ACPI / PM: Prefer suspend-to-idle over S3 on some systems · e870c6c8
      Rafael J. Wysocki 提交于
      Modify the ACPI system sleep support setup code to select
      suspend-to-idle as the default system sleep state if
      (1) the ACPI_FADT_LOW_POWER_S0 flag is set in the FADT and
      (2) the Low Power Idle S0 _DSM interface has been discovered and
      (3) the default sleep state was not selected from the kernel command
      line.
      
      The main motivation for this change is that systems where the (1) and
      (2) conditions are met typically ship with OSes that don't exercise
      the S3 path in the platform firmware which remains untested and turns
      out to be non-functional at least in some cases.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Tested-by: NMario Limonciello <mario.limonciello@dell.com>
      e870c6c8
  14. 01 8月, 2017 1 次提交
  15. 20 7月, 2017 1 次提交
    • R
      ACPI / PM / EC: Flush all EC work in acpi_freeze_sync() · 880a6627
      Rafael J. Wysocki 提交于
      Commit eed4d47e (ACPI / sleep: Ignore spurious SCI wakeups from
      suspend-to-idle) introduced acpi_freeze_sync() whose purpose is to
      flush all of the processing of possible wakeup events signaled via
      the ACPI SCI.  However, it doesn't flush the query workqueue used
      by the EC driver, so the events generated by the EC may not be
      processed timely which leads to issues (increased overhead at least,
      lost events possibly).
      
      To fix that introduce acpi_ec_flush_work() that will flush all of
      the outstanding EC work and call it from acpi_freeze_sync().
      
      Fixes: eed4d47e (ACPI / sleep: Ignore spurious SCI wakeups from suspend-to-idle)
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      880a6627
  16. 23 6月, 2017 1 次提交
    • R
      ACPI / sleep: EC-based wakeup from suspend-to-idle on recent systems · 8110dd28
      Rafael J. Wysocki 提交于
      Some recent Dell laptops, including the XPS13 model numbers 9360 and
      9365, cannot be woken up from suspend-to-idle by pressing the power
      button which is unexpected and makes that feature less usable on
      those systems.  Moreover, on the 9365 ACPI S3 (suspend-to-RAM) is
      not expected to be used at all (the OS these systems ship with never
      exercises the ACPI S3 path in the firmware) and suspend-to-idle is
      the only viable system suspend mechanism there.
      
      The reason why the power button wakeup from suspend-to-idle doesn't
      work on those systems is because their power button events are
      signaled by the EC (Embedded Controller), whose GPE (General Purpose
      Event) line is disabled during suspend-to-idle transitions in Linux.
      That is done on purpose, because in general the EC tends to be noisy
      for various reasons (battery and thermal updates and similar, for
      example) and all events signaled by it would kick the CPUs out of
      deep idle states while in suspend-to-idle, which effectively might
      defeat its purpose.
      
      Of course, on the Dell systems in question the EC GPE must be enabled
      during suspend-to-idle transitions for the button press events to
      be signaled while suspended at all, but fortunately there is a way
      out of this puzzle.
      
      First of all, those systems have the ACPI_FADT_LOW_POWER_S0 flag set
      in their ACPI tables, which means that the OS is expected to prefer
      the "low power S0 idle" system state over ACPI S3 on them.  That
      causes the most recent versions of other OSes to simply ignore ACPI
      S3 on those systems, so it is reasonable to expect that it should not
      be necessary to block GPEs during suspend-to-idle on them.
      
      Second, in addition to that, the systems in question provide a special
      firmware interface that can be used to indicate to the platform that
      the OS is transitioning into a system-wide low-power state in which
      certain types of activity are not desirable or that it is leaving
      such a state and that (in principle) should allow the platform to
      adjust its operation mode accordingly.
      
      That interface is a special _DSM object under a System Power
      Management Controller device (PNP0D80).  The expected way to use it
      is to invoke function 0 from it on system initialization, functions
      3 and 5 during suspend transitions and functions 4 and 6 during
      resume transitions (to reverse the actions carried out by the
      former).  In particular, function 5 from the "Low-Power S0" device
      _DSM is expected to cause the platform to put itself into a low-power
      operation mode which should include making the EC less verbose (so to
      speak).  Next, on resume, function 6 switches the platform back to
      the "working-state" operation mode.
      
      In accordance with the above, modify the ACPI suspend-to-idle code
      to look for the "Low-Power S0" _DSM interface on platforms with the
      ACPI_FADT_LOW_POWER_S0 flag set in the ACPI tables.  If it's there,
      use it during suspend-to-idle transitions as prescribed and avoid
      changing the GPE configuration in that case.  [That should reflect
      what the most recent versions of other OSes do.]
      
      Also modify the ACPI EC driver to make it handle events during
      suspend-to-idle in the usual way if the "Low-Power S0" _DSM interface
      is going to be used to make the power button events work while
      suspended on the Dell machines mentioned above
      
      Link: http://www.uefi.org/sites/default/files/resources/Intel_ACPI_Low_Power_S0_Idle.pdfSigned-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      8110dd28
  17. 15 6月, 2017 2 次提交
    • R
      ACPI / PM: Ignore spurious SCI wakeups from suspend-to-idle · 33e4f80e
      Rafael J. Wysocki 提交于
      The ACPI SCI (System Control Interrupt) is set up as a wakeup IRQ
      during suspend-to-idle transitions and, consequently, any events
      signaled through it wake up the system from that state.  However,
      on some systems some of the events signaled via the ACPI SCI while
      suspended to idle should not cause the system to wake up.  In fact,
      quite often they should just be discarded.
      
      Arguably, systems should not resume entirely on such events, but in
      order to decide which events really should cause the system to resume
      and which are spurious, it is necessary to resume up to the point
      when ACPI SCIs are actually handled and processed, which is after
      executing dpm_resume_noirq() in the system resume path.
      
      For this reasons, add a loop around freeze_enter() in which the
      platforms can process events signaled via multiplexed IRQ lines
      like the ACPI SCI and add suspend-to-idle hooks that can be
      used for this purpose to struct platform_freeze_ops.
      
      In the ACPI case, the ->wake hook is used for checking if the SCI
      has triggered while suspended and deferring the interrupt-induced
      system wakeup until the events signaled through it are actually
      processed sufficiently to decide whether or not the system should
      resume.  In turn, the ->sync hook allows all of the relevant event
      queues to be flushed so as to prevent events from being missed due
      to race conditions.
      
      In addition to that, some ACPI code processing wakeup events needs
      to be modified to use the "hard" version of wakeup triggers, so that
      it will cause a system resume to happen on device-induced wakeup
      events even if the "soft" mechanism to prevent the system from
      suspending is not enabled.  However, to preserve the existing
      behavior with respect to suspend-to-RAM, this only is done in
      the suspend-to-idle case and only if an SCI has occurred while
      suspended.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      33e4f80e
    • R
      ACPI / PM: Clean up device wakeup enable/disable code · 235d81a6
      Rafael J. Wysocki 提交于
      The wakeup.flags.enabled flag in struct acpi_device is not used
      consistently, as there is no reason why it should only apply
      to the enabling/disabling of the wakeup GPE, so put the invocation
      of acpi_enable_wakeup_device_power() under it too.
      
      Moreover, it is not necessary to call
      acpi_enable_wakeup_devices() and acpi_disable_wakeup_devices() for
      suspend-to-idle, so don't do that.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      235d81a6
  18. 07 6月, 2017 1 次提交
  19. 06 5月, 2017 1 次提交
    • R
      ACPI / sleep: Ignore spurious SCI wakeups from suspend-to-idle · eed4d47e
      Rafael J. Wysocki 提交于
      The ACPI SCI (System Control Interrupt) is set up as a wakeup IRQ
      during suspend-to-idle transitions and, consequently, any events
      signaled through it wake up the system from that state.  However,
      on some systems some of the events signaled via the ACPI SCI while
      suspended to idle should not cause the system to wake up.  In fact,
      quite often they should just be discarded.
      
      Arguably, systems should not resume entirely on such events, but in
      order to decide which events really should cause the system to resume
      and which are spurious, it is necessary to resume up to the point
      when ACPI SCIs are actually handled and processed, which is after
      executing dpm_resume_noirq() in the system resume path.
      
      For this reasons, add a loop around freeze_enter() in which the
      platforms can process events signaled via multiplexed IRQ lines
      like the ACPI SCI and add suspend-to-idle hooks that can be
      used for this purpose to struct platform_freeze_ops.
      
      In the ACPI case, the ->wake hook is used for checking if the SCI
      has triggered while suspended and deferring the interrupt-induced
      system wakeup until the events signaled through it are actually
      processed sufficiently to decide whether or not the system should
      resume.  In turn, the ->sync hook allows all of the relevant event
      queues to be flushed so as to prevent events from being missed due
      to race conditions.
      
      In addition to that, some ACPI code processing wakeup events needs
      to be modified to use the "hard" version of wakeup triggers, so that
      it will cause a system resume to happen on device-induced wakeup
      events even if the "soft" mechanism to prevent the system from
      suspending is not enabled (that also helps to catch device-induced
      wakeup events occurring during suspend transitions in progress).
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      eed4d47e
  20. 02 5月, 2017 1 次提交
    • H
      ACPI / power: Delay turning off unused power resources after suspend · 8ece1d83
      Hans de Goede 提交于
      Commit 660b1113 (ACPI / PM: Fix consistency check for power resources
      during resume) introduced a check for ACPI power resources which have
      been turned on by the BIOS during suspend and turns these back off again.
      
      This is causing problems on a Dell Venue Pro 11 7130 (i5-4300Y) it causes
      the following messages to show up in dmesg:
      
      [  131.014605] ACPI: Waking up from system sleep state S3
      [  131.150271] acpi LNXPOWER:07: Turning OFF
      [  131.150323] acpi LNXPOWER:06: Turning OFF
      [  131.150911] acpi LNXPOWER:00: Turning OFF
      [  131.169014] ACPI : EC: interrupt unblocked
      [  131.181811] xhci_hcd 0000:00:14.0: System wakeup disabled by ACPI
      [  133.535728] pci_raw_set_power_state: 76 callbacks suppressed
      [  133.535735] iwlwifi 0000:01:00.0: Refused to change power state,
                     currently in D3
      [  133.597672] PM: noirq resume of devices complete after 2428.891 msecs
      
      Followed by a bunch of iwlwifi errors later on and the pcie device
      dropping from the bus (acpiphp thinks it has been unplugged).
      
      Disabling the turning off of unused power resources fixes this. Instead
      of adding a quirk for this system, this commit fixes this by moving the
      disabling of unused power resources to later in the resume sequence
      when the iwlwifi card has been moved out of D3 so the ref_count for
      its power resource no longer is 0.
      
      This new behavior seems to match the intend of the original commit which
      commit-msg says: "(... which means that no devices are going to need them
      any time soon) and we should turn them off".
      
      This also avoids power resources which we need when bringing devices out
      of D3 from getting bounced off and then back on again.
      Signed-off-by: NHans de Goede <hdegoede@redhat.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      8ece1d83
  21. 01 2月, 2017 1 次提交
  22. 20 1月, 2017 1 次提交
  23. 22 11月, 2016 1 次提交
  24. 21 11月, 2016 1 次提交
  25. 31 8月, 2016 1 次提交
    • L
      ACPI / EC: Add PM operations to improve event handling for resume process · c2b46d67
      Lv Zheng 提交于
      This patch makes 2 changes:
      
      1. Restore old behavior
      Originally, EC driver stops handling both events and transactions in
      acpi_ec_block_transactions(), and restarts to handle transactions in
      acpi_ec_unblock_transactions_early(), restarts to handle both events and
      transactions in acpi_ec_unblock_transactions().
      While currently, EC driver still stops handling both events and
      transactions in acpi_ec_block_transactions(), but restarts to handle both
      events and transactions in acpi_ec_unblock_transactions_early().
      This patch tries to restore the old behavior by dropping
      __acpi_ec_enable_event() from acpi_unblock_transactions_early().
      
      2. Improve old behavior
      However this still cannot fix the real issue as both of the
      acpi_ec_unblock_xxx() functions are invoked in the noirq stage. Since the
      EC driver actually doesn't implement the event handling in the polling
      mode, re-enabling the event handling too early in the noirq stage could
      result in the problem that if there is no triggering source causing
      advance_transaction() to be invoked, pending SCI_EVT cannot be detected by
      the EC driver and _Qxx cannot be triggered.
      It actually makes sense to restart the event handling in any point during
      resuming after the noirq stage. Just like the boot stage where the event
      handling is enabled in .add(), this patch further moves
      acpi_ec_enable_event() to .resume(). After doing that, the following 2
      functions can be combined:
      acpi_ec_unblock_transactions_early()/acpi_ec_unblock_transactions().
      
      The differences of the event handling availability between the old behavior
      (this patch isn't applied) and the new behavior (this patch is applied) are
      as follows:
                              !Applied        Applied
      before suspend          Y               Y
      suspend before EC       Y               Y
      suspend after EC        Y               Y
      suspend_late            Y               Y
      suspend_noirq           Y (actually N)  Y (actually N)
      resume_noirq            Y (actually N)  Y (actually N)
      resume_late             Y (actually N)  Y (actually N)
      resume before EC        Y (actually N)  Y (actually N)
      resume after EC         Y (actually N)  Y
      after resume            Y (actually N)  Y
      Where "actually N" means if there is no triggering source, the EC driver
      is actually not able to notice the pending SCI_EVT occurred in the noirq
      stage. So we can clearly see that this patch has improved the situation.
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Tested-by: NTodd E Brandt <todd.e.brandt@linux.intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      c2b46d67
  26. 17 8月, 2016 1 次提交
  27. 30 6月, 2016 1 次提交
    • O
      ACPI: Execute _PTS before system reboot · 2c85025c
      Ocean He 提交于
      The _PTS control method is defined in the section 7.4.1 of acpi 6.0
      spec. The _PTS control method is executed by the OS during the sleep
      transition process for S1, S2, S3, S4, and for orderly S5 shutdown.
      
      The _PTS control method provides the BIOS a mechanism for performing
      some housekeeping, such as writing the sleep type value to the embedded
      controller, before entering the system sleeping state. Note that some
      Lenovo Server BIOS use this mechanism to detect reboot event and
      prompt user by popped dialog box.
      
      According to section 7.5 of acpi 6.0 spec, _PTS should run after _TTS.
      Add a _PTS evaulation to the existing _TTS reboot notifier and change
      the notifier name to reflect the fact that it's not for _TTS only any
      more.
      Signed-off-by: NOcean He <hehy1@lenovo.com>
      Signed-off-by: NNagananda Chumbalkar <nchumbalkar@lenovo.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      2c85025c
  28. 09 4月, 2016 1 次提交
  29. 23 3月, 2016 1 次提交
    • L
      ACPI / PM: Runtime resume devices when waking from hibernate · fbda4b38
      Lukas Wunner 提交于
      Commit 58a1fbbb ("PM / PCI / ACPI: Kick devices that might have been
      reset by firmware") added a runtime resume for devices that were runtime
      suspended when the system entered suspend-to-RAM.
      
      Briefly, the motivation was to ensure that devices did not remain in a
      reset-power-on state after resume, potentially preventing deep SoC-wide
      low-power states from being entered on idle.
      
      Currently we're not doing the same when leaving suspend-to-disk and this
      asymmetry is a problem if drivers rely on the automatic resume triggered
      by pm_complete_with_resume_check(). Fix it.
      
      Fixes: 58a1fbbb (PM / PCI / ACPI: Kick devices that might have been reset by firmware)
      Signed-off-by: NLukas Wunner <lukas@wunner.de>
      Cc: 4.4+ <stable@vger.kernel.org> # 4.4+
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      fbda4b38
  30. 22 2月, 2016 1 次提交
  31. 05 1月, 2016 1 次提交
    • R
      ACPICA: Drop Linux-specific waking vector functions · e3e9b577
      Rafael J. Wysocki 提交于
      Commit f06147f9 (ACPICA: Hardware: Enable firmware waking vector
      for both 32-bit and 64-bit FACS) added three functions that aren't
      present in upstream ACPICA, acpi_hw_set_firmware_waking_vectors(),
      acpi_set_firmware_waking_vectors() and acpi_set_firmware_waking_vector64(),
      to allow Linux to use the previously existing API for setting the
      platform firmware waking vector.
      
      However, that wasn't necessary, since the ACPI sleep support code
      in Linux can be modified to use the upstream ACPICA's API easily
      and the additional functions may be dropped which reduces the code
      size and puts the kernel's ACPICA code more in line with the upstream.
      
      Make the changes as per the above.  While at it, make the relevant
      function desctiption comments reflect the upstream ACPICA's ones.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Acked-by: NLv Zheng <lv.zheng@intel.com>
      e3e9b577
  32. 26 10月, 2015 1 次提交
    • C
      ACPI / PM: Fix incorrect wakeup IRQ setting during suspend-to-idle · 8c01275e
      Chen Yu 提交于
      For an ACPI compatible system, the SCI (ACPI System Control
      Interrupt) is used to wake the system up from suspend-to-idle.
      Once the CPU is woken up by the SCI, the interrupt handler will
      first check if the current IRQ has been configured for system
      wakeup, so irq_pm_check_wakeup() is invoked to validate the IRQ
      number.  However, during suspend-to-idle, enable_irq_wake() is
      called for acpi_gbl_FADT.sci_interrupt, although the IRQ number
      that the SCI handler has been installed for should be passed to
      it instead.  Thus, if acpi_gbl_FADT.sci_interrupt happens to be
      different from that number, ACPI interrupts will not be able to
      wake up the system from sleep.
      
      Fix this problem by passing the IRQ number returned by
      acpi_gsi_to_irq() to enable_irq_wake() instead of
      acpi_gbl_FADT.sci_interrupt.
      
      Cc: 3.18+ <stable@vger.kernel.org> # 3.18+
      Acked-by: NLv Zheng <lv.zheng@intel.com>
      Signed-off-by: NChen Yu <yu.c.chen@intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      8c01275e
  33. 14 10月, 2015 1 次提交
    • R
      PM / sleep: Add flags to indicate platform firmware involvement · ef25ba04
      Rafael J. Wysocki 提交于
      There are quite a few cases in which device drivers, bus types or
      even the PM core itself may benefit from knowing whether or not
      the platform firmware will be involved in the upcoming system power
      transition (during system suspend) or whether or not it was involved
      in it (during system resume).
      
      For this reason, introduce global system suspend flags that can be
      used by the platform code to expose that information for the benefit
      of the other parts of the kernel and make the ACPI core set them
      as appropriate.
      
      Users of the new flags will be added later.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      ef25ba04
  34. 30 3月, 2015 1 次提交
  35. 18 3月, 2015 1 次提交
  36. 24 1月, 2015 1 次提交
  37. 02 12月, 2014 1 次提交
  38. 01 10月, 2014 1 次提交
    • R
      ACPI / sleep: Rework the handling of ACPI GPE wakeup from suspend-to-idle · a8d46b9e
      Rafael J. Wysocki 提交于
      The ACPI GPE wakeup from suspend-to-idle is currently based on using
      the IRQF_NO_SUSPEND flag for the ACPI SCI, but that is problematic
      for a couple of reasons.  First, in principle the ACPI SCI may be
      shared and IRQF_NO_SUSPEND does not really work well with shared
      interrupts.  Second, it may require the ACPI subsystem to special-case
      the handling of device notifications depending on whether or not
      they are received during suspend-to-idle in some places which would
      lead to fragile code.  Finally, it's better the handle ACPI wakeup
      interrupts consistently with wakeup interrupts from other sources.
      
      For this reason, remove the IRQF_NO_SUSPEND flag from the ACPI SCI
      and use enable_irq_wake()/disable_irq_wake() with it instead, which
      requires two additional platform hooks to be added to struct
      platform_freeze_ops.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      a8d46b9e