1. 02 12月, 2014 1 次提交
  2. 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
  3. 24 7月, 2014 1 次提交
  4. 07 6月, 2014 1 次提交
    • T
      PM / sleep: trace events for suspend/resume · bb3632c6
      Todd E Brandt 提交于
      Adds trace events that give finer resolution into suspend/resume. These
      events are graphed in the timelines generated by the analyze_suspend.py
      script. They represent large areas of time consumed that are typical to
      suspend and resume.
      
      The event is triggered by calling the function "trace_suspend_resume"
      with three arguments: a string (the name of the event to be displayed
      in the timeline), an integer (case specific number, such as the power
      state or cpu number), and a boolean (where true is used to denote the start
      of the timeline event, and false to denote the end).
      
      The suspend_resume trace event reproduces the data that the machine_suspend
      trace event did, so the latter has been removed.
      Signed-off-by: NTodd Brandt <todd.e.brandt@intel.com>
      Acked-by: NSteven Rostedt <rostedt@goodmis.org>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      bb3632c6
  5. 16 5月, 2014 1 次提交
    • R
      ACPI / PM: Hold ACPI scan lock over the "freeze" sleep state · 1f0b6386
      Rafael J. Wysocki 提交于
      The "freeze" sleep state suffers from the same issue that was
      addressed by commit ad07277e (ACPI / PM: Hold acpi_scan_lock over
      system PM transitions) for ACPI sleep states, that is, things break
      if ->remove() is called for devices whose system resume callbacks
      haven't been executed yet.
      
      It also can be addressed in the same way, by holding the ACPI scan
      lock over the "freeze" sleep state and PM transitions to and from
      that state, but ->begin() and ->end() platform operations for the
      "freeze" sleep state are needed for this purpose.
      
      This change has been tested on Acer Aspire S5 with Thunderbolt.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      1f0b6386
  6. 10 5月, 2014 1 次提交
  7. 14 3月, 2014 1 次提交
    • R
      ACPI / sleep: Add extra checks for HW Reduced ACPI mode sleep states · a4e90bed
      Rafael J. Wysocki 提交于
      If the HW Reduced ACPI mode bit is set in the FADT, ACPICA uses
      the optional sleep control and sleep status registers for making
      the system enter sleep states (including S5), so it is not possible
      to use system sleep states or power it off using ACPI if the HW
      Reduced ACPI mode bit is set and those registers are not available.
      
      For this reason, add a new function, acpi_sleep_state_supported(),
      checking if the HW Reduced ACPI mode bit is set and whether or not
      system sleep states are usable in that case in addition to checking
      the return value of acpi_get_sleep_type_data() and make the ACPI
      sleep setup routines use that function to check the availability of
      system sleep states.
      
      Among other things, this prevents the kernel from attempting to
      use ACPI for powering off HW Reduced ACPI systems without the sleep
      control and sleep status registers, because ACPI power off doesn't
      have a chance to work on them.  That allows alternative power off
      mechanisms that may actually work to be used on those systems.  The
      affected machines include Dell Venue 8 Pro, Asus T100TA, Haswell
      Desktop SDP and Ivy Bridge EP Demo depot.
      
      References: https://bugzilla.kernel.org/show_bug.cgi?id=70931Reported-by: NAdam Williamson <awilliam@redhat.com>
      Tested-by: NAubrey Li <aubrey.li@linux.intel.com>
      Cc: 3.4+ <stable@vger.kernel.org> # 3.4+
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      a4e90bed
  8. 10 3月, 2014 1 次提交
  9. 03 3月, 2014 1 次提交
  10. 11 1月, 2014 1 次提交
  11. 07 12月, 2013 2 次提交
    • H
      ACPI / sleep: Drop redundant acpi_disabled check · 100eb0b0
      Hanjun Guo 提交于
      acpi_sleep_init() is only called from acpi_bus_init() and the
      code logic shows that it doesn't need to check acpi_disabled:
      
      acpi_init();
      	if (acpi_disabled) return;
      	acpi_bus_init();
      		acpi_sleep_init();
      			if (acpi_disabled)
      				return 0;
      Signed-off-by: NHanjun Guo <hanjun.guo@linaro.org>
      [rjw: Subject and changelog]
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      100eb0b0
    • L
      ACPI: Clean up inclusions of ACPI header files · 8b48463f
      Lv Zheng 提交于
      Replace direct inclusions of <acpi/acpi.h>, <acpi/acpi_bus.h> and
      <acpi/acpi_drivers.h>, which are incorrect, with <linux/acpi.h>
      inclusions and remove some inclusions of those files that aren't
      necessary.
      
      First of all, <acpi/acpi.h>, <acpi/acpi_bus.h> and <acpi/acpi_drivers.h>
      should not be included directly from any files that are built for
      CONFIG_ACPI unset, because that generally leads to build warnings about
      undefined symbols in !CONFIG_ACPI builds.  For CONFIG_ACPI set,
      <linux/acpi.h> includes those files and for CONFIG_ACPI unset it
      provides stub ACPI symbols to be used in that case.
      
      Second, there are ordering dependencies between those files that always
      have to be met.  Namely, it is required that <acpi/acpi_bus.h> be included
      prior to <acpi/acpi_drivers.h> so that the acpi_pci_root declarations the
      latter depends on are always there.  And <acpi/acpi.h> which provides
      basic ACPICA type declarations should always be included prior to any other
      ACPI headers in CONFIG_ACPI builds.  That also is taken care of including
      <linux/acpi.h> as appropriate.
      Signed-off-by: NLv Zheng <lv.zheng@intel.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Matthew Garrett <mjg59@srcf.ucam.org>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: "H. Peter Anvin" <hpa@zytor.com>
      Acked-by: Bjorn Helgaas <bhelgaas@google.com> (drivers/pci stuff)
      Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> (Xen stuff)
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      8b48463f
  12. 21 11月, 2013 1 次提交
  13. 21 8月, 2013 1 次提交
  14. 08 8月, 2013 1 次提交
  15. 15 7月, 2013 1 次提交
  16. 20 6月, 2013 1 次提交
  17. 27 3月, 2013 1 次提交
  18. 04 3月, 2013 1 次提交
  19. 06 2月, 2013 1 次提交
  20. 20 1月, 2013 1 次提交
  21. 17 1月, 2013 1 次提交
    • R
      ACPI: Drop power resources driver · 781d737c
      Rafael J. Wysocki 提交于
      The ACPI power resources driver is not very useful, because the only
      thing it really does is to restore the state of the power resources
      that were "on" before system suspend or hibernation, but that may be
      achieved in a different way.
      
      Drop the ACPI power resources driver entirely and add
      acpi_resume_power_resources() that will walk the list of all
      registered power resources during system resume and turn on the ones
      that were "on" before the preceding system suspend or hibernation.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      781d737c
  22. 30 11月, 2012 1 次提交
  23. 22 11月, 2012 1 次提交
  24. 15 11月, 2012 6 次提交
    • K
      ACPI / Sleep: add acpi_sleep=nonvs_s3 parameter · 1bad2f19
      Kristen Carlson Accardi 提交于
      The ACPI specificiation would like us to save NVS at hibernation time,
      but makes no mention of saving NVS over S3.  Not all versions of
      Windows do this either, and it is clear that not all machines need NVS
      saved/restored over S3.  Allow the user to improve their suspend/resume
      time by disabling the NVS save/restore at S3 time, but continue to do
      the NVS save/restore for S4 as specified.
      Signed-off-by: NKristen Carlson Accardi <kristen@linux.intel.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      1bad2f19
    • R
      ACPI / PM: Move device PM functions related to sleep states · a6ae7594
      Rafael J. Wysocki 提交于
      Introduce helper function returning the target sleep state of the
      system and use it to move the remaining device power management
      functions from sleep.c to device_pm.c.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      a6ae7594
    • R
      ACPI / PM: Split device wakeup management routines · dee8370c
      Rafael J. Wysocki 提交于
      Two device wakeup management routines in device_pm.c and sleep.c,
      acpi_pm_device_run_wake() and acpi_pm_device_sleep_wake(), take a
      device pointer argument and use it to obtain the ACPI handle of the
      corresponding ACPI namespace node.  That handle is then used to get
      the address of the struct acpi_device object corresponding to the
      struct device passed as the argument.
      
      Unfortunately, that last operation may be costly, because it involves
      taking the global ACPI namespace mutex, so it shouldn't be carried
      out too often.  However, the callers of those routines usually call
      them in a row with acpi_pm_device_sleep_state() which also takes that
      mutex for the same reason, so it would be more efficient if they ran
      acpi_bus_get_device() themselves to obtain a pointer to the struct
      acpi_device object in question and then passed that pointer to the
      appropriate PM routines.
      
      To make that possible, split each of the PM routines mentioned above
      in two parts, one taking a struct acpi_device pointer argument and
      the other implementing the current interface for compatibility.
      
      Additionally, change acpi_pm_device_run_wake() to actually return
      an error code if there is an error while setting up runtime remote
      wakeup for the device.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      dee8370c
    • R
      ACPI / PM: Move runtime remote wakeup setup routine to device_pm.c · cd7bd02d
      Rafael J. Wysocki 提交于
      The ACPI function for setting up devices to do runtime remote
      wakeup is now located in drivers/acpi/sleep.c, but
      drivers/acpi/device_pm.c is a more logical place for it, so move it
      there.
      
      No functional changes should result from this modification.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      cd7bd02d
    • R
      ACPI / PM: Move device power state selection routine to device_pm.c · 86b3832c
      Rafael J. Wysocki 提交于
      The ACPI function for choosing device power state is now located
      in drivers/acpi/sleep.c, but drivers/acpi/device_pm.c is a more
      logical place for it, so move it there.
      
      However, instead of moving the function entirely, move its core only
      under a different name and with a different list of arguments, so
      that it is more flexible, and leave a wrapper around it in the
      original location.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      86b3832c
    • R
      ACPI / PM: Fix device PM kernedoc comments and #ifdefs · bdda27fb
      Rafael J. Wysocki 提交于
      The kerneldoc comments for acpi_pm_device_sleep_state(),
      acpi_pm_device_run_wake(), and acpi_pm_device_sleep_wake() are
      outdated or otherwise inaccurate and/or don't follow the common
      kerneldoc patterns, so fix them.
      
      Additionally, notice that acpi_pm_device_run_wake() should be under
      CONFIG_PM_RUNTIME rather than under CONFIG_PM_SLEEP, so fix that too.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      bdda27fb
  25. 24 10月, 2012 1 次提交
    • R
      PM / ACPI: Take device PM QoS flags into account · 8b713a88
      Rafael J. Wysocki 提交于
      Make ACPI power management routines and PCI power management
      routines depending on ACPI take device PM QoS flags into account
      when deciding what power state to put the device into.
      
      In particular, after this change acpi_pm_device_sleep_state() will
      not return ACPI_STATE_D3_COLD as the deepest available low-power
      state if PM_QOS_FLAG_NO_POWER_OFF is requested for the device and it
      will not require remote wakeup to work for the device in the returned
      low-power state if there is at least one PM QoS flags request for the
      device, but PM_QOS_FLAG_REMOTE_WAKEUP is not requested for it.
      
      Accordingly, acpi_pci_set_power_state() will refuse to put the
      device into D3cold if PM_QOS_FLAG_NO_POWER_OFF is requested for it.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Reviewed-by: NJean Pihet <j-pihet@ti.com>
      Reviewed-by: NHuang Ying <ying.huang@intel.com>
      8b713a88
  26. 31 7月, 2012 1 次提交
    • L
      ACPI: delete _GTS/_BFS support · 3f6f49c7
      Len Brown 提交于
      _GTS and _BFS were added to the suspend/resume flow
      in the ACPI 2.0 specification.
      
      Linux dutifully implemented _GTS and _BFS.
      We discovered that it was rarely seen in systems
      in the field.  Further, some of those systems had
      AML so bogus that it could never work -- proof that
      no other operating system supports _GTS and _BFS.
      So we made _GTS and _BFS optional via modparam,
      and disabled them by default.
      
      But we've had to complicate some code to keep
      this support in the kernel, as these methods are defined
      to be evaluated very close to sleep entry and exit.
      Indeed, no other AML is ever evaluated with interrupts off.
      
      We have submitted a proposal for _GTS and _BFS
      to be officially removed from the ACPI specification
      on the next revision.  Here we remove it from Linux.
      Signed-off-by: NLen Brown <len.brown@intel.com>
      Acked-by: NIngo Molnar <mingo@kernel.org>
      Acked-by: NKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
      3f6f49c7
  27. 27 7月, 2012 1 次提交
  28. 29 6月, 2012 1 次提交
  29. 24 6月, 2012 1 次提交
  30. 01 6月, 2012 1 次提交
  31. 31 5月, 2012 1 次提交
  32. 30 5月, 2012 2 次提交
    • R
      ACPI / PM: Make acpi_pm_device_sleep_state() follow the specification · dbe9a2ed
      Rafael J. Wysocki 提交于
      The comparison between the system sleep state being entered
      and the lowest system sleep state the given device may wake up
      from in acpi_pm_device_sleep_state() is reversed, because the
      specification (ACPI 5.0) says that for wakeup to work:
      
      "The sleeping state being entered must be less than or equal to the
       power state declared in element 1 of the _PRW object."
      
      In other words, the state returned by _PRW is the deepest
      (lowest-power) system sleep state the device is capable of waking up
      the system from.
      
      Moreover, acpi_pm_device_sleep_state() also should check if the
      wakeup capability is supported through ACPI, because in principle it
      may be done via native PCIe PME, for example, in which case _SxW
      should not be evaluated.
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      dbe9a2ed
    • D
      ACPI / PM: Generate wakeup events on fixed power button · c10d7a13
      Daniel Drake 提交于
      When the system is woken up by the ACPI fixed power button, currently there
      is no way of userspace becoming aware that the power button was pressed.
      
      OLPC would like to know this, so that we can respond appropriately.
      For example, if the system was woken up by a network packet, we know
      we can go back to sleep very quickly. But if the user explicitly woke the
      system with the power button, we're going to want to stay awake for a
      while.
      
      The wakeup count mechanism seems like a good fit for communicating this.
      Mark the fixed power button as wakeup-enabled, and increment its wakeup
      counter when the system is woken with the power button. (The wakeup counter
      is also incremented when the power button is pressed during system
      operation; this is already handled by an existing acpi-button codepath).
      Signed-off-by: NDaniel Drake <dsd@laptop.org>
      Acked-by: NZhang Rui <rui.zhang@intel.com>
      Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
      c10d7a13
  33. 09 5月, 2012 1 次提交