Merge branch 'pci/pm'
- Add sysfs attribute for device power state (Maximilian Luz) - Rename pci_wakeup_bus() to pci_resume_bus() (Mika Westerberg) - Do not generate wakeup event when runtime resuming bus (Mika Westerberg) * pci/pm: PCI/PM: Do not generate wakeup event when runtime resuming device PCI/PM: Rename pci_wakeup_bus() to pci_resume_bus() PCI: Add sysfs attribute for device power state
This commit is contained in:
commit
ff163da95b
@ -366,3 +366,12 @@ Contact: Heiner Kallweit <hkallweit1@gmail.com>
|
||||
Description: If ASPM is supported for an endpoint, these files can be
|
||||
used to disable or enable the individual power management
|
||||
states. Write y/1/on to enable, n/0/off to disable.
|
||||
|
||||
What: /sys/bus/pci/devices/.../power_state
|
||||
Date: November 2020
|
||||
Contact: Linux PCI developers <linux-pci@vger.kernel.org>
|
||||
Description:
|
||||
This file contains the current PCI power state of the device.
|
||||
The value comes from the PCI kernel device state and can be one
|
||||
of: "unknown", "error", "D0", D1", "D2", "D3hot", "D3cold".
|
||||
The file is read only.
|
||||
|
@ -1039,7 +1039,7 @@ static int vga_switcheroo_runtime_resume(struct device *dev)
|
||||
mutex_lock(&vgasr_mutex);
|
||||
vga_switcheroo_power_switch(pdev, VGA_SWITCHEROO_ON);
|
||||
mutex_unlock(&vgasr_mutex);
|
||||
pci_wakeup_bus(pdev->bus);
|
||||
pci_resume_bus(pdev->bus);
|
||||
ret = dev->bus->pm->runtime_resume(dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
@ -124,6 +124,15 @@ static ssize_t cpulistaffinity_show(struct device *dev,
|
||||
}
|
||||
static DEVICE_ATTR_RO(cpulistaffinity);
|
||||
|
||||
static ssize_t power_state_show(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(dev);
|
||||
|
||||
return sprintf(buf, "%s\n", pci_power_name(pdev->current_state));
|
||||
}
|
||||
static DEVICE_ATTR_RO(power_state);
|
||||
|
||||
/* show resources */
|
||||
static ssize_t resource_show(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
@ -581,6 +590,7 @@ static ssize_t driver_override_show(struct device *dev,
|
||||
static DEVICE_ATTR_RW(driver_override);
|
||||
|
||||
static struct attribute *pci_dev_attrs[] = {
|
||||
&dev_attr_power_state.attr,
|
||||
&dev_attr_resource.attr,
|
||||
&dev_attr_vendor.attr,
|
||||
&dev_attr_device.attr,
|
||||
|
@ -1174,26 +1174,20 @@ int pci_platform_power_transition(struct pci_dev *dev, pci_power_t state)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pci_platform_power_transition);
|
||||
|
||||
/**
|
||||
* pci_wakeup - Wake up a PCI device
|
||||
* @pci_dev: Device to handle.
|
||||
* @ign: ignored parameter
|
||||
*/
|
||||
static int pci_wakeup(struct pci_dev *pci_dev, void *ign)
|
||||
static int pci_resume_one(struct pci_dev *pci_dev, void *ign)
|
||||
{
|
||||
pci_wakeup_event(pci_dev);
|
||||
pm_request_resume(&pci_dev->dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* pci_wakeup_bus - Walk given bus and wake up devices on it
|
||||
* pci_resume_bus - Walk given bus and runtime resume devices on it
|
||||
* @bus: Top bus of the subtree to walk.
|
||||
*/
|
||||
void pci_wakeup_bus(struct pci_bus *bus)
|
||||
void pci_resume_bus(struct pci_bus *bus)
|
||||
{
|
||||
if (bus)
|
||||
pci_walk_bus(bus, pci_wakeup, NULL);
|
||||
pci_walk_bus(bus, pci_resume_one, NULL);
|
||||
}
|
||||
|
||||
static int pci_dev_wait(struct pci_dev *dev, char *reset_type, int timeout)
|
||||
@ -1256,7 +1250,7 @@ int pci_power_up(struct pci_dev *dev)
|
||||
* may be powered on into D0uninitialized state, resume them to
|
||||
* give them a chance to suspend again
|
||||
*/
|
||||
pci_wakeup_bus(dev->subordinate);
|
||||
pci_resume_bus(dev->subordinate);
|
||||
}
|
||||
|
||||
return pci_raw_set_power_state(dev, PCI_D0);
|
||||
|
@ -1277,7 +1277,7 @@ bool pci_dev_run_wake(struct pci_dev *dev);
|
||||
void pci_d3cold_enable(struct pci_dev *dev);
|
||||
void pci_d3cold_disable(struct pci_dev *dev);
|
||||
bool pcie_relaxed_ordering_enabled(struct pci_dev *dev);
|
||||
void pci_wakeup_bus(struct pci_bus *bus);
|
||||
void pci_resume_bus(struct pci_bus *bus);
|
||||
void pci_bus_set_current_state(struct pci_bus *bus, pci_power_t state);
|
||||
|
||||
/* For use by arch with custom probe code */
|
||||
|
Loading…
Reference in New Issue
Block a user