1. 27 12月, 2019 1 次提交
  2. 14 11月, 2018 1 次提交
    • M
      PCI / ACPI: Enable wake automatically for power managed bridges · 1997aecd
      Mika Westerberg 提交于
      [ Upstream commit 6299cf9ec3985cac70bede8a855b5087b81a6640 ]
      
      We enable power management automatically for bridges where
      pci_bridge_d3_possible() returns true. However, these bridges may have
      ACPI methods such as _DSW that need to be called before D3 entry. For
      example in Lenovo Thinkpad X1 Carbon 6th _DSW method is used to prepare
      D3cold for the PCIe root port hosting Thunderbolt chain. Because wake is
      not enabled _DSW method is never called and the port does not enter
      D3cold properly consuming more power than necessary.
      
      Users can work this around by writing "enabled" to "wakeup" sysfs file
      under the device in question but that is not something an ordinary user
      is expected to do.
      
      Since we already automatically enable power management for PCIe ports
      with ->bridge_d3 set extend that to enable wake for them as well,
      assuming the port has any ACPI wakeup related objects implemented in the
      namespace (adev->wakeup.flags.valid is true). This ensures the necessary
      ACPI methods get called at appropriate times and allows the root port in
      Thinkpad X1 Carbon 6th to go into D3cold.
      Signed-off-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      Reviewed-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1997aecd
  3. 17 8月, 2018 1 次提交
    • R
      PCI / ACPI / PM: Resume all bridges on suspend-to-RAM · 9d64b539
      Rafael J. Wysocki 提交于
      Commit 26112ddc (PCI / ACPI / PM: Resume bridges w/o drivers on
      suspend-to-RAM) attempted to fix a functional regression resulting
      from commit c62ec461 (PM / core: Fix direct_complete handling
      for devices with no callbacks) by resuming PCI bridges without
      drivers (that is, "parallel PCI" ones) during system-wide suspend if
      the target system state is not ACPI S0 (working state).
      
      That turns out insufficient, however, as it is reported that, at
      least in one case, the platform firmware gets confused if a PCIe
      root port is suspended before entering the ACPI S3 sleep state.
      That issue was exposed by commit 77b3729ca03 (PCI / PM: Use
      SMART_SUSPEND and LEAVE_SUSPENDED flags for PCIe ports) that allowed
      PCIe ports to stay in runtime suspend during system-wide suspend
      (which is OK for suspend-to-idle, but turns out to be problematic
      otherwise).
      
      For this reason, drop the driver check from acpi_pci_need_resume()
      and resume all bridges (including PCIe ports with drivers) during
      system-wide suspend if the target system state is not ACPI S0.
      
      [If the target system state is ACPI S0, it means suspend-to-idle
       and the platform firmware is not going to be invoked to actually
       suspend the system, so there is no need to resume the bridges in
       that case.]
      
      Fixes: 77b3729ca03 (PCI / PM: Use SMART_SUSPEND and LEAVE_SUSPENDED flags for PCIe ports)
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=200675Reported-by: Nteika kazura <teika@gmx.com>
      Tested-by: Nteika kazura <teika@gmx.com>
      Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Acked-by: NBjorn Helgaas <bhelgaas@google.com>
      Cc: 4.16+ <stable@vger.kernel.org> # 4.16+: 26112ddc (PCI / ACPI / PM: Resume bridges ...)
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      9d64b539
  4. 01 7月, 2018 1 次提交
    • R
      PCI / ACPI / PM: Resume bridges w/o drivers on suspend-to-RAM · 26112ddc
      Rafael J. Wysocki 提交于
      It is reported that commit c62ec461 (PM / core: Fix direct_complete
      handling for devices with no callbacks) introduced a system suspend
      regression on Samsung 305V4A by allowing a PCI bridge (not a PCIe
      port) to stay in D3 over suspend-to-RAM, which is a side effect of
      setting power.direct_complete for the children of that bridge that
      have no PM callbacks.
      
      On the majority of systems PCI bridges are not allowed to be
      runtime-suspended (the power/control sysfs attribute is set to "on"
      for them by default), but user space can change that setting and if
      it does so and a given bridge has no children with PM callbacks, the
      direct_complete optimization will be applied to it and it will stay
      in suspend over system suspend.  Apparently, that confuses the
      platform firmware on the affected machine and that may very well
      happen elsewhere, so avoid the direct_complete optimization for
      PCI bridges with no drivers (if there is a driver, it should take
      care of the PM handling) on suspend-to-RAM altogether (that should
      not matter for suspend-to-idle as platform firmware is not involved
      in it).
      
      Fixes: c62ec461 (PM / core: Fix direct_complete handling for devices with no callbacks)
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=199941
      Reported-by: n0000b.n000b@gmail.com
      Tested-by: n0000b.n000b@gmail.com
      Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Acked-by: NBjorn Helgaas <bhelgaas@google.com>
      Cc: 4.15+ <stable@vger.kernel.org> # 4.15+
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      26112ddc
  5. 27 6月, 2018 1 次提交
    • B
      PCI: shpchp: Separate existence of SHPC and permission to use it · b03799b0
      Bjorn Helgaas 提交于
      The shpchp driver registers for all PCI bridge devices.  Its probe method
      should fail if either (1) the bridge doesn't have an SHPC or (2) the OS
      isn't allowed to use it (the platform firmware may be operating the SHPC
      itself).
      
      Separate these two tests into:
      
        - A new shpc_capable() that looks for the SHPC hardware and is applicable
          on all systems (ACPI and non-ACPI), and
      
        - A simplified acpi_get_hp_hw_control_from_firmware() that we call only
          when we already know an SHPC exists and there may be ACPI methods to
          either request permission to use it (_OSC) or transfer control to the
          OS (OSHP).
      
      acpi_get_hp_hw_control_from_firmware() is implemented when CONFIG_ACPI=y,
      but does nothing if the current platform doesn't support ACPI.
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      b03799b0
  6. 05 6月, 2018 1 次提交
  7. 02 6月, 2018 1 次提交
  8. 20 3月, 2018 1 次提交
  9. 27 1月, 2018 1 次提交
  10. 19 1月, 2018 1 次提交
  11. 06 10月, 2017 1 次提交
    • V
      ACPI / PCI: Bail early in acpi_pci_add_bus() if there is no ACPI handle · a0040c01
      Vitaly Kuznetsov 提交于
      Hyper-V instances support PCI pass-through which is implemented through PV
      pci-hyperv driver. When a device is passed through, a new root PCI bus is
      created in the guest. The bus sits on top of VMBus and has no associated
      information in ACPI. acpi_pci_add_bus() in this case proceeds all the way
      to acpi_evaluate_dsm(), which reports
      
        ACPI: \: failed to evaluate _DSM (0x1001)
      
      While acpi_pci_slot_enumerate() and acpiphp_enumerate_slots() are protected
      against ACPI_HANDLE() being NULL and do nothing, acpi_evaluate_dsm() is not
      and gives us the error. It seems the correct fix is to not do anything in
      acpi_pci_add_bus() in such cases.
      Signed-off-by: NVitaly Kuznetsov <vkuznets@redhat.com>
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      a0040c01
  12. 01 8月, 2017 1 次提交
    • R
      ACPI / PCI / PM: Rework acpi_pci_propagate_wakeup() · 1ba51a7c
      Rafael J. Wysocki 提交于
      The acpi_pci_propagate_wakeup() routine is there to handle cases in
      which PCI bridges (or PCIe ports) are expected to signal wakeup
      for devices below them, but currently it doesn't do that correctly.
      
      The problem is that acpi_pci_propagate_wakeup() uses
      acpi_pm_set_device_wakeup() for bridges and if that routine is
      called for multiple times to disable wakeup for the same device,
      it will disable it on the first invocation and the next calls
      will have no effect (it works analogously when called to enable
      wakeup, but that is not a problem).
      
      Now, say acpi_pci_propagate_wakeup() has been called for two
      different devices under the same bridge and it has called
      acpi_pm_set_device_wakeup() for that bridge each time.  The
      bridge is now enabled to generate wakeup signals.  Next,
      suppose that one of the devices below it resumes and
      acpi_pci_propagate_wakeup() is called to disable wakeup for that
      device.  It will then call acpi_pm_set_device_wakeup() for the bridge
      and that will effectively disable remote wakeup for all devices under
      it even though some of them may still be suspended and remote wakeup
      may be expected to work for them.
      
      To address this (arguably theoretical) issue, allow
      wakeup.enable_count under struct acpi_device to grow beyond 1 in
      certain situations.  In particular, allow that to happen in
      acpi_pci_propagate_wakeup() when wakeup is enabled or disabled
      for PCI bridges, so that wakeup is actually disabled for the
      bridge when all devices under it resume and not when just one
      of them does that.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Reviewed-by: NAndy Shevchenko <andy.shevchenko@gmail.com>
      Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Acked-by: NBjorn Helgaas <bhelgaas@google.com>
      1ba51a7c
  13. 28 6月, 2017 5 次提交
    • R
      PM / core: Drop run_wake flag from struct dev_pm_info · de3ef1eb
      Rafael J. Wysocki 提交于
      The run_wake flag in struct dev_pm_info is used to indicate whether
      or not the device is capable of generating remote wakeup signals at
      run time (or in the system working state), but the distinction
      between runtime remote wakeup and system wakeup signaling has always
      been rather artificial.  The only practical reason for it to exist
      at the core level was that ACPI and PCI treated those two cases
      differently, but that's not the case any more after recent changes.
      
      For this reason, get rid of the run_wake flag and, when applicable,
      use device_set_wakeup_capable() and device_can_wakeup() instead of
      device_set_run_wake() and device_run_wake(), respectively.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Acked-by: NBjorn Helgaas <bhelgaas@google.com>
      de3ef1eb
    • R
      PCI / PM: Simplify device wakeup settings code · 0847684c
      Rafael J. Wysocki 提交于
      After previous changes it is not necessary to distinguish between
      device wakeup for run time and device wakeup from system sleep states
      any more, so rework the PCI device wakeup settings code accordingly.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Acked-by: NBjorn Helgaas <bhelgaas@google.com>
      0847684c
    • R
      PCI / PM: Drop pme_interrupt flag from struct pci_dev · 8370c2dc
      Rafael J. Wysocki 提交于
      The pme_interrupt flag in struct pci_dev is set when PMEs generated
      by the device are going to be signaled via root port PME interrupts.
      
      Ironically enough, that information is only used by the code setting
      up device wakeup through ACPI which returns as soon as it sees the
      pme_interrupt flag set while setting up "remote runtime wakeup".
      That is questionable, however, because in theory there may be PCIe
      devices using out-of-band PME signaling under root ports handled
      by the native PME code or devices requiring wakeup power setup to be
      carried out by AML.  For such devices, ACPI wakeup should be invoked
      regardless of whether or not native PME signaling is used in general.
      
      For this reason, drop the pme_interrupt flag and rework the code
      using it which then allows the ACPI-based device wakeup handling
      in PCI to be consolidated to use one code path for both "runtime
      remote wakeup" and system wakeup (from sleep states).
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Acked-by: NBjorn Helgaas <bhelgaas@google.com>
      8370c2dc
    • R
      ACPI / PM: Consolidate device wakeup settings code · 4d183d04
      Rafael J. Wysocki 提交于
      Currently, there are two separate ways of handling device wakeup
      settings in the ACPI core, depending on whether this is runtime
      wakeup or system wakeup (from sleep states).  However, after the
      previous commit eliminating the run_wake ACPI device wakeup flag,
      there is no difference between the two any more at the ACPI level,
      so they can be combined.
      
      For this reason, introduce acpi_pm_set_device_wakeup() to replace both
      acpi_pm_device_run_wake() and acpi_pm_device_sleep_wake() and make it
      check the ACPI device object's wakeup.valid flag to determine whether
      or not the device can be set up to generate wakeup signals.
      
      Also notice that zpodd_enable/disable_run_wake() only call
      device_set_run_wake() because acpi_pm_device_run_wake() called
      device_run_wake(), which is not done by acpi_pm_set_device_wakeup(),
      so drop the now redundant device_set_run_wake() calls from there.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Acked-by: NBjorn Helgaas <bhelgaas@google.com>
      4d183d04
    • R
      ACPI / PM: Drop run_wake from struct acpi_device_wakeup_flags · a1a66393
      Rafael J. Wysocki 提交于
      The run_wake flag in struct acpi_device_wakeup_flags stores the
      information on whether or not the device can generate wakeup
      signals at run time, but in ACPI that really is equivalent to
      being able to generate wakeup signals at all.
      
      In fact, run_wake will always be set after successful executeion of
      acpi_setup_gpe_for_wake(), but if that fails, the device will not be
      able to use a wakeup GPE at all, so it won't be able to wake up the
      systems from sleep states too.  Hence, run_wake actually means that
      the device is capable of triggering wakeup and so it is equivalent
      to the valid flag.
      
      For this reason, drop run_wake from struct acpi_device_wakeup_flags
      and make sure that the valid flag is only set if
      acpi_setup_gpe_for_wake() has been successful.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Acked-by: NBjorn Helgaas <bhelgaas@google.com>
      a1a66393
  14. 15 6月, 2017 1 次提交
    • R
      ACPI / PM: Run wakeup notify handlers synchronously · 64fd1c70
      Rafael J. Wysocki 提交于
      The work functions provided by the users of acpi_add_pm_notifier()
      should be run synchronously before re-enabling the wakeup GPE in
      case they are used to clear the status and/or disable the wakeup
      signaling at the source.  Otherwise, which is the case currently in
      the PCI bus type code, the same wakeup event may be signaled for
      multiple times while the execution of the work function in response
      to it has already been queued up.
      
      Fortunately, acpi_add_pm_notifier() is only used by PCI and by
      ACPI device PM code internally, so the change is relatively
      straightforward to make.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Acked-by: NBjorn Helgaas <bhelgaas@google.com>
      64fd1c70
  15. 07 6月, 2017 1 次提交
  16. 07 12月, 2016 1 次提交
  17. 18 11月, 2016 1 次提交
    • L
      ACPI / hotplug / PCI: Make device_is_managed_by_native_pciehp() public · 437eb7bf
      Lukas Wunner 提交于
      We're about to add runtime PM of hotplug ports, but we need to restrict it
      to ports that are handled natively by the OS:  If they're handled by the
      firmware (which is the case for Thunderbolt on non-Macs), things would
      break if the OS put the ports into D3hot behind the firmware's back.
      
      To determine if a hotplug port is handled natively, one has to walk up from
      the port to the root bridge and check the cached _OSC Control Field for the
      value of the "PCI Express Native Hot Plug control" bit.  There's already a
      function to do that, device_is_managed_by_native_pciehp(), but it's private
      to drivers/pci/hotplug/acpiphp_glue.c and only compiled in if
      CONFIG_HOTPLUG_PCI_ACPI is enabled.
      
      Make it public and move it to drivers/pci/pci-acpi.c, so that it is
      available in the more general CONFIG_ACPI case.
      
      The function contains a check if the device in question is a hotplug port
      and returns false if it's not.  The caller we're going to add doesn't need
      this as it only calls the function if it actually *is* a hotplug port.
      Move the check out of the function into the single existing caller.
      
      Rename it to pciehp_is_native() and add some kerneldoc and polish.
      
      No functional change intended.
      Tested-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Signed-off-by: NLukas Wunner <lukas@wunner.de>
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      Reviewed-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      437eb7bf
  18. 29 9月, 2016 1 次提交
    • L
      PCI: Query platform firmware for device power state · cc7cc02b
      Lukas Wunner 提交于
      Usually the most accurate way to determine a PCI device's power state is to
      read its PM Control & Status Register.  There are two cases however when
      this is not an option:  If the device doesn't have the PM capability at
      all, or if it is in D3cold (in which case its config space is
      inaccessible).
      
      In both cases, we can alternatively query the platform firmware for its
      opinion on the device's power state.  To facilitate this, augment struct
      pci_platform_pm_ops with a ->get_power callback and implement it for
      acpi_pci_platform_pm (the only pci_platform_pm_ops existing so far).
      
      It is used by a forthcoming commit to let pci_update_current_state()
      recognize D3cold.
      Signed-off-by: NLukas Wunner <lukas@wunner.de>
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      Acked-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      cc7cc02b
  19. 21 12月, 2015 1 次提交
  20. 09 12月, 2015 1 次提交
  21. 16 7月, 2015 1 次提交
  22. 16 5月, 2015 1 次提交
    • R
      ACPI / PM: Rework device power management to follow ACPI 6 · 20dacb71
      Rafael J. Wysocki 提交于
      The ACPI 6 specification has made some changes in the device power
      management area.  In particular:
      
       * The D3hot power state is now supposed to be always available
         (instead of D3cold) and D3cold is only regarded as valid if the
         _PR3 object is present for the given device.
      
       * The required ordering of transitions into power states deeper than
         D0 is now such that for a transition into state Dx the _PSx method
         is supposed to be executed first, if present, and the states of
         the power resources the device depends on are supposed to be
         changed after that.
      
       * It is now explicitly forbidden to transition devices from
         lower-power (deeper) into higher-power (shallower) power states
         other than D0.
      
      Those changes have been made so the specification reflects the
      Windows' device power management code that the vast majority of
      systems using ACPI is validated against.
      
      To avoid artificial differences in ACPI device power management
      between Windows and Linux, modify the ACPI device power management
      code to follow the new specification.  Add comments explaining the
      code flow in some unclear places.
      
      This only may affect some real corner cases in which the OS behavior
      expected by the firmware is different from the Windows one, but that's
      quite unlikely.  The transition ordering change affects transitions
      to D1 and D2 which are rarely used (if at all) and into D3hot and
      D3cold for devices actually having _PR3, but those are likely to
      be validated against Windows anyway.  The other changes may affect
      code calling acpi_device_get_power() or acpi_device_update_power()
      where ACPI_STATE_D3_HOT may be returned instead of ACPI_STATE_D3_COLD
      (that's why the ACPI fan driver needs to be updated too) and since
      transitions into ACPI_STATE_D3_HOT may remove power now, it is better
      to avoid this one in acpi_pm_device_sleep_state() if the "no power
      off" PM QoS flag is set.
      
      The only existing user of acpi_device_can_poweroff() really cares
      about the case when _PR3 is present, so the change in that function
      should not cause any problems to happen too.
      
      A plus is that PCI_D3hot can be mapped to ACPI_STATE_D3_HOT
      now and the compatibility with older systems should be covered
      automatically.
      
      In any case, if any real problems result from this, it still will
      be better to follow the Windows' behavior (which now is reflected
      by the specification too) in general and handle the cases when it
      doesn't work via quirks.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      20dacb71
  23. 09 4月, 2015 2 次提交
  24. 08 4月, 2015 1 次提交
    • B
      PCI: Don't look for ACPI hotplug parameters if ACPI is disabled · 8647ca9a
      Bjorn Helgaas 提交于
      Booting a v3.18 or newer Xen domU kernel with PCI devices passed through
      results in an oops (this is a 32-bit 3.13.11 dom0 with a 64-bit 4.4.0
      hypervisor and 32-bit domU):
      
        BUG: unable to handle kernel paging request at 0030303e
        IP: [<c06ed0e6>] acpi_ns_validate_handle+0x12/0x1a
        Call Trace:
         [<c06eda4d>] ? acpi_evaluate_object+0x31/0x1fc
         [<c06b78e1>] ? pci_get_hp_params+0x111/0x4e0
         [<c0407bc7>] ? xen_force_evtchn_callback+0x17/0x30
         [<c04085fb>] ? xen_restore_fl_direct_reloc+0x4/0x4
         [<c0699d34>] ? pci_device_add+0x24/0x450
      
      Don't look for ACPI configuration information if ACPI has been disabled.
      
      I don't think this is the best fix, because we can boot plain Linux (no
      Xen) with "acpi=off", and we don't need this check in pci_get_hp_params().
      There should be a better fix that would make Xen domU work the same way.
      The domU kernel has ACPI support but it has no AML.  There should be a way
      to initialize the ACPI data structures so things fail gracefully rather
      than oopsing.  This is an interim fix to address the regression.
      
      Fixes: 6cd33649 ("PCI: Add pci_configure_device() during enumeration")
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=96301Reported-by: NMichael D Labriola <mlabriol@gdeb.com>
      Tested-by: NMichael D Labriola <mlabriol@gdeb.com>
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      CC: stable@vger.kernel.org	# v3.18+
      8647ca9a
  25. 24 1月, 2015 1 次提交
    • R
      PCI / PM: Avoid resuming PCI devices during system suspend · bac2a909
      Rafael J. Wysocki 提交于
      Commit f25c0ae2 (ACPI / PM: Avoid resuming devices in ACPI PM
      domain during system suspend) modified the ACPI PM domain's system
      suspend callbacks to allow devices attached to it to be left in the
      runtime-suspended state during system suspend so as to optimize
      the suspend process.
      
      This was based on the general mechanism introduced by commit
      aae4518b (PM / sleep: Mechanism to avoid resuming runtime-suspended
      devices unnecessarily).
      
      Extend that approach to PCI devices by modifying the PCI bus type's
      ->prepare callback to return 1 for devices that are runtime-suspended
      when it is being executed and that are in a suitable power state and
      need not be resumed going forward.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Acked-by: NBjorn Helgaas <bhelgaas@google.com>
      bac2a909
  26. 11 11月, 2014 1 次提交
  27. 13 9月, 2014 3 次提交
  28. 24 7月, 2014 1 次提交
    • R
      ACPI / PCI: Use ACPI_COMPANION() instead of ACPI_HANDLE() · 85dbb3d0
      Rafael J. Wysocki 提交于
      The ACPI_HANDLE() macro evaluates ACPI_COMPANION() internally to
      return the handle of the device's ACPI companion, so it is much
      more straightforward and efficient to use ACPI_COMPANION()
      directly to obtain the device's ACPI companion object instead of
      using ACPI_HANDLE() and acpi_bus_get_device() on the returned
      handle for the same thing.
      
      Use ACPI_COMPANION() instead of ACPI_HANDLE() in the PCI ACPI support
      code.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      85dbb3d0
  29. 23 7月, 2014 1 次提交
    • R
      ACPI / PM: Revork the handling of ACPI device wakeup notifications · c072530f
      Rafael J. Wysocki 提交于
      Since ACPI wakeup GPEs are going to be enabled during system suspend
      as well as for runtime wakeup by a subsequent patch and the same
      notify handlers will be used in both cases, rework the ACPI device
      wakeup notification framework so that the part specific to physical
      devices is always run asynchronously from the PM workqueue.  This
      prevents runtime resume callbacks for those devices from being
      run during system suspend and resume which may not be appropriate,
      among other things.
      
      Also make ACPI device wakeup notification handling a bit more robust
      agaist subsequent removal of ACPI device objects, whould that ever
      happen, and create a wakeup source object for each ACPI device
      configured for wakeup so that wakeup notifications for those
      devices can wake up the system from the "freeze" sleep state.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      c072530f
  30. 28 5月, 2014 1 次提交
  31. 30 12月, 2013 1 次提交
    • R
      PCI / ACPI: Install wakeup notify handlers for all PCI devs with ACPI · f084280c
      Rafael J. Wysocki 提交于
      It turns out that some BIOSes don't report wakeup GPEs through
      _PRW, but use them for signaling wakeup anyway, which causes GPE
      storms to occur on some systems after resume from system suspend.
      This issue has been uncovered by commit d2e5f0c1 (ACPI / PCI:
      Rework the setup and cleanup of device wakeup) during the 3.9
      development cycle.
      
      Work around the problem by installing wakeup notify handlers for all
      PCI devices with ACPI support (i.e. having ACPI companions) regardless
      of whether or not the BIOS reports ACPI wakeup support for them.  The
      presence of the wakeup notify handlers alone is not harmful in any
      way if there are no events for them to handle (they are simply never
      executed then), but on some systems they are needed to take care of
      spurious events.
      
      Fixes: d2e5f0c1 (ACPI / PCI: Rework the setup and cleanup of device wakeup)
      References: https://bugzilla.kernel.org/show_bug.cgi?id=63021Reported-and-tested-by: NAgustin Barto <abarto@gmail.com>
      Cc: Bjorn Helgaas <bhelgaas@google.com>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      f084280c
  32. 10 12月, 2013 1 次提交
  33. 07 12月, 2013 1 次提交
    • R
      ACPI / bind: Rework struct acpi_bus_type · e3f02c52
      Rafael J. Wysocki 提交于
      Replace the .find_device function pointer in struct acpi_bus_type
      with a new one, .find_companion, that is supposed to point to a
      function returning struct acpi_device pointer (instead of an int)
      and takes one argument (instead of two).  This way the role of
      this callback is more clear and the implementation of it can
      be more straightforward.
      
      Update all of the users of struct acpi_bus_type (PCI, PNP/ACPI and
      USB) to reflect the structure change.
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Tested-by: Lan Tianyu <tianyu.lan@intel.com> # for USB/ACPI
      e3f02c52