]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - drivers/pci/pci-driver.c
PCI: PM: Skip devices in D0 for suspend-to-idle
[mirror_ubuntu-bionic-kernel.git] / drivers / pci / pci-driver.c
CommitLineData
1da177e4
LT
1/*
2 * drivers/pci/pci-driver.c
3 *
2b937303
GKH
4 * (C) Copyright 2002-2004, 2007 Greg Kroah-Hartman <greg@kroah.com>
5 * (C) Copyright 2007 Novell Inc.
6 *
7 * Released under the GPL v2 only.
8 *
1da177e4
LT
9 */
10
11#include <linux/pci.h>
12#include <linux/module.h>
13#include <linux/init.h>
14#include <linux/device.h>
d42c6997 15#include <linux/mempolicy.h>
4e57b681
TS
16#include <linux/string.h>
17#include <linux/slab.h>
8c65b4a6 18#include <linux/sched.h>
873392ca 19#include <linux/cpu.h>
6cbf8214 20#include <linux/pm_runtime.h>
eea3fc03 21#include <linux/suspend.h>
4fc9bbf9 22#include <linux/kexec.h>
1da177e4
LT
23#include "pci.h"
24
75865858
GKH
25struct pci_dynid {
26 struct list_head node;
27 struct pci_device_id id;
28};
1da177e4 29
9dba910e
TH
30/**
31 * pci_add_dynid - add a new PCI device ID to this driver and re-probe devices
32 * @drv: target pci driver
33 * @vendor: PCI vendor ID
34 * @device: PCI device ID
35 * @subvendor: PCI subvendor ID
36 * @subdevice: PCI subdevice ID
37 * @class: PCI class
38 * @class_mask: PCI class mask
39 * @driver_data: private driver data
40 *
41 * Adds a new dynamic pci device ID to this driver and causes the
42 * driver to probe for all devices again. @drv must have been
43 * registered prior to calling this function.
44 *
45 * CONTEXT:
46 * Does GFP_KERNEL allocation.
47 *
48 * RETURNS:
49 * 0 on success, -errno on failure.
50 */
51int pci_add_dynid(struct pci_driver *drv,
52 unsigned int vendor, unsigned int device,
53 unsigned int subvendor, unsigned int subdevice,
54 unsigned int class, unsigned int class_mask,
55 unsigned long driver_data)
56{
57 struct pci_dynid *dynid;
9dba910e
TH
58
59 dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
60 if (!dynid)
61 return -ENOMEM;
62
63 dynid->id.vendor = vendor;
64 dynid->id.device = device;
65 dynid->id.subvendor = subvendor;
66 dynid->id.subdevice = subdevice;
67 dynid->id.class = class;
68 dynid->id.class_mask = class_mask;
69 dynid->id.driver_data = driver_data;
3d3c2ae1 70
9dba910e
TH
71 spin_lock(&drv->dynids.lock);
72 list_add_tail(&dynid->node, &drv->dynids.list);
73 spin_unlock(&drv->dynids.lock);
74
3b7f1016 75 return driver_attach(&drv->driver);
9dba910e 76}
b7fe9434 77EXPORT_SYMBOL_GPL(pci_add_dynid);
9dba910e
TH
78
79static void pci_free_dynids(struct pci_driver *drv)
80{
81 struct pci_dynid *dynid, *n;
3d3c2ae1 82
9dba910e
TH
83 spin_lock(&drv->dynids.lock);
84 list_for_each_entry_safe(dynid, n, &drv->dynids.list, node) {
85 list_del(&dynid->node);
86 kfree(dynid);
87 }
88 spin_unlock(&drv->dynids.lock);
89}
90
1da177e4 91/**
9dba910e 92 * store_new_id - sysfs frontend to pci_add_dynid()
8f7020d3
RD
93 * @driver: target device driver
94 * @buf: buffer for scanning device ID data
95 * @count: input size
1da177e4 96 *
9dba910e 97 * Allow PCI IDs to be added to an existing driver via sysfs.
1da177e4 98 */
a9427741 99static ssize_t new_id_store(struct device_driver *driver, const char *buf,
3c78bc61 100 size_t count)
1da177e4 101{
1da177e4 102 struct pci_driver *pdrv = to_pci_driver(driver);
b41d6cf3 103 const struct pci_device_id *ids = pdrv->id_table;
3c78bc61
RD
104 __u32 vendor, device, subvendor = PCI_ANY_ID,
105 subdevice = PCI_ANY_ID, class = 0, class_mask = 0;
106 unsigned long driver_data = 0;
107 int fields = 0;
8895d3bc 108 int retval = 0;
1da177e4 109
b41d6cf3 110 fields = sscanf(buf, "%x %x %x %x %x %x %lx",
1da177e4
LT
111 &vendor, &device, &subvendor, &subdevice,
112 &class, &class_mask, &driver_data);
6ba18636 113 if (fields < 2)
1da177e4
LT
114 return -EINVAL;
115
8895d3bc
BD
116 if (fields != 7) {
117 struct pci_dev *pdev = kzalloc(sizeof(*pdev), GFP_KERNEL);
118 if (!pdev)
119 return -ENOMEM;
120
121 pdev->vendor = vendor;
122 pdev->device = device;
123 pdev->subsystem_vendor = subvendor;
124 pdev->subsystem_device = subdevice;
125 pdev->class = class;
126
127 if (pci_match_id(pdrv->id_table, pdev))
128 retval = -EEXIST;
129
130 kfree(pdev);
131
132 if (retval)
133 return retval;
134 }
135
b41d6cf3
JD
136 /* Only accept driver_data values that match an existing id_table
137 entry */
2debb4d2
CW
138 if (ids) {
139 retval = -EINVAL;
140 while (ids->vendor || ids->subvendor || ids->class_mask) {
141 if (driver_data == ids->driver_data) {
142 retval = 0;
143 break;
144 }
145 ids++;
b41d6cf3 146 }
2debb4d2
CW
147 if (retval) /* No match */
148 return retval;
b41d6cf3 149 }
b41d6cf3 150
9dba910e
TH
151 retval = pci_add_dynid(pdrv, vendor, device, subvendor, subdevice,
152 class, class_mask, driver_data);
b19441af
GKH
153 if (retval)
154 return retval;
1da177e4
LT
155 return count;
156}
a9427741 157static DRIVER_ATTR_WO(new_id);
1da177e4 158
0994375e
CW
159/**
160 * store_remove_id - remove a PCI device ID from this driver
161 * @driver: target device driver
162 * @buf: buffer for scanning device ID data
163 * @count: input size
164 *
165 * Removes a dynamic pci device ID to this driver.
166 */
a9427741 167static ssize_t remove_id_store(struct device_driver *driver, const char *buf,
3c78bc61 168 size_t count)
0994375e
CW
169{
170 struct pci_dynid *dynid, *n;
171 struct pci_driver *pdrv = to_pci_driver(driver);
172 __u32 vendor, device, subvendor = PCI_ANY_ID,
173 subdevice = PCI_ANY_ID, class = 0, class_mask = 0;
174 int fields = 0;
9222097f 175 size_t retval = -ENODEV;
0994375e
CW
176
177 fields = sscanf(buf, "%x %x %x %x %x %x",
178 &vendor, &device, &subvendor, &subdevice,
179 &class, &class_mask);
180 if (fields < 2)
181 return -EINVAL;
182
183 spin_lock(&pdrv->dynids.lock);
184 list_for_each_entry_safe(dynid, n, &pdrv->dynids.list, node) {
185 struct pci_device_id *id = &dynid->id;
186 if ((id->vendor == vendor) &&
187 (id->device == device) &&
188 (subvendor == PCI_ANY_ID || id->subvendor == subvendor) &&
189 (subdevice == PCI_ANY_ID || id->subdevice == subdevice) &&
190 !((id->class ^ class) & class_mask)) {
191 list_del(&dynid->node);
192 kfree(dynid);
9222097f 193 retval = count;
0994375e
CW
194 break;
195 }
196 }
197 spin_unlock(&pdrv->dynids.lock);
198
9222097f 199 return retval;
0994375e 200}
a9427741 201static DRIVER_ATTR_WO(remove_id);
0994375e 202
2229c1fb
GKH
203static struct attribute *pci_drv_attrs[] = {
204 &driver_attr_new_id.attr,
205 &driver_attr_remove_id.attr,
206 NULL,
bfb09a86 207};
2229c1fb 208ATTRIBUTE_GROUPS(pci_drv);
0994375e 209
1da177e4 210/**
75865858 211 * pci_match_id - See if a pci device matches a given pci_id table
1da177e4 212 * @ids: array of PCI device id structures to search in
75865858
GKH
213 * @dev: the PCI device structure to match against.
214 *
1da177e4 215 * Used by a driver to check whether a PCI device present in the
75865858 216 * system is in its list of supported devices. Returns the matching
1da177e4 217 * pci_device_id structure or %NULL if there is no match.
75865858 218 *
8b60756a 219 * Deprecated, don't use this as it will not catch any dynamic ids
75865858 220 * that a driver might want to check for.
1da177e4 221 */
75865858
GKH
222const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
223 struct pci_dev *dev)
1da177e4 224{
75865858
GKH
225 if (ids) {
226 while (ids->vendor || ids->subvendor || ids->class_mask) {
227 if (pci_match_one_device(ids, dev))
228 return ids;
229 ids++;
230 }
1da177e4
LT
231 }
232 return NULL;
233}
b7fe9434 234EXPORT_SYMBOL(pci_match_id);
1da177e4 235
782a985d
AW
236static const struct pci_device_id pci_device_id_any = {
237 .vendor = PCI_ANY_ID,
238 .device = PCI_ANY_ID,
239 .subvendor = PCI_ANY_ID,
240 .subdevice = PCI_ANY_ID,
241};
242
1da177e4 243/**
ae9608af 244 * pci_match_device - Tell if a PCI device structure has a matching PCI device id structure
75865858 245 * @drv: the PCI driver to match against
39ba487f 246 * @dev: the PCI device structure to match against
75865858
GKH
247 *
248 * Used by a driver to check whether a PCI device present in the
249 * system is in its list of supported devices. Returns the matching
250 * pci_device_id structure or %NULL if there is no match.
1da177e4 251 */
d73460d7
AB
252static const struct pci_device_id *pci_match_device(struct pci_driver *drv,
253 struct pci_dev *dev)
75865858 254{
75865858 255 struct pci_dynid *dynid;
782a985d
AW
256 const struct pci_device_id *found_id = NULL;
257
258 /* When driver_override is set, only bind to the matching driver */
259 if (dev->driver_override && strcmp(dev->driver_override, drv->name))
260 return NULL;
1da177e4 261
7461b60a 262 /* Look at the dynamic ids first, before the static ones */
75865858
GKH
263 spin_lock(&drv->dynids.lock);
264 list_for_each_entry(dynid, &drv->dynids.list, node) {
265 if (pci_match_one_device(&dynid->id, dev)) {
782a985d
AW
266 found_id = &dynid->id;
267 break;
75865858 268 }
1da177e4 269 }
75865858 270 spin_unlock(&drv->dynids.lock);
7461b60a 271
782a985d
AW
272 if (!found_id)
273 found_id = pci_match_id(drv->id_table, dev);
274
275 /* driver_override will always match, send a dummy id */
276 if (!found_id && dev->driver_override)
277 found_id = &pci_device_id_any;
278
279 return found_id;
1da177e4
LT
280}
281
873392ca
RR
282struct drv_dev_and_id {
283 struct pci_driver *drv;
284 struct pci_dev *dev;
285 const struct pci_device_id *id;
286};
287
288static long local_pci_probe(void *_ddi)
289{
290 struct drv_dev_and_id *ddi = _ddi;
967577b0
HY
291 struct pci_dev *pci_dev = ddi->dev;
292 struct pci_driver *pci_drv = ddi->drv;
293 struct device *dev = &pci_dev->dev;
f3ec4f87
AS
294 int rc;
295
967577b0
HY
296 /*
297 * Unbound PCI devices are always put in D0, regardless of
298 * runtime PM status. During probe, the device is set to
299 * active and the usage count is incremented. If the driver
a8360062
RW
300 * supports runtime PM, it should call pm_runtime_put_noidle(),
301 * or any other runtime PM helper function decrementing the usage
302 * count, in its probe routine and pm_runtime_get_noresume() in
303 * its remove routine.
f3ec4f87 304 */
967577b0
HY
305 pm_runtime_get_sync(dev);
306 pci_dev->driver = pci_drv;
307 rc = pci_drv->probe(pci_dev, ddi->id);
f92d74c1
SC
308 if (!rc)
309 return rc;
310 if (rc < 0) {
967577b0
HY
311 pci_dev->driver = NULL;
312 pm_runtime_put_sync(dev);
f92d74c1 313 return rc;
f3ec4f87 314 }
f92d74c1
SC
315 /*
316 * Probe function should return < 0 for failure, 0 for success
317 * Treat values > 0 as success, but warn.
318 */
319 dev_warn(dev, "Driver probe function unexpectedly returned %d\n", rc);
320 return 0;
873392ca
RR
321}
322
0b2c2a71
TG
323static bool pci_physfn_is_probed(struct pci_dev *dev)
324{
325#ifdef CONFIG_PCI_IOV
326 return dev->is_virtfn && dev->physfn->is_probed;
327#else
328 return false;
329#endif
330}
331
d42c6997
AK
332static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
333 const struct pci_device_id *id)
334{
0b2c2a71 335 int error, node, cpu;
873392ca
RR
336 struct drv_dev_and_id ddi = { drv, dev, id };
337
12c3156f
AD
338 /*
339 * Execute driver initialization on node where the device is
340 * attached. This way the driver likely allocates its local memory
341 * on the right node.
342 */
873392ca 343 node = dev_to_node(&dev->dev);
0b2c2a71
TG
344 dev->is_probed = 1;
345
346 cpu_hotplug_disable();
12c3156f
AD
347
348 /*
0b2c2a71
TG
349 * Prevent nesting work_on_cpu() for the case where a Virtual Function
350 * device is probed from work_on_cpu() of the Physical device.
12c3156f 351 */
0b2c2a71
TG
352 if (node < 0 || node >= MAX_NUMNODES || !node_online(node) ||
353 pci_physfn_is_probed(dev))
354 cpu = nr_cpu_ids;
355 else
a70f7302 356 cpu = cpumask_any_and(cpumask_of_node(node), cpu_online_mask);
0b2c2a71
TG
357
358 if (cpu < nr_cpu_ids)
359 error = work_on_cpu(cpu, local_pci_probe, &ddi);
360 else
873392ca 361 error = local_pci_probe(&ddi);
12c3156f 362
0b2c2a71
TG
363 dev->is_probed = 0;
364 cpu_hotplug_enable();
d42c6997
AK
365 return error;
366}
367
1da177e4 368/**
23ea3793 369 * __pci_device_probe - check if a driver wants to claim a specific PCI device
8f7020d3
RD
370 * @drv: driver to call to check if it wants the PCI device
371 * @pci_dev: PCI device being probed
f7625980 372 *
8f7020d3 373 * returns 0 on success, else error.
1da177e4
LT
374 * side-effect: pci_dev->driver is set to drv when drv claims pci_dev.
375 */
3c78bc61 376static int __pci_device_probe(struct pci_driver *drv, struct pci_dev *pci_dev)
75865858
GKH
377{
378 const struct pci_device_id *id;
1da177e4
LT
379 int error = 0;
380
381 if (!pci_dev->driver && drv->probe) {
75865858
GKH
382 error = -ENODEV;
383
384 id = pci_match_device(drv, pci_dev);
385 if (id)
d42c6997 386 error = pci_call_probe(drv, pci_dev, id);
1da177e4
LT
387 }
388 return error;
389}
390
890e4847
JL
391int __weak pcibios_alloc_irq(struct pci_dev *dev)
392{
393 return 0;
394}
395
396void __weak pcibios_free_irq(struct pci_dev *dev)
397{
398}
399
0e7df224
BW
400#ifdef CONFIG_PCI_IOV
401static inline bool pci_device_can_probe(struct pci_dev *pdev)
402{
403 return (!pdev->is_virtfn || pdev->physfn->sriov->drivers_autoprobe);
404}
405#else
406static inline bool pci_device_can_probe(struct pci_dev *pdev)
407{
408 return true;
409}
410#endif
411
3c78bc61 412static int pci_device_probe(struct device *dev)
1da177e4 413{
890e4847
JL
414 int error;
415 struct pci_dev *pci_dev = to_pci_dev(dev);
416 struct pci_driver *drv = to_pci_driver(dev->driver);
417
30fdfb92
MM
418 pci_assign_irq(pci_dev);
419
890e4847
JL
420 error = pcibios_alloc_irq(pci_dev);
421 if (error < 0)
422 return error;
1da177e4 423
1da177e4 424 pci_dev_get(pci_dev);
0e7df224
BW
425 if (pci_device_can_probe(pci_dev)) {
426 error = __pci_device_probe(drv, pci_dev);
427 if (error) {
428 pcibios_free_irq(pci_dev);
429 pci_dev_put(pci_dev);
430 }
890e4847 431 }
1da177e4
LT
432
433 return error;
434}
435
3c78bc61 436static int pci_device_remove(struct device *dev)
1da177e4 437{
3c78bc61
RD
438 struct pci_dev *pci_dev = to_pci_dev(dev);
439 struct pci_driver *drv = pci_dev->driver;
1da177e4
LT
440
441 if (drv) {
f3ec4f87
AS
442 if (drv->remove) {
443 pm_runtime_get_sync(dev);
1da177e4 444 drv->remove(pci_dev);
f3ec4f87
AS
445 pm_runtime_put_noidle(dev);
446 }
890e4847 447 pcibios_free_irq(pci_dev);
1da177e4
LT
448 pci_dev->driver = NULL;
449 }
450
f3ec4f87 451 /* Undo the runtime PM settings in local_pci_probe() */
967577b0 452 pm_runtime_put_sync(dev);
f3ec4f87 453
2449e06a
SL
454 /*
455 * If the device is still on, set the power state as "unknown",
456 * since it might change by the next time we load the driver.
457 */
458 if (pci_dev->current_state == PCI_D0)
459 pci_dev->current_state = PCI_UNKNOWN;
460
1da177e4
LT
461 /*
462 * We would love to complain here if pci_dev->is_enabled is set, that
463 * the driver should have called pci_disable_device(), but the
464 * unfortunate fact is there are too many odd BIOS and bridge setups
f7625980 465 * that don't like drivers doing that all of the time.
1da177e4
LT
466 * Oh well, we can dream of sane hardware when we sleep, no matter how
467 * horrible the crap we have to deal with is when we are awake...
468 */
469
470 pci_dev_put(pci_dev);
471 return 0;
472}
473
bbb44d9f
RW
474static void pci_device_shutdown(struct device *dev)
475{
476 struct pci_dev *pci_dev = to_pci_dev(dev);
477 struct pci_driver *drv = pci_dev->driver;
478
3ff2de9b
HY
479 pm_runtime_resume(dev);
480
bbb44d9f
RW
481 if (drv && drv->shutdown)
482 drv->shutdown(pci_dev);
5b415f1e 483
b566a22c 484 /*
4fc9bbf9
KA
485 * If this is a kexec reboot, turn off Bus Master bit on the
486 * device to tell it to not continue to do DMA. Don't touch
487 * devices in D3cold or unknown states.
488 * If it is not a kexec reboot, firmware will hit the PCI
489 * devices with big hammer and stop their DMA any way.
b566a22c 490 */
4fc9bbf9 491 if (kexec_in_progress && (pci_dev->current_state <= PCI_D3hot))
6e0eda3c 492 pci_clear_master(pci_dev);
bbb44d9f
RW
493}
494
aa338601 495#ifdef CONFIG_PM
6cbf8214
RW
496
497/* Auxiliary functions used for system resume and run-time resume. */
498
499/**
500 * pci_restore_standard_config - restore standard config registers of PCI device
501 * @pci_dev: PCI device to handle
502 */
503static int pci_restore_standard_config(struct pci_dev *pci_dev)
504{
505 pci_update_current_state(pci_dev, PCI_UNKNOWN);
506
507 if (pci_dev->current_state != PCI_D0) {
508 int error = pci_set_power_state(pci_dev, PCI_D0);
509 if (error)
510 return error;
511 }
512
1d3c16a8 513 pci_restore_state(pci_dev);
0ce3fcaf 514 pci_pme_restore(pci_dev);
1d3c16a8 515 return 0;
6cbf8214
RW
516}
517
db288c9c
RW
518#endif
519
520#ifdef CONFIG_PM_SLEEP
521
6cbf8214
RW
522static void pci_pm_default_resume_early(struct pci_dev *pci_dev)
523{
db288c9c
RW
524 pci_power_up(pci_dev);
525 pci_restore_state(pci_dev);
0ce3fcaf 526 pci_pme_restore(pci_dev);
6cbf8214
RW
527}
528
fa58d305
RW
529/*
530 * Default "suspend" method for devices that have no driver provided suspend,
531 * or not even a driver at all (second part).
bbb44d9f 532 */
bb808945 533static void pci_pm_set_unknown_state(struct pci_dev *pci_dev)
bbb44d9f 534{
bbb44d9f
RW
535 /*
536 * mark its power state as "unknown", since we don't know if
537 * e.g. the BIOS will change its device state when we suspend.
538 */
539 if (pci_dev->current_state == PCI_D0)
540 pci_dev->current_state = PCI_UNKNOWN;
541}
542
355a72d7
RW
543/*
544 * Default "resume" method for devices that have no driver provided resume,
545 * or not even a driver at all (second part).
546 */
bb808945 547static int pci_pm_reenable_device(struct pci_dev *pci_dev)
355a72d7
RW
548{
549 int retval;
550
bbb44d9f
RW
551 /* if the device was enabled before suspend, reenable */
552 retval = pci_reenable_device(pci_dev);
553 /*
554 * if the device was busmaster before the suspend, make it busmaster
555 * again
556 */
557 if (pci_dev->is_busmaster)
558 pci_set_master(pci_dev);
559
560 return retval;
561}
562
563static int pci_legacy_suspend(struct device *dev, pm_message_t state)
1da177e4 564{
3c78bc61
RD
565 struct pci_dev *pci_dev = to_pci_dev(dev);
566 struct pci_driver *drv = pci_dev->driver;
46939f8b 567
02669492 568 if (drv && drv->suspend) {
99dadce8 569 pci_power_t prev = pci_dev->current_state;
46939f8b 570 int error;
aa8c6c93 571
57ef8026
FP
572 error = drv->suspend(pci_dev, state);
573 suspend_report_result(drv->suspend, error);
574 if (error)
575 return error;
aa8c6c93 576
46939f8b 577 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
99dadce8
RW
578 && pci_dev->current_state != PCI_UNKNOWN) {
579 WARN_ONCE(pci_dev->current_state != prev,
580 "PCI PM: Device state not saved by %pF\n",
581 drv->suspend);
99dadce8 582 }
02669492 583 }
ad8cfa1d
RW
584
585 pci_fixup_device(pci_fixup_suspend, pci_dev);
586
46939f8b 587 return 0;
1da177e4
LT
588}
589
bbb44d9f 590static int pci_legacy_suspend_late(struct device *dev, pm_message_t state)
cbd69dbb 591{
3c78bc61
RD
592 struct pci_dev *pci_dev = to_pci_dev(dev);
593 struct pci_driver *drv = pci_dev->driver;
cbd69dbb
LT
594
595 if (drv && drv->suspend_late) {
46939f8b
RW
596 pci_power_t prev = pci_dev->current_state;
597 int error;
598
57ef8026
FP
599 error = drv->suspend_late(pci_dev, state);
600 suspend_report_result(drv->suspend_late, error);
46939f8b
RW
601 if (error)
602 return error;
603
604 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
605 && pci_dev->current_state != PCI_UNKNOWN) {
606 WARN_ONCE(pci_dev->current_state != prev,
607 "PCI PM: Device state not saved by %pF\n",
608 drv->suspend_late);
7d2a01b8 609 goto Fixup;
46939f8b 610 }
cbd69dbb 611 }
46939f8b
RW
612
613 if (!pci_dev->state_saved)
614 pci_save_state(pci_dev);
615
616 pci_pm_set_unknown_state(pci_dev);
617
7d2a01b8
AN
618Fixup:
619 pci_fixup_device(pci_fixup_suspend_late, pci_dev);
620
46939f8b 621 return 0;
cbd69dbb 622}
1da177e4 623
f6dc1e5e
RW
624static int pci_legacy_resume_early(struct device *dev)
625{
3c78bc61
RD
626 struct pci_dev *pci_dev = to_pci_dev(dev);
627 struct pci_driver *drv = pci_dev->driver;
f6dc1e5e 628
aa8c6c93
RW
629 return drv && drv->resume_early ?
630 drv->resume_early(pci_dev) : 0;
f6dc1e5e
RW
631}
632
bbb44d9f 633static int pci_legacy_resume(struct device *dev)
1da177e4 634{
3c78bc61
RD
635 struct pci_dev *pci_dev = to_pci_dev(dev);
636 struct pci_driver *drv = pci_dev->driver;
1da177e4 637
ad8cfa1d
RW
638 pci_fixup_device(pci_fixup_resume, pci_dev);
639
aa8c6c93
RW
640 return drv && drv->resume ?
641 drv->resume(pci_dev) : pci_pm_reenable_device(pci_dev);
1da177e4
LT
642}
643
571ff758
RW
644/* Auxiliary functions used by the new power management framework */
645
5294e256 646static void pci_pm_default_resume(struct pci_dev *pci_dev)
571ff758 647{
73410429 648 pci_fixup_device(pci_fixup_resume, pci_dev);
baecc470 649 pci_enable_wake(pci_dev, PCI_D0, false);
571ff758
RW
650}
651
5294e256 652static void pci_pm_default_suspend(struct pci_dev *pci_dev)
73410429 653{
5294e256 654 /* Disable non-bridge devices without PM support */
326c1cda 655 if (!pci_has_subordinate(pci_dev))
cbbc2f6b 656 pci_disable_enabled_device(pci_dev);
73410429
RW
657}
658
07e836e8
RW
659static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev)
660{
661 struct pci_driver *drv = pci_dev->driver;
bb808945 662 bool ret = drv && (drv->suspend || drv->suspend_late || drv->resume
07e836e8 663 || drv->resume_early);
bb808945
RW
664
665 /*
666 * Legacy PM support is used by default, so warn if the new framework is
667 * supported as well. Drivers are supposed to support either the
668 * former, or the latter, but not both at the same time.
669 */
82440a82
DF
670 WARN(ret && drv->driver.pm, "driver %s device %04x:%04x\n",
671 drv->name, pci_dev->vendor, pci_dev->device);
bb808945
RW
672
673 return ret;
07e836e8
RW
674}
675
571ff758
RW
676/* New power management framework */
677
bbb44d9f
RW
678static int pci_pm_prepare(struct device *dev)
679{
680 struct device_driver *drv = dev->driver;
bbb44d9f 681
bac2a909
RW
682 if (drv && drv->pm && drv->pm->prepare) {
683 int error = drv->pm->prepare(dev);
08810a41 684 if (error < 0)
bac2a909 685 return error;
08810a41
RW
686
687 if (!error && dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_PREPARE))
688 return 0;
bac2a909
RW
689 }
690 return pci_dev_keep_suspended(to_pci_dev(dev));
bbb44d9f
RW
691}
692
2cef548a
RW
693static void pci_pm_complete(struct device *dev)
694{
a0d2a959
LW
695 struct pci_dev *pci_dev = to_pci_dev(dev);
696
697 pci_dev_complete_resume(pci_dev);
698 pm_generic_complete(dev);
699
700 /* Resume device if platform firmware has put it in reset-power-on */
d7d80998 701 if (pm_runtime_suspended(dev) && pm_resume_via_firmware()) {
a0d2a959
LW
702 pci_power_t pre_sleep_state = pci_dev->current_state;
703
704 pci_update_current_state(pci_dev, pci_dev->current_state);
705 if (pci_dev->current_state < pre_sleep_state)
706 pm_request_resume(dev);
707 }
2cef548a 708}
bbb44d9f 709
6cbf8214
RW
710#else /* !CONFIG_PM_SLEEP */
711
712#define pci_pm_prepare NULL
2cef548a 713#define pci_pm_complete NULL
6cbf8214
RW
714
715#endif /* !CONFIG_PM_SLEEP */
716
bbb44d9f
RW
717#ifdef CONFIG_SUSPEND
718
719static int pci_pm_suspend(struct device *dev)
720{
721 struct pci_dev *pci_dev = to_pci_dev(dev);
8150f32b 722 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f 723
81f98d30
RW
724 pci_dev->skip_bus_pm = false;
725
ad8cfa1d
RW
726 if (pci_has_legacy_pm_support(pci_dev))
727 return pci_legacy_suspend(dev, PMSG_SUSPEND);
bb808945 728
5294e256
RW
729 if (!pm) {
730 pci_pm_default_suspend(pci_dev);
c4b65157 731 return 0;
5294e256
RW
732 }
733
7cd0602d 734 /*
c4b65157
RW
735 * PCI devices suspended at run time may need to be resumed at this
736 * point, because in general it may be necessary to reconfigure them for
737 * system suspend. Namely, if the device is expected to wake up the
738 * system from the sleep state, it may have to be reconfigured for this
739 * purpose, or if the device is not expected to wake up the system from
740 * the sleep state, it should be prevented from signaling wakeup events
741 * going forward.
742 *
743 * Also if the driver of the device does not indicate that its system
744 * suspend callbacks can cope with runtime-suspended devices, it is
745 * better to resume the device from runtime suspend here.
7cd0602d 746 */
c4b65157 747 if (!dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND) ||
242e23c6 748 !pci_dev_keep_suspended(pci_dev)) {
c4b65157 749 pm_runtime_resume(dev);
242e23c6
RW
750 pci_dev->state_saved = false;
751 }
7cd0602d 752
5294e256
RW
753 if (pm->suspend) {
754 pci_power_t prev = pci_dev->current_state;
755 int error;
756
ddb7c9d2
RW
757 error = pm->suspend(dev);
758 suspend_report_result(pm->suspend, error);
5294e256
RW
759 if (error)
760 return error;
761
46939f8b 762 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
5294e256
RW
763 && pci_dev->current_state != PCI_UNKNOWN) {
764 WARN_ONCE(pci_dev->current_state != prev,
765 "PCI PM: State of device not saved by %pF\n",
766 pm->suspend);
5294e256 767 }
bbb44d9f 768 }
fa58d305 769
5294e256 770 return 0;
bbb44d9f
RW
771}
772
c4b65157
RW
773static int pci_pm_suspend_late(struct device *dev)
774{
775 if (dev_pm_smart_suspend_and_suspended(dev))
776 return 0;
777
778 pci_fixup_device(pci_fixup_suspend, to_pci_dev(dev));
779
780 return pm_generic_suspend_late(dev);
781}
782
bbb44d9f 783static int pci_pm_suspend_noirq(struct device *dev)
c8958177 784{
355a72d7 785 struct pci_dev *pci_dev = to_pci_dev(dev);
8150f32b 786 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
c8958177 787
d7d80998
RW
788 if (dev_pm_smart_suspend_and_suspended(dev)) {
789 dev->power.may_skip_resume = true;
c4b65157 790 return 0;
d7d80998 791 }
c4b65157 792
bb808945
RW
793 if (pci_has_legacy_pm_support(pci_dev))
794 return pci_legacy_suspend_late(dev, PMSG_SUSPEND);
795
931ff68a
RW
796 if (!pm) {
797 pci_save_state(pci_dev);
7d2a01b8 798 goto Fixup;
931ff68a 799 }
46939f8b
RW
800
801 if (pm->suspend_noirq) {
802 pci_power_t prev = pci_dev->current_state;
803 int error;
804
805 error = pm->suspend_noirq(dev);
806 suspend_report_result(pm->suspend_noirq, error);
807 if (error)
808 return error;
809
810 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
811 && pci_dev->current_state != PCI_UNKNOWN) {
812 WARN_ONCE(pci_dev->current_state != prev,
813 "PCI PM: State of device not saved by %pF\n",
814 pm->suspend_noirq);
7d2a01b8 815 goto Fixup;
46939f8b 816 }
bbb44d9f
RW
817 }
818
81f98d30
RW
819 if (pci_dev->skip_bus_pm) {
820 /*
e04ef105
RW
821 * Either the device is a bridge with a child in D0 below it, or
822 * the function is running for the second time in a row without
81f98d30 823 * going through full resume, which is possible only during
e04ef105
RW
824 * suspend-to-idle in a spurious wakeup case. The device should
825 * be in D0 at this point, but if it is a bridge, it may be
826 * necessary to save its state.
81f98d30 827 */
e04ef105
RW
828 if (!pci_dev->state_saved)
829 pci_save_state(pci_dev);
830 } else if (!pci_dev->state_saved) {
46939f8b 831 pci_save_state(pci_dev);
9d26d3a8 832 if (pci_power_manageable(pci_dev))
46939f8b
RW
833 pci_prepare_to_sleep(pci_dev);
834 }
d67e37d7 835
ca67ab5c
RW
836 dev_dbg(dev, "PCI PM: Suspend power state: %s\n",
837 pci_power_name(pci_dev->current_state));
838
e04ef105
RW
839 if (pci_dev->current_state == PCI_D0) {
840 pci_dev->skip_bus_pm = true;
841 /*
842 * Per PCI PM r1.2, table 6-1, a bridge must be in D0 if any
843 * downstream device is in D0, so avoid changing the power state
844 * of the parent bridge by setting the skip_bus_pm flag for it.
845 */
846 if (pci_dev->bus->self)
847 pci_dev->bus->self->skip_bus_pm = true;
848 }
849
850 if (pci_dev->skip_bus_pm && !pm_suspend_via_firmware()) {
851 dev_dbg(dev, "PCI PM: Skipped\n");
852 goto Fixup;
853 }
854
46939f8b
RW
855 pci_pm_set_unknown_state(pci_dev);
856
dbf0e4c7
AS
857 /*
858 * Some BIOSes from ASUS have a bug: If a USB EHCI host controller's
859 * PCI COMMAND register isn't 0, the BIOS assumes that the controller
860 * hasn't been quiesced and tries to turn it off. If the controller
861 * is already in D3, this can hang or cause memory corruption.
862 *
863 * Since the value of the COMMAND register doesn't matter once the
864 * device has been suspended, we can safely set it to 0 here.
865 */
866 if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
867 pci_write_config_word(pci_dev, PCI_COMMAND, 0);
868
7d2a01b8
AN
869Fixup:
870 pci_fixup_device(pci_fixup_suspend_late, pci_dev);
871
d7d80998
RW
872 /*
873 * If the target system sleep state is suspend-to-idle, it is sufficient
874 * to check whether or not the device's wakeup settings are good for
875 * runtime PM. Otherwise, the pm_resume_via_firmware() check will cause
876 * pci_pm_complete() to take care of fixing up the device's state
877 * anyway, if need be.
878 */
879 dev->power.may_skip_resume = device_may_wakeup(dev) ||
880 !device_can_wakeup(dev);
881
46939f8b 882 return 0;
c8958177 883}
1da177e4 884
f6dc1e5e 885static int pci_pm_resume_noirq(struct device *dev)
bbb44d9f
RW
886{
887 struct pci_dev *pci_dev = to_pci_dev(dev);
888 struct device_driver *drv = dev->driver;
355a72d7 889 int error = 0;
bbb44d9f 890
d7d80998
RW
891 if (dev_pm_may_skip_resume(dev))
892 return 0;
893
c4b65157
RW
894 /*
895 * Devices with DPM_FLAG_SMART_SUSPEND may be left in runtime suspend
896 * during system suspend, so update their runtime PM status to "active"
897 * as they are going to be put into D0 shortly.
898 */
899 if (dev_pm_smart_suspend_and_suspended(dev))
900 pm_runtime_set_active(dev);
901
e04ef105
RW
902 /*
903 * In the suspend-to-idle case, devices left in D0 during suspend will
904 * stay in D0, so it is not necessary to restore or update their
905 * configuration here and attempting to put them into D0 again may
906 * confuse some firmware, so avoid doing that.
907 */
908 if (!pci_dev->skip_bus_pm || pm_suspend_via_firmware())
909 pci_pm_default_resume_early(pci_dev);
910
911 pci_fixup_device(pci_fixup_resume_early, pci_dev);
aa8c6c93 912
ad8cfa1d 913 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 914 return pci_legacy_resume_early(dev);
bb808945 915
f6dc1e5e
RW
916 if (drv && drv->pm && drv->pm->resume_noirq)
917 error = drv->pm->resume_noirq(dev);
bbb44d9f
RW
918
919 return error;
920}
921
f6dc1e5e 922static int pci_pm_resume(struct device *dev)
bbb44d9f 923{
355a72d7 924 struct pci_dev *pci_dev = to_pci_dev(dev);
8150f32b 925 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f
RW
926 int error = 0;
927
418e4da3
RW
928 /*
929 * This is necessary for the suspend error path in which resume is
930 * called without restoring the standard config registers of the device.
931 */
932 if (pci_dev->state_saved)
933 pci_restore_standard_config(pci_dev);
934
ad8cfa1d 935 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 936 return pci_legacy_resume(dev);
bb808945 937
5294e256 938 pci_pm_default_resume(pci_dev);
73410429 939
5294e256
RW
940 if (pm) {
941 if (pm->resume)
942 error = pm->resume(dev);
943 } else {
944 pci_pm_reenable_device(pci_dev);
945 }
bbb44d9f 946
999cce4a 947 return error;
bbb44d9f
RW
948}
949
950#else /* !CONFIG_SUSPEND */
951
952#define pci_pm_suspend NULL
c4b65157 953#define pci_pm_suspend_late NULL
bbb44d9f
RW
954#define pci_pm_suspend_noirq NULL
955#define pci_pm_resume NULL
956#define pci_pm_resume_noirq NULL
957
958#endif /* !CONFIG_SUSPEND */
959
1f112cee 960#ifdef CONFIG_HIBERNATE_CALLBACKS
bbb44d9f 961
699c1985
SO
962
963/*
964 * pcibios_pm_ops - provide arch-specific hooks when a PCI device is doing
965 * a hibernate transition
966 */
967struct dev_pm_ops __weak pcibios_pm_ops;
968
bbb44d9f
RW
969static int pci_pm_freeze(struct device *dev)
970{
971 struct pci_dev *pci_dev = to_pci_dev(dev);
8150f32b 972 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f 973
ad8cfa1d
RW
974 if (pci_has_legacy_pm_support(pci_dev))
975 return pci_legacy_suspend(dev, PMSG_FREEZE);
bb808945 976
5294e256
RW
977 if (!pm) {
978 pci_pm_default_suspend(pci_dev);
979 return 0;
bbb44d9f
RW
980 }
981
7cd0602d
RW
982 /*
983 * This used to be done in pci_pm_prepare() for all devices and some
984 * drivers may depend on it, so do it here. Ideally, runtime-suspended
985 * devices should not be touched during freeze/thaw transitions,
986 * however.
987 */
bd5a9802 988 if (!dev_pm_smart_suspend_and_suspended(dev)) {
c4b65157 989 pm_runtime_resume(dev);
bd5a9802
MW
990 pci_dev->state_saved = false;
991 }
7cd0602d 992
5294e256
RW
993 if (pm->freeze) {
994 int error;
995
996 error = pm->freeze(dev);
997 suspend_report_result(pm->freeze, error);
998 if (error)
999 return error;
1000 }
1001
5294e256 1002 return 0;
bbb44d9f
RW
1003}
1004
c4b65157
RW
1005static int pci_pm_freeze_late(struct device *dev)
1006{
1007 if (dev_pm_smart_suspend_and_suspended(dev))
1008 return 0;
1009
1010 return pm_generic_freeze_late(dev);;
1011}
1012
bbb44d9f
RW
1013static int pci_pm_freeze_noirq(struct device *dev)
1014{
355a72d7 1015 struct pci_dev *pci_dev = to_pci_dev(dev);
adf09493 1016 struct device_driver *drv = dev->driver;
bbb44d9f 1017
c4b65157
RW
1018 if (dev_pm_smart_suspend_and_suspended(dev))
1019 return 0;
1020
bb808945
RW
1021 if (pci_has_legacy_pm_support(pci_dev))
1022 return pci_legacy_suspend_late(dev, PMSG_FREEZE);
1023
d67e37d7 1024 if (drv && drv->pm && drv->pm->freeze_noirq) {
46939f8b
RW
1025 int error;
1026
d67e37d7
RW
1027 error = drv->pm->freeze_noirq(dev);
1028 suspend_report_result(drv->pm->freeze_noirq, error);
46939f8b
RW
1029 if (error)
1030 return error;
bbb44d9f
RW
1031 }
1032
46939f8b
RW
1033 if (!pci_dev->state_saved)
1034 pci_save_state(pci_dev);
d67e37d7 1035
46939f8b
RW
1036 pci_pm_set_unknown_state(pci_dev);
1037
699c1985
SO
1038 if (pcibios_pm_ops.freeze_noirq)
1039 return pcibios_pm_ops.freeze_noirq(dev);
1040
46939f8b 1041 return 0;
bbb44d9f
RW
1042}
1043
f6dc1e5e 1044static int pci_pm_thaw_noirq(struct device *dev)
bbb44d9f 1045{
355a72d7 1046 struct pci_dev *pci_dev = to_pci_dev(dev);
bbb44d9f
RW
1047 struct device_driver *drv = dev->driver;
1048 int error = 0;
1049
c4b65157
RW
1050 /*
1051 * If the device is in runtime suspend, the code below may not work
1052 * correctly with it, so skip that code and make the PM core skip all of
1053 * the subsequent "thaw" callbacks for the device.
1054 */
1055 if (dev_pm_smart_suspend_and_suspended(dev)) {
3487972d 1056 dev_pm_skip_next_resume_phases(dev);
c4b65157
RW
1057 return 0;
1058 }
1059
699c1985
SO
1060 if (pcibios_pm_ops.thaw_noirq) {
1061 error = pcibios_pm_ops.thaw_noirq(dev);
1062 if (error)
1063 return error;
1064 }
1065
ad8cfa1d 1066 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 1067 return pci_legacy_resume_early(dev);
bb808945 1068
5839ee73
RW
1069 /*
1070 * pci_restore_state() requires the device to be in D0 (because of MSI
1071 * restoration among other things), so force it into D0 in case the
1072 * driver's "freeze" callbacks put it into a low-power state directly.
1073 */
1074 pci_set_power_state(pci_dev, PCI_D0);
e60514bd 1075 pci_restore_state(pci_dev);
d67e37d7 1076
f6dc1e5e
RW
1077 if (drv && drv->pm && drv->pm->thaw_noirq)
1078 error = drv->pm->thaw_noirq(dev);
bbb44d9f
RW
1079
1080 return error;
1081}
1082
f6dc1e5e 1083static int pci_pm_thaw(struct device *dev)
bbb44d9f 1084{
355a72d7 1085 struct pci_dev *pci_dev = to_pci_dev(dev);
8150f32b 1086 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f
RW
1087 int error = 0;
1088
ad8cfa1d 1089 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 1090 return pci_legacy_resume(dev);
bb808945 1091
5294e256
RW
1092 if (pm) {
1093 if (pm->thaw)
1094 error = pm->thaw(dev);
1095 } else {
1096 pci_pm_reenable_device(pci_dev);
1097 }
bbb44d9f 1098
4b77b0a2
RW
1099 pci_dev->state_saved = false;
1100
bbb44d9f
RW
1101 return error;
1102}
1103
1104static int pci_pm_poweroff(struct device *dev)
1105{
355a72d7 1106 struct pci_dev *pci_dev = to_pci_dev(dev);
8150f32b 1107 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f 1108
ad8cfa1d
RW
1109 if (pci_has_legacy_pm_support(pci_dev))
1110 return pci_legacy_suspend(dev, PMSG_HIBERNATE);
bb808945 1111
5294e256
RW
1112 if (!pm) {
1113 pci_pm_default_suspend(pci_dev);
c4b65157 1114 return 0;
5294e256
RW
1115 }
1116
7cd0602d 1117 /* The reason to do that is the same as in pci_pm_suspend(). */
c4b65157
RW
1118 if (!dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND) ||
1119 !pci_dev_keep_suspended(pci_dev))
1120 pm_runtime_resume(dev);
7cd0602d 1121
82fee4d6 1122 pci_dev->state_saved = false;
5294e256 1123 if (pm->poweroff) {
46939f8b
RW
1124 int error;
1125
ddb7c9d2
RW
1126 error = pm->poweroff(dev);
1127 suspend_report_result(pm->poweroff, error);
46939f8b
RW
1128 if (error)
1129 return error;
bbb44d9f
RW
1130 }
1131
46939f8b 1132 return 0;
bbb44d9f 1133}
c9b9972b 1134
c4b65157
RW
1135static int pci_pm_poweroff_late(struct device *dev)
1136{
1137 if (dev_pm_smart_suspend_and_suspended(dev))
1138 return 0;
699c1985 1139
c4b65157
RW
1140 pci_fixup_device(pci_fixup_suspend, to_pci_dev(dev));
1141
1142 return pm_generic_poweroff_late(dev);
bbb44d9f
RW
1143}
1144
1145static int pci_pm_poweroff_noirq(struct device *dev)
1146{
46939f8b 1147 struct pci_dev *pci_dev = to_pci_dev(dev);
adf09493 1148 struct device_driver *drv = dev->driver;
bbb44d9f 1149
c4b65157
RW
1150 if (dev_pm_smart_suspend_and_suspended(dev))
1151 return 0;
1152
bb808945
RW
1153 if (pci_has_legacy_pm_support(to_pci_dev(dev)))
1154 return pci_legacy_suspend_late(dev, PMSG_HIBERNATE);
1155
7d2a01b8
AN
1156 if (!drv || !drv->pm) {
1157 pci_fixup_device(pci_fixup_suspend_late, pci_dev);
46939f8b 1158 return 0;
7d2a01b8 1159 }
46939f8b
RW
1160
1161 if (drv->pm->poweroff_noirq) {
1162 int error;
1163
d67e37d7
RW
1164 error = drv->pm->poweroff_noirq(dev);
1165 suspend_report_result(drv->pm->poweroff_noirq, error);
46939f8b
RW
1166 if (error)
1167 return error;
bbb44d9f
RW
1168 }
1169
326c1cda 1170 if (!pci_dev->state_saved && !pci_has_subordinate(pci_dev))
46939f8b
RW
1171 pci_prepare_to_sleep(pci_dev);
1172
0b68c8e2
RW
1173 /*
1174 * The reason for doing this here is the same as for the analogous code
1175 * in pci_pm_suspend_noirq().
1176 */
1177 if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
1178 pci_write_config_word(pci_dev, PCI_COMMAND, 0);
1179
7d2a01b8
AN
1180 pci_fixup_device(pci_fixup_suspend_late, pci_dev);
1181
699c1985
SO
1182 if (pcibios_pm_ops.poweroff_noirq)
1183 return pcibios_pm_ops.poweroff_noirq(dev);
1184
46939f8b 1185 return 0;
bbb44d9f
RW
1186}
1187
f6dc1e5e 1188static int pci_pm_restore_noirq(struct device *dev)
bbb44d9f
RW
1189{
1190 struct pci_dev *pci_dev = to_pci_dev(dev);
1191 struct device_driver *drv = dev->driver;
355a72d7 1192 int error = 0;
bbb44d9f 1193
c4b65157
RW
1194 /* This is analogous to the pci_pm_resume_noirq() case. */
1195 if (dev_pm_smart_suspend_and_suspended(dev))
1196 pm_runtime_set_active(dev);
1197
699c1985
SO
1198 if (pcibios_pm_ops.restore_noirq) {
1199 error = pcibios_pm_ops.restore_noirq(dev);
1200 if (error)
1201 return error;
1202 }
1203
6cbf8214 1204 pci_pm_default_resume_early(pci_dev);
e04ef105 1205 pci_fixup_device(pci_fixup_resume_early, pci_dev);
aa8c6c93 1206
ad8cfa1d 1207 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 1208 return pci_legacy_resume_early(dev);
bb808945 1209
f6dc1e5e
RW
1210 if (drv && drv->pm && drv->pm->restore_noirq)
1211 error = drv->pm->restore_noirq(dev);
bbb44d9f
RW
1212
1213 return error;
1214}
1215
f6dc1e5e 1216static int pci_pm_restore(struct device *dev)
bbb44d9f
RW
1217{
1218 struct pci_dev *pci_dev = to_pci_dev(dev);
8150f32b 1219 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
bbb44d9f
RW
1220 int error = 0;
1221
418e4da3
RW
1222 /*
1223 * This is necessary for the hibernation error path in which restore is
1224 * called without restoring the standard config registers of the device.
1225 */
1226 if (pci_dev->state_saved)
1227 pci_restore_standard_config(pci_dev);
1228
ad8cfa1d 1229 if (pci_has_legacy_pm_support(pci_dev))
f6dc1e5e 1230 return pci_legacy_resume(dev);
bb808945 1231
5294e256 1232 pci_pm_default_resume(pci_dev);
73410429 1233
5294e256
RW
1234 if (pm) {
1235 if (pm->restore)
1236 error = pm->restore(dev);
1237 } else {
1238 pci_pm_reenable_device(pci_dev);
1239 }
bbb44d9f
RW
1240
1241 return error;
c8958177 1242}
1da177e4 1243
1f112cee 1244#else /* !CONFIG_HIBERNATE_CALLBACKS */
bbb44d9f
RW
1245
1246#define pci_pm_freeze NULL
c4b65157 1247#define pci_pm_freeze_late NULL
bbb44d9f
RW
1248#define pci_pm_freeze_noirq NULL
1249#define pci_pm_thaw NULL
1250#define pci_pm_thaw_noirq NULL
1251#define pci_pm_poweroff NULL
c4b65157 1252#define pci_pm_poweroff_late NULL
bbb44d9f
RW
1253#define pci_pm_poweroff_noirq NULL
1254#define pci_pm_restore NULL
1255#define pci_pm_restore_noirq NULL
1256
1f112cee 1257#endif /* !CONFIG_HIBERNATE_CALLBACKS */
bbb44d9f 1258
fbb988be 1259#ifdef CONFIG_PM
6cbf8214
RW
1260
1261static int pci_pm_runtime_suspend(struct device *dev)
1262{
1263 struct pci_dev *pci_dev = to_pci_dev(dev);
1264 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1265 pci_power_t prev = pci_dev->current_state;
1266 int error;
1267
967577b0 1268 /*
3cf160f5
RW
1269 * If pci_dev->driver is not set (unbound), we leave the device in D0,
1270 * but it may go to D3cold when the bridge above it runtime suspends.
1271 * Save its config space in case that happens.
967577b0 1272 */
3cf160f5
RW
1273 if (!pci_dev->driver) {
1274 pci_save_state(pci_dev);
967577b0 1275 return 0;
3cf160f5 1276 }
967577b0 1277
6cbf8214
RW
1278 if (!pm || !pm->runtime_suspend)
1279 return -ENOSYS;
1280
82fee4d6 1281 pci_dev->state_saved = false;
6cbf8214 1282 error = pm->runtime_suspend(dev);
06bf403d
ID
1283 if (error) {
1284 /*
1285 * -EBUSY and -EAGAIN is used to request the runtime PM core
1286 * to schedule a new suspend, so log the event only with debug
1287 * log level.
1288 */
1289 if (error == -EBUSY || error == -EAGAIN)
1290 dev_dbg(dev, "can't suspend now (%pf returned %d)\n",
1291 pm->runtime_suspend, error);
1292 else
1293 dev_err(dev, "can't suspend (%pf returned %d)\n",
1294 pm->runtime_suspend, error);
1295
6cbf8214 1296 return error;
06bf403d 1297 }
6cbf8214
RW
1298
1299 pci_fixup_device(pci_fixup_suspend, pci_dev);
1300
1301 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
1302 && pci_dev->current_state != PCI_UNKNOWN) {
1303 WARN_ONCE(pci_dev->current_state != prev,
1304 "PCI PM: State of device not saved by %pF\n",
1305 pm->runtime_suspend);
1306 return 0;
1307 }
1308
42eca230 1309 if (!pci_dev->state_saved) {
6cbf8214 1310 pci_save_state(pci_dev);
42eca230
DA
1311 pci_finish_runtime_suspend(pci_dev);
1312 }
6cbf8214
RW
1313
1314 return 0;
1315}
1316
1317static int pci_pm_runtime_resume(struct device *dev)
1318{
448bd857 1319 int rc;
6cbf8214
RW
1320 struct pci_dev *pci_dev = to_pci_dev(dev);
1321 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1322
967577b0 1323 /*
3cf160f5
RW
1324 * Restoring config space is necessary even if the device is not bound
1325 * to a driver because although we left it in D0, it may have gone to
1326 * D3cold when the bridge above it runtime suspended.
967577b0 1327 */
3cf160f5
RW
1328 pci_restore_standard_config(pci_dev);
1329
967577b0
HY
1330 if (!pci_dev->driver)
1331 return 0;
1332
6cbf8214
RW
1333 if (!pm || !pm->runtime_resume)
1334 return -ENOSYS;
1335
db288c9c 1336 pci_fixup_device(pci_fixup_resume_early, pci_dev);
0847684c 1337 pci_enable_wake(pci_dev, PCI_D0, false);
6cbf8214
RW
1338 pci_fixup_device(pci_fixup_resume, pci_dev);
1339
448bd857
HY
1340 rc = pm->runtime_resume(dev);
1341
1342 pci_dev->runtime_d3cold = false;
1343
1344 return rc;
6cbf8214
RW
1345}
1346
1347static int pci_pm_runtime_idle(struct device *dev)
1348{
967577b0 1349 struct pci_dev *pci_dev = to_pci_dev(dev);
6cbf8214 1350 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
45f0a85c 1351 int ret = 0;
6cbf8214 1352
967577b0
HY
1353 /*
1354 * If pci_dev->driver is not set (unbound), the device should
1355 * always remain in D0 regardless of the runtime PM status
1356 */
1357 if (!pci_dev->driver)
45f0a85c 1358 return 0;
967577b0 1359
6cbf8214
RW
1360 if (!pm)
1361 return -ENOSYS;
1362
45f0a85c
RW
1363 if (pm->runtime_idle)
1364 ret = pm->runtime_idle(dev);
6cbf8214 1365
45f0a85c 1366 return ret;
6cbf8214
RW
1367}
1368
f91da04d 1369static const struct dev_pm_ops pci_dev_pm_ops = {
adf09493 1370 .prepare = pci_pm_prepare,
2cef548a 1371 .complete = pci_pm_complete,
adf09493 1372 .suspend = pci_pm_suspend,
c4b65157 1373 .suspend_late = pci_pm_suspend_late,
adf09493
RW
1374 .resume = pci_pm_resume,
1375 .freeze = pci_pm_freeze,
c4b65157 1376 .freeze_late = pci_pm_freeze_late,
adf09493
RW
1377 .thaw = pci_pm_thaw,
1378 .poweroff = pci_pm_poweroff,
c4b65157 1379 .poweroff_late = pci_pm_poweroff_late,
adf09493 1380 .restore = pci_pm_restore,
bbb44d9f
RW
1381 .suspend_noirq = pci_pm_suspend_noirq,
1382 .resume_noirq = pci_pm_resume_noirq,
1383 .freeze_noirq = pci_pm_freeze_noirq,
1384 .thaw_noirq = pci_pm_thaw_noirq,
1385 .poweroff_noirq = pci_pm_poweroff_noirq,
1386 .restore_noirq = pci_pm_restore_noirq,
6cbf8214
RW
1387 .runtime_suspend = pci_pm_runtime_suspend,
1388 .runtime_resume = pci_pm_runtime_resume,
1389 .runtime_idle = pci_pm_runtime_idle,
bbb44d9f
RW
1390};
1391
adf09493 1392#define PCI_PM_OPS_PTR (&pci_dev_pm_ops)
bbb44d9f 1393
fbb988be
RW
1394#else /* !CONFIG_PM */
1395
1396#define pci_pm_runtime_suspend NULL
1397#define pci_pm_runtime_resume NULL
1398#define pci_pm_runtime_idle NULL
bbb44d9f
RW
1399
1400#define PCI_PM_OPS_PTR NULL
1401
fbb988be 1402#endif /* !CONFIG_PM */
bbb44d9f 1403
1da177e4 1404/**
863b18f4 1405 * __pci_register_driver - register a new pci driver
1da177e4 1406 * @drv: the driver structure to register
863b18f4 1407 * @owner: owner module of drv
f95d882d 1408 * @mod_name: module name string
f7625980 1409 *
1da177e4 1410 * Adds the driver structure to the list of registered drivers.
f7625980
BH
1411 * Returns a negative value on error, otherwise 0.
1412 * If no error occurred, the driver remains registered even if
1da177e4
LT
1413 * no device was claimed during registration.
1414 */
725522b5
GKH
1415int __pci_register_driver(struct pci_driver *drv, struct module *owner,
1416 const char *mod_name)
1da177e4 1417{
1da177e4
LT
1418 /* initialize common driver fields */
1419 drv->driver.name = drv->name;
1420 drv->driver.bus = &pci_bus_type;
863b18f4 1421 drv->driver.owner = owner;
725522b5 1422 drv->driver.mod_name = mod_name;
92d50fc1 1423 drv->driver.groups = drv->groups;
50b00755 1424
75865858
GKH
1425 spin_lock_init(&drv->dynids.lock);
1426 INIT_LIST_HEAD(&drv->dynids.list);
1da177e4
LT
1427
1428 /* register with core */
bfb09a86 1429 return driver_register(&drv->driver);
1da177e4 1430}
b7fe9434 1431EXPORT_SYMBOL(__pci_register_driver);
1da177e4
LT
1432
1433/**
1434 * pci_unregister_driver - unregister a pci driver
1435 * @drv: the driver structure to unregister
f7625980 1436 *
1da177e4
LT
1437 * Deletes the driver structure from the list of registered PCI drivers,
1438 * gives it a chance to clean up by calling its remove() function for
1439 * each device it was responsible for, and marks those devices as
1440 * driverless.
1441 */
1442
3c78bc61 1443void pci_unregister_driver(struct pci_driver *drv)
1da177e4
LT
1444{
1445 driver_unregister(&drv->driver);
1446 pci_free_dynids(drv);
1447}
b7fe9434 1448EXPORT_SYMBOL(pci_unregister_driver);
1da177e4
LT
1449
1450static struct pci_driver pci_compat_driver = {
1451 .name = "compat"
1452};
1453
1454/**
1455 * pci_dev_driver - get the pci_driver of a device
1456 * @dev: the device to query
1457 *
f7625980 1458 * Returns the appropriate pci_driver structure or %NULL if there is no
1da177e4
LT
1459 * registered driver for the device.
1460 */
3c78bc61 1461struct pci_driver *pci_dev_driver(const struct pci_dev *dev)
1da177e4
LT
1462{
1463 if (dev->driver)
1464 return dev->driver;
1465 else {
1466 int i;
3c78bc61 1467 for (i = 0; i <= PCI_ROM_RESOURCE; i++)
1da177e4
LT
1468 if (dev->resource[i].flags & IORESOURCE_BUSY)
1469 return &pci_compat_driver;
1470 }
1471 return NULL;
1472}
b7fe9434 1473EXPORT_SYMBOL(pci_dev_driver);
1da177e4
LT
1474
1475/**
1476 * pci_bus_match - Tell if a PCI device structure has a matching PCI device id structure
1da177e4 1477 * @dev: the PCI device structure to match against
8f7020d3 1478 * @drv: the device driver to search for matching PCI device id structures
f7625980 1479 *
1da177e4 1480 * Used by a driver to check whether a PCI device present in the
8f7020d3 1481 * system is in its list of supported devices. Returns the matching
1da177e4
LT
1482 * pci_device_id structure or %NULL if there is no match.
1483 */
75865858 1484static int pci_bus_match(struct device *dev, struct device_driver *drv)
1da177e4 1485{
75865858 1486 struct pci_dev *pci_dev = to_pci_dev(dev);
58d9a38f 1487 struct pci_driver *pci_drv;
1da177e4
LT
1488 const struct pci_device_id *found_id;
1489
58d9a38f
YL
1490 if (!pci_dev->match_driver)
1491 return 0;
1492
1493 pci_drv = to_pci_driver(drv);
75865858 1494 found_id = pci_match_device(pci_drv, pci_dev);
1da177e4
LT
1495 if (found_id)
1496 return 1;
1497
75865858 1498 return 0;
1da177e4
LT
1499}
1500
1501/**
1502 * pci_dev_get - increments the reference count of the pci device structure
1503 * @dev: the device being referenced
1504 *
1505 * Each live reference to a device should be refcounted.
1506 *
1507 * Drivers for PCI devices should normally record such references in
1508 * their probe() methods, when they bind to a device, and release
1509 * them by calling pci_dev_put(), in their disconnect() methods.
1510 *
1511 * A pointer to the device with the incremented reference counter is returned.
1512 */
1513struct pci_dev *pci_dev_get(struct pci_dev *dev)
1514{
1515 if (dev)
1516 get_device(&dev->dev);
1517 return dev;
1518}
b7fe9434 1519EXPORT_SYMBOL(pci_dev_get);
1da177e4
LT
1520
1521/**
1522 * pci_dev_put - release a use of the pci device structure
1523 * @dev: device that's been disconnected
1524 *
1525 * Must be called when a user of a device is finished with it. When the last
1526 * user of the device calls this function, the memory of the device is freed.
1527 */
1528void pci_dev_put(struct pci_dev *dev)
1529{
1530 if (dev)
1531 put_device(&dev->dev);
1532}
b7fe9434 1533EXPORT_SYMBOL(pci_dev_put);
1da177e4 1534
8ccc9aa1
BP
1535static int pci_uevent(struct device *dev, struct kobj_uevent_env *env)
1536{
1537 struct pci_dev *pdev;
1538
1539 if (!dev)
1540 return -ENODEV;
1541
1542 pdev = to_pci_dev(dev);
8ccc9aa1
BP
1543
1544 if (add_uevent_var(env, "PCI_CLASS=%04X", pdev->class))
1545 return -ENOMEM;
1546
1547 if (add_uevent_var(env, "PCI_ID=%04X:%04X", pdev->vendor, pdev->device))
1548 return -ENOMEM;
1549
1550 if (add_uevent_var(env, "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor,
1551 pdev->subsystem_device))
1552 return -ENOMEM;
1553
1554 if (add_uevent_var(env, "PCI_SLOT_NAME=%s", pci_name(pdev)))
1555 return -ENOMEM;
1556
145b3fe5 1557 if (add_uevent_var(env, "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02X",
8ccc9aa1
BP
1558 pdev->vendor, pdev->device,
1559 pdev->subsystem_vendor, pdev->subsystem_device,
1560 (u8)(pdev->class >> 16), (u8)(pdev->class >> 8),
1561 (u8)(pdev->class)))
1562 return -ENOMEM;
efdd4070 1563
8ccc9aa1
BP
1564 return 0;
1565}
1566
02e0bea6
PS
1567static int pci_bus_num_vf(struct device *dev)
1568{
1569 return pci_num_vf(to_pci_dev(dev));
1570}
1571
1da177e4
LT
1572struct bus_type pci_bus_type = {
1573 .name = "pci",
1574 .match = pci_bus_match,
312c004d 1575 .uevent = pci_uevent,
b15d686a
RK
1576 .probe = pci_device_probe,
1577 .remove = pci_device_remove,
cbd69dbb 1578 .shutdown = pci_device_shutdown,
5136b2da 1579 .dev_groups = pci_dev_groups,
0f49ba55 1580 .bus_groups = pci_bus_groups,
2229c1fb 1581 .drv_groups = pci_drv_groups,
bbb44d9f 1582 .pm = PCI_PM_OPS_PTR,
02e0bea6 1583 .num_vf = pci_bus_num_vf,
d89e2378 1584 .force_dma = true,
1da177e4 1585};
b7fe9434 1586EXPORT_SYMBOL(pci_bus_type);
1da177e4
LT
1587
1588static int __init pci_driver_init(void)
1589{
1590 return bus_register(&pci_bus_type);
1591}
1da177e4 1592postcore_initcall(pci_driver_init);