• Home
  • Raw
  • Download

Lines Matching +full:pm +full:- +full:bus

1 // SPDX-License-Identifier: GPL-2.0
3 * (C) Copyright 2002-2004, 2007 Greg Kroah-Hartman <greg@kroah.com>
22 #include <linux/dma-map-ops.h>
32 * pci_add_dynid - add a new PCI device ID to this driver and re-probe devices
50 * 0 on success, -errno on failure.
62 return -ENOMEM; in pci_add_dynid()
64 dynid->id.vendor = vendor; in pci_add_dynid()
65 dynid->id.device = device; in pci_add_dynid()
66 dynid->id.subvendor = subvendor; in pci_add_dynid()
67 dynid->id.subdevice = subdevice; in pci_add_dynid()
68 dynid->id.class = class; in pci_add_dynid()
69 dynid->id.class_mask = class_mask; in pci_add_dynid()
70 dynid->id.driver_data = driver_data; in pci_add_dynid()
72 spin_lock(&drv->dynids.lock); in pci_add_dynid()
73 list_add_tail(&dynid->node, &drv->dynids.list); in pci_add_dynid()
74 spin_unlock(&drv->dynids.lock); in pci_add_dynid()
76 return driver_attach(&drv->driver); in pci_add_dynid()
84 spin_lock(&drv->dynids.lock); in pci_free_dynids()
85 list_for_each_entry_safe(dynid, n, &drv->dynids.list, node) { in pci_free_dynids()
86 list_del(&dynid->node); in pci_free_dynids()
89 spin_unlock(&drv->dynids.lock); in pci_free_dynids()
93 * store_new_id - sysfs frontend to pci_add_dynid()
104 const struct pci_device_id *ids = pdrv->id_table; in new_id_store()
115 return -EINVAL; in new_id_store()
120 return -ENOMEM; in new_id_store()
122 pdev->vendor = vendor; in new_id_store()
123 pdev->device = device; in new_id_store()
124 pdev->subsystem_vendor = subvendor; in new_id_store()
125 pdev->subsystem_device = subdevice; in new_id_store()
126 pdev->class = class; in new_id_store()
128 if (pci_match_id(pdrv->id_table, pdev)) in new_id_store()
129 retval = -EEXIST; in new_id_store()
140 retval = -EINVAL; in new_id_store()
141 while (ids->vendor || ids->subvendor || ids->class_mask) { in new_id_store()
142 if (driver_data == ids->driver_data) { in new_id_store()
161 * store_remove_id - remove a PCI device ID from this driver
176 size_t retval = -ENODEV; in remove_id_store()
182 return -EINVAL; in remove_id_store()
184 spin_lock(&pdrv->dynids.lock); in remove_id_store()
185 list_for_each_entry_safe(dynid, n, &pdrv->dynids.list, node) { in remove_id_store()
186 struct pci_device_id *id = &dynid->id; in remove_id_store()
187 if ((id->vendor == vendor) && in remove_id_store()
188 (id->device == device) && in remove_id_store()
189 (subvendor == PCI_ANY_ID || id->subvendor == subvendor) && in remove_id_store()
190 (subdevice == PCI_ANY_ID || id->subdevice == subdevice) && in remove_id_store()
191 !((id->class ^ class) & class_mask)) { in remove_id_store()
192 list_del(&dynid->node); in remove_id_store()
198 spin_unlock(&pdrv->dynids.lock); in remove_id_store()
212 * pci_match_id - See if a pci device matches a given pci_id table
227 while (ids->vendor || ids->subvendor || ids->class_mask) { in pci_match_id()
245 * pci_match_device - Tell if a PCI device structure has a matching PCI device id structure
260 if (dev->driver_override && strcmp(dev->driver_override, drv->name)) in pci_match_device()
264 spin_lock(&drv->dynids.lock); in pci_match_device()
265 list_for_each_entry(dynid, &drv->dynids.list, node) { in pci_match_device()
266 if (pci_match_one_device(&dynid->id, dev)) { in pci_match_device()
267 found_id = &dynid->id; in pci_match_device()
271 spin_unlock(&drv->dynids.lock); in pci_match_device()
274 found_id = pci_match_id(drv->id_table, dev); in pci_match_device()
277 if (!found_id && dev->driver_override) in pci_match_device()
292 struct pci_dev *pci_dev = ddi->dev; in local_pci_probe()
293 struct pci_driver *pci_drv = ddi->drv; in local_pci_probe()
294 struct device *dev = &pci_dev->dev; in local_pci_probe()
299 * runtime PM status. During probe, the device is set to in local_pci_probe()
301 * supports runtime PM, it should call pm_runtime_put_noidle(), in local_pci_probe()
302 * or any other runtime PM helper function decrementing the usage in local_pci_probe()
307 pci_dev->driver = pci_drv; in local_pci_probe()
308 rc = pci_drv->probe(pci_dev, ddi->id); in local_pci_probe()
312 pci_dev->driver = NULL; in local_pci_probe()
328 return dev->is_virtfn && dev->physfn->is_probed; in pci_physfn_is_probed()
346 node = dev_to_node(&dev->dev); in pci_call_probe()
347 dev->is_probed = 1; in pci_call_probe()
367 dev->is_probed = 0; in pci_call_probe()
373 * __pci_device_probe - check if a driver wants to claim a specific PCI device
378 * side-effect: pci_dev->driver is set to drv when drv claims pci_dev.
385 if (!pci_dev->driver && drv->probe) { in __pci_device_probe()
386 error = -ENODEV; in __pci_device_probe()
407 return (!pdev->is_virtfn || pdev->physfn->sriov->drivers_autoprobe || in pci_device_can_probe()
408 pdev->driver_override); in pci_device_can_probe()
421 struct pci_driver *drv = to_pci_driver(dev->driver); in pci_device_probe()
424 return -ENODEV; in pci_device_probe()
445 struct pci_driver *drv = pci_dev->driver; in pci_device_remove()
448 if (drv->remove) { in pci_device_remove()
450 drv->remove(pci_dev); in pci_device_remove()
454 pci_dev->driver = NULL; in pci_device_remove()
458 /* Undo the runtime PM settings in local_pci_probe() */ in pci_device_remove()
465 if (pci_dev->current_state == PCI_D0) in pci_device_remove()
466 pci_dev->current_state = PCI_UNKNOWN; in pci_device_remove()
469 * We would love to complain here if pci_dev->is_enabled is set, that in pci_device_remove()
484 struct pci_driver *drv = pci_dev->driver; in pci_device_shutdown()
488 if (drv && drv->shutdown) in pci_device_shutdown()
489 drv->shutdown(pci_dev); in pci_device_shutdown()
492 * If this is a kexec reboot, turn off Bus Master bit on the in pci_device_shutdown()
498 if (kexec_in_progress && (pci_dev->current_state <= PCI_D3hot)) in pci_device_shutdown()
504 /* Auxiliary functions used for system resume and run-time resume. */
507 * pci_restore_standard_config - restore standard config registers of PCI device
514 if (pci_dev->current_state != PCI_D0) { in pci_restore_standard_config()
553 if (pci_dev->current_state == PCI_D0) in pci_pm_set_unknown_state()
554 pci_dev->current_state = PCI_UNKNOWN; in pci_pm_set_unknown_state()
571 if (pci_dev->is_busmaster) in pci_pm_reenable_device()
580 struct pci_driver *drv = pci_dev->driver; in pci_legacy_suspend()
582 if (drv && drv->suspend) { in pci_legacy_suspend()
583 pci_power_t prev = pci_dev->current_state; in pci_legacy_suspend()
586 error = drv->suspend(pci_dev, state); in pci_legacy_suspend()
587 suspend_report_result(drv->suspend, error); in pci_legacy_suspend()
591 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0 in pci_legacy_suspend()
592 && pci_dev->current_state != PCI_UNKNOWN) { in pci_legacy_suspend()
593 pci_WARN_ONCE(pci_dev, pci_dev->current_state != prev, in pci_legacy_suspend()
594 "PCI PM: Device state not saved by %pS\n", in pci_legacy_suspend()
595 drv->suspend); in pci_legacy_suspend()
608 if (!pci_dev->state_saved) in pci_legacy_suspend_late()
621 struct pci_driver *drv = pci_dev->driver; in pci_legacy_resume()
625 return drv && drv->resume ? in pci_legacy_resume()
626 drv->resume(pci_dev) : pci_pm_reenable_device(pci_dev); in pci_legacy_resume()
633 /* Disable non-bridge devices without PM support */ in pci_pm_default_suspend()
640 struct pci_driver *drv = pci_dev->driver; in pci_has_legacy_pm_support()
641 bool ret = drv && (drv->suspend || drv->resume); in pci_has_legacy_pm_support()
644 * Legacy PM support is used by default, so warn if the new framework is in pci_has_legacy_pm_support()
648 pci_WARN(pci_dev, ret && drv->driver.pm, "device %04x:%04x\n", in pci_has_legacy_pm_support()
649 pci_dev->vendor, pci_dev->device); in pci_has_legacy_pm_support()
659 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; in pci_pm_prepare() local
661 if (pm && pm->prepare) { in pci_pm_prepare()
662 int error = pm->prepare(dev); in pci_pm_prepare()
673 * The PME setting needs to be adjusted here in case the direct-complete in pci_pm_prepare()
687 /* Resume device if platform firmware has put it in reset-power-on */ in pci_pm_complete()
689 pci_power_t pre_sleep_state = pci_dev->current_state; in pci_pm_complete()
699 if (pci_dev->current_state < pre_sleep_state) in pci_pm_complete()
716 * wakeup, which breaks ACPI-based runtime wakeup on PCI Express. in pcie_pme_root_status_cleanup()
728 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; in pci_pm_suspend() local
730 pci_dev->skip_bus_pm = false; in pci_pm_suspend()
735 if (!pm) { in pci_pm_suspend()
750 * suspend callbacks can cope with runtime-suspended devices, it is in pci_pm_suspend()
756 pci_dev->state_saved = false; in pci_pm_suspend()
761 if (pm->suspend) { in pci_pm_suspend()
762 pci_power_t prev = pci_dev->current_state; in pci_pm_suspend()
765 error = pm->suspend(dev); in pci_pm_suspend()
766 suspend_report_result(pm->suspend, error); in pci_pm_suspend()
770 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0 in pci_pm_suspend()
771 && pci_dev->current_state != PCI_UNKNOWN) { in pci_pm_suspend()
772 pci_WARN_ONCE(pci_dev, pci_dev->current_state != prev, in pci_pm_suspend()
773 "PCI PM: State of device not saved by %pS\n", in pci_pm_suspend()
774 pm->suspend); in pci_pm_suspend()
794 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; in pci_pm_suspend_noirq() local
802 if (!pm) { in pci_pm_suspend_noirq()
807 if (pm->suspend_noirq) { in pci_pm_suspend_noirq()
808 pci_power_t prev = pci_dev->current_state; in pci_pm_suspend_noirq()
811 error = pm->suspend_noirq(dev); in pci_pm_suspend_noirq()
812 suspend_report_result(pm->suspend_noirq, error); in pci_pm_suspend_noirq()
816 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0 in pci_pm_suspend_noirq()
817 && pci_dev->current_state != PCI_UNKNOWN) { in pci_pm_suspend_noirq()
818 pci_WARN_ONCE(pci_dev, pci_dev->current_state != prev, in pci_pm_suspend_noirq()
819 "PCI PM: State of device not saved by %pS\n", in pci_pm_suspend_noirq()
820 pm->suspend_noirq); in pci_pm_suspend_noirq()
825 if (pci_dev->skip_bus_pm) { in pci_pm_suspend_noirq()
830 * suspend-to-idle in a spurious wakeup case. The device should in pci_pm_suspend_noirq()
834 if (!pci_dev->state_saved) in pci_pm_suspend_noirq()
836 } else if (!pci_dev->state_saved) { in pci_pm_suspend_noirq()
842 pci_dbg(pci_dev, "PCI PM: Suspend power state: %s\n", in pci_pm_suspend_noirq()
843 pci_power_name(pci_dev->current_state)); in pci_pm_suspend_noirq()
845 if (pci_dev->current_state == PCI_D0) { in pci_pm_suspend_noirq()
846 pci_dev->skip_bus_pm = true; in pci_pm_suspend_noirq()
848 * Per PCI PM r1.2, table 6-1, a bridge must be in D0 if any in pci_pm_suspend_noirq()
852 if (pci_dev->bus->self) in pci_pm_suspend_noirq()
853 pci_dev->bus->self->skip_bus_pm = true; in pci_pm_suspend_noirq()
856 if (pci_dev->skip_bus_pm && pm_suspend_no_platform()) { in pci_pm_suspend_noirq()
857 pci_dbg(pci_dev, "PCI PM: Skipped\n"); in pci_pm_suspend_noirq()
872 if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI) in pci_pm_suspend_noirq()
879 * If the target system sleep state is suspend-to-idle, it is sufficient in pci_pm_suspend_noirq()
881 * runtime PM. Otherwise, the pm_resume_via_firmware() check will cause in pci_pm_suspend_noirq()
886 dev->power.may_skip_resume = false; in pci_pm_suspend_noirq()
894 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; in pci_pm_resume_noirq() local
895 pci_power_t prev_state = pci_dev->current_state; in pci_pm_resume_noirq()
896 bool skip_bus_pm = pci_dev->skip_bus_pm; in pci_pm_resume_noirq()
902 * In the suspend-to-idle case, devices left in D0 during suspend will in pci_pm_resume_noirq()
919 if (pm && pm->resume_noirq) in pci_pm_resume_noirq()
920 return pm->resume_noirq(dev); in pci_pm_resume_noirq()
936 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; in pci_pm_resume() local
942 if (pci_dev->state_saved) in pci_pm_resume()
950 if (pm) { in pci_pm_resume()
951 if (pm->resume) in pci_pm_resume()
952 return pm->resume(dev); in pci_pm_resume()
976 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; in pci_pm_freeze() local
981 if (!pm) { in pci_pm_freeze()
987 * Resume all runtime-suspended devices before creating a snapshot in pci_pm_freeze()
990 * put into the runtime-active metastate during system resume anyway, in pci_pm_freeze()
995 pci_dev->state_saved = false; in pci_pm_freeze()
997 if (pm->freeze) { in pci_pm_freeze()
1000 error = pm->freeze(dev); in pci_pm_freeze()
1001 suspend_report_result(pm->freeze, error); in pci_pm_freeze()
1012 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; in pci_pm_freeze_noirq() local
1017 if (pm && pm->freeze_noirq) { in pci_pm_freeze_noirq()
1020 error = pm->freeze_noirq(dev); in pci_pm_freeze_noirq()
1021 suspend_report_result(pm->freeze_noirq, error); in pci_pm_freeze_noirq()
1026 if (!pci_dev->state_saved) in pci_pm_freeze_noirq()
1037 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; in pci_pm_thaw_noirq() local
1040 * The pm->thaw_noirq() callback assumes the device has been in pci_pm_thaw_noirq()
1043 * In addition, pci_restore_state() restores MSI-X state in MMIO in pci_pm_thaw_noirq()
1045 * in case the driver's "freeze" callbacks put it into a low-power in pci_pm_thaw_noirq()
1054 if (pm && pm->thaw_noirq) in pci_pm_thaw_noirq()
1055 return pm->thaw_noirq(dev); in pci_pm_thaw_noirq()
1063 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; in pci_pm_thaw() local
1069 if (pm) { in pci_pm_thaw()
1070 if (pm->thaw) in pci_pm_thaw()
1071 error = pm->thaw(dev); in pci_pm_thaw()
1076 pci_dev->state_saved = false; in pci_pm_thaw()
1084 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; in pci_pm_poweroff() local
1089 if (!pm) { in pci_pm_poweroff()
1098 pci_dev->state_saved = false; in pci_pm_poweroff()
1103 if (pm->poweroff) { in pci_pm_poweroff()
1106 error = pm->poweroff(dev); in pci_pm_poweroff()
1107 suspend_report_result(pm->poweroff, error); in pci_pm_poweroff()
1128 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; in pci_pm_poweroff_noirq() local
1136 if (!pm) { in pci_pm_poweroff_noirq()
1141 if (pm->poweroff_noirq) { in pci_pm_poweroff_noirq()
1144 error = pm->poweroff_noirq(dev); in pci_pm_poweroff_noirq()
1145 suspend_report_result(pm->poweroff_noirq, error); in pci_pm_poweroff_noirq()
1150 if (!pci_dev->state_saved && !pci_has_subordinate(pci_dev)) in pci_pm_poweroff_noirq()
1157 if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI) in pci_pm_poweroff_noirq()
1168 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; in pci_pm_restore_noirq() local
1176 if (pm && pm->restore_noirq) in pci_pm_restore_noirq()
1177 return pm->restore_noirq(dev); in pci_pm_restore_noirq()
1185 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; in pci_pm_restore() local
1191 if (pci_dev->state_saved) in pci_pm_restore()
1199 if (pm) { in pci_pm_restore()
1200 if (pm->restore) in pci_pm_restore()
1201 return pm->restore(dev); in pci_pm_restore()
1228 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; in pci_pm_runtime_suspend() local
1229 pci_power_t prev = pci_dev->current_state; in pci_pm_runtime_suspend()
1233 * If pci_dev->driver is not set (unbound), we leave the device in D0, in pci_pm_runtime_suspend()
1237 if (!pci_dev->driver) { in pci_pm_runtime_suspend()
1242 pci_dev->state_saved = false; in pci_pm_runtime_suspend()
1243 if (pm && pm->runtime_suspend) { in pci_pm_runtime_suspend()
1244 error = pm->runtime_suspend(dev); in pci_pm_runtime_suspend()
1246 * -EBUSY and -EAGAIN is used to request the runtime PM core in pci_pm_runtime_suspend()
1250 if (error == -EBUSY || error == -EAGAIN) { in pci_pm_runtime_suspend()
1252 pm->runtime_suspend, error); in pci_pm_runtime_suspend()
1256 pm->runtime_suspend, error); in pci_pm_runtime_suspend()
1263 if (pm && pm->runtime_suspend in pci_pm_runtime_suspend()
1264 && !pci_dev->state_saved && pci_dev->current_state != PCI_D0 in pci_pm_runtime_suspend()
1265 && pci_dev->current_state != PCI_UNKNOWN) { in pci_pm_runtime_suspend()
1266 pci_WARN_ONCE(pci_dev, pci_dev->current_state != prev, in pci_pm_runtime_suspend()
1267 "PCI PM: State of device not saved by %pS\n", in pci_pm_runtime_suspend()
1268 pm->runtime_suspend); in pci_pm_runtime_suspend()
1272 if (!pci_dev->state_saved) { in pci_pm_runtime_suspend()
1283 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; in pci_pm_runtime_resume() local
1284 pci_power_t prev_state = pci_dev->current_state; in pci_pm_runtime_resume()
1294 if (!pci_dev->driver) in pci_pm_runtime_resume()
1303 if (pm && pm->runtime_resume) in pci_pm_runtime_resume()
1304 error = pm->runtime_resume(dev); in pci_pm_runtime_resume()
1306 pci_dev->runtime_d3cold = false; in pci_pm_runtime_resume()
1314 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL; in pci_pm_runtime_idle() local
1317 * If pci_dev->driver is not set (unbound), the device should in pci_pm_runtime_idle()
1318 * always remain in D0 regardless of the runtime PM status in pci_pm_runtime_idle()
1320 if (!pci_dev->driver) in pci_pm_runtime_idle()
1323 if (!pm) in pci_pm_runtime_idle()
1324 return -ENOSYS; in pci_pm_runtime_idle()
1326 if (pm->runtime_idle) in pci_pm_runtime_idle()
1327 return pm->runtime_idle(dev); in pci_pm_runtime_idle()
1368 * __pci_register_driver - register a new pci driver
1382 drv->driver.name = drv->name; in __pci_register_driver()
1383 drv->driver.bus = &pci_bus_type; in __pci_register_driver()
1384 drv->driver.owner = owner; in __pci_register_driver()
1385 drv->driver.mod_name = mod_name; in __pci_register_driver()
1386 drv->driver.groups = drv->groups; in __pci_register_driver()
1388 spin_lock_init(&drv->dynids.lock); in __pci_register_driver()
1389 INIT_LIST_HEAD(&drv->dynids.list); in __pci_register_driver()
1392 return driver_register(&drv->driver); in __pci_register_driver()
1397 * pci_unregister_driver - unregister a pci driver
1408 driver_unregister(&drv->driver); in pci_unregister_driver()
1418 * pci_dev_driver - get the pci_driver of a device
1426 if (dev->driver) in pci_dev_driver()
1427 return dev->driver; in pci_dev_driver()
1431 if (dev->resource[i].flags & IORESOURCE_BUSY) in pci_dev_driver()
1439 * pci_bus_match - Tell if a PCI device structure has a matching PCI device id structure
1453 if (!pci_dev->match_driver) in pci_bus_match()
1465 * pci_dev_get - increments the reference count of the pci device structure
1479 get_device(&dev->dev); in pci_dev_get()
1485 * pci_dev_put - release a use of the pci device structure
1494 put_device(&dev->dev); in pci_dev_put()
1503 return -ENODEV; in pci_uevent()
1507 if (add_uevent_var(env, "PCI_CLASS=%04X", pdev->class)) in pci_uevent()
1508 return -ENOMEM; in pci_uevent()
1510 if (add_uevent_var(env, "PCI_ID=%04X:%04X", pdev->vendor, pdev->device)) in pci_uevent()
1511 return -ENOMEM; in pci_uevent()
1513 if (add_uevent_var(env, "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor, in pci_uevent()
1514 pdev->subsystem_device)) in pci_uevent()
1515 return -ENOMEM; in pci_uevent()
1518 return -ENOMEM; in pci_uevent()
1521 pdev->vendor, pdev->device, in pci_uevent()
1522 pdev->subsystem_vendor, pdev->subsystem_device, in pci_uevent()
1523 (u8)(pdev->class >> 16), (u8)(pdev->class >> 8), in pci_uevent()
1524 (u8)(pdev->class))) in pci_uevent()
1525 return -ENOMEM; in pci_uevent()
1532 * pci_uevent_ers - emit a uevent during recovery path of PCI device
1561 kobject_uevent_env(&pdev->dev.kobj, KOBJ_CHANGE, envp); in pci_uevent_ers()
1572 * pci_dma_configure - Setup DMA configuration
1585 if (IS_ENABLED(CONFIG_OF) && bridge->parent && in pci_dma_configure()
1586 bridge->parent->of_node) { in pci_dma_configure()
1587 ret = of_dma_configure(dev, bridge->parent->of_node, true); in pci_dma_configure()
1589 struct acpi_device *adev = to_acpi_device_node(bridge->fwnode); in pci_dma_configure()
1608 .pm = PCI_PM_OPS_PTR,
1620 if (drv->bus != &pcie_port_bus_type || dev->bus != &pcie_port_bus_type) in pcie_port_bus_match()
1626 if (driver->service != pciedev->service) in pcie_port_bus_match()
1629 if (driver->port_type != PCIE_ANY_PORT && in pcie_port_bus_match()
1630 driver->port_type != pci_pcie_type(pciedev->port)) in pcie_port_bus_match()