1
2
3
4
5
6
7#include <linux/pci.h>
8#include <linux/module.h>
9#include <linux/init.h>
10#include <linux/device.h>
11#include <linux/mempolicy.h>
12#include <linux/string.h>
13#include <linux/slab.h>
14#include <linux/sched.h>
15#include <linux/cpu.h>
16#include <linux/pm_runtime.h>
17#include <linux/suspend.h>
18#include <linux/kexec.h>
19#include <linux/of_device.h>
20#include <linux/acpi.h>
21#include "pci.h"
22#include "pcie/portdrv.h"
23
24struct pci_dynid {
25 struct list_head node;
26 struct pci_device_id id;
27};
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50int pci_add_dynid(struct pci_driver *drv,
51 unsigned int vendor, unsigned int device,
52 unsigned int subvendor, unsigned int subdevice,
53 unsigned int class, unsigned int class_mask,
54 unsigned long driver_data)
55{
56 struct pci_dynid *dynid;
57
58 dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
59 if (!dynid)
60 return -ENOMEM;
61
62 dynid->id.vendor = vendor;
63 dynid->id.device = device;
64 dynid->id.subvendor = subvendor;
65 dynid->id.subdevice = subdevice;
66 dynid->id.class = class;
67 dynid->id.class_mask = class_mask;
68 dynid->id.driver_data = driver_data;
69
70 spin_lock(&drv->dynids.lock);
71 list_add_tail(&dynid->node, &drv->dynids.list);
72 spin_unlock(&drv->dynids.lock);
73
74 return driver_attach(&drv->driver);
75}
76EXPORT_SYMBOL_GPL(pci_add_dynid);
77
78static void pci_free_dynids(struct pci_driver *drv)
79{
80 struct pci_dynid *dynid, *n;
81
82 spin_lock(&drv->dynids.lock);
83 list_for_each_entry_safe(dynid, n, &drv->dynids.list, node) {
84 list_del(&dynid->node);
85 kfree(dynid);
86 }
87 spin_unlock(&drv->dynids.lock);
88}
89
90
91
92
93
94
95
96
97
98static ssize_t new_id_store(struct device_driver *driver, const char *buf,
99 size_t count)
100{
101 struct pci_driver *pdrv = to_pci_driver(driver);
102 const struct pci_device_id *ids = pdrv->id_table;
103 u32 vendor, device, subvendor = PCI_ANY_ID,
104 subdevice = PCI_ANY_ID, class = 0, class_mask = 0;
105 unsigned long driver_data = 0;
106 int fields = 0;
107 int retval = 0;
108
109 fields = sscanf(buf, "%x %x %x %x %x %x %lx",
110 &vendor, &device, &subvendor, &subdevice,
111 &class, &class_mask, &driver_data);
112 if (fields < 2)
113 return -EINVAL;
114
115 if (fields != 7) {
116 struct pci_dev *pdev = kzalloc(sizeof(*pdev), GFP_KERNEL);
117 if (!pdev)
118 return -ENOMEM;
119
120 pdev->vendor = vendor;
121 pdev->device = device;
122 pdev->subsystem_vendor = subvendor;
123 pdev->subsystem_device = subdevice;
124 pdev->class = class;
125
126 if (pci_match_id(pdrv->id_table, pdev))
127 retval = -EEXIST;
128
129 kfree(pdev);
130
131 if (retval)
132 return retval;
133 }
134
135
136
137 if (ids) {
138 retval = -EINVAL;
139 while (ids->vendor || ids->subvendor || ids->class_mask) {
140 if (driver_data == ids->driver_data) {
141 retval = 0;
142 break;
143 }
144 ids++;
145 }
146 if (retval)
147 return retval;
148 }
149
150 retval = pci_add_dynid(pdrv, vendor, device, subvendor, subdevice,
151 class, class_mask, driver_data);
152 if (retval)
153 return retval;
154 return count;
155}
156static DRIVER_ATTR_WO(new_id);
157
158
159
160
161
162
163
164
165
166static ssize_t remove_id_store(struct device_driver *driver, const char *buf,
167 size_t count)
168{
169 struct pci_dynid *dynid, *n;
170 struct pci_driver *pdrv = to_pci_driver(driver);
171 u32 vendor, device, subvendor = PCI_ANY_ID,
172 subdevice = PCI_ANY_ID, class = 0, class_mask = 0;
173 int fields = 0;
174 size_t retval = -ENODEV;
175
176 fields = sscanf(buf, "%x %x %x %x %x %x",
177 &vendor, &device, &subvendor, &subdevice,
178 &class, &class_mask);
179 if (fields < 2)
180 return -EINVAL;
181
182 spin_lock(&pdrv->dynids.lock);
183 list_for_each_entry_safe(dynid, n, &pdrv->dynids.list, node) {
184 struct pci_device_id *id = &dynid->id;
185 if ((id->vendor == vendor) &&
186 (id->device == device) &&
187 (subvendor == PCI_ANY_ID || id->subvendor == subvendor) &&
188 (subdevice == PCI_ANY_ID || id->subdevice == subdevice) &&
189 !((id->class ^ class) & class_mask)) {
190 list_del(&dynid->node);
191 kfree(dynid);
192 retval = count;
193 break;
194 }
195 }
196 spin_unlock(&pdrv->dynids.lock);
197
198 return retval;
199}
200static DRIVER_ATTR_WO(remove_id);
201
202static struct attribute *pci_drv_attrs[] = {
203 &driver_attr_new_id.attr,
204 &driver_attr_remove_id.attr,
205 NULL,
206};
207ATTRIBUTE_GROUPS(pci_drv);
208
209
210
211
212
213
214
215
216
217
218
219
220
221const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
222 struct pci_dev *dev)
223{
224 if (ids) {
225 while (ids->vendor || ids->subvendor || ids->class_mask) {
226 if (pci_match_one_device(ids, dev))
227 return ids;
228 ids++;
229 }
230 }
231 return NULL;
232}
233EXPORT_SYMBOL(pci_match_id);
234
235static const struct pci_device_id pci_device_id_any = {
236 .vendor = PCI_ANY_ID,
237 .device = PCI_ANY_ID,
238 .subvendor = PCI_ANY_ID,
239 .subdevice = PCI_ANY_ID,
240};
241
242
243
244
245
246
247
248
249
250
251static const struct pci_device_id *pci_match_device(struct pci_driver *drv,
252 struct pci_dev *dev)
253{
254 struct pci_dynid *dynid;
255 const struct pci_device_id *found_id = NULL;
256
257
258 if (dev->driver_override && strcmp(dev->driver_override, drv->name))
259 return NULL;
260
261
262 spin_lock(&drv->dynids.lock);
263 list_for_each_entry(dynid, &drv->dynids.list, node) {
264 if (pci_match_one_device(&dynid->id, dev)) {
265 found_id = &dynid->id;
266 break;
267 }
268 }
269 spin_unlock(&drv->dynids.lock);
270
271 if (!found_id)
272 found_id = pci_match_id(drv->id_table, dev);
273
274
275 if (!found_id && dev->driver_override)
276 found_id = &pci_device_id_any;
277
278 return found_id;
279}
280
281struct drv_dev_and_id {
282 struct pci_driver *drv;
283 struct pci_dev *dev;
284 const struct pci_device_id *id;
285};
286
287static long local_pci_probe(void *_ddi)
288{
289 struct drv_dev_and_id *ddi = _ddi;
290 struct pci_dev *pci_dev = ddi->dev;
291 struct pci_driver *pci_drv = ddi->drv;
292 struct device *dev = &pci_dev->dev;
293 int rc;
294
295
296
297
298
299
300
301
302
303
304 pm_runtime_get_sync(dev);
305 pci_dev->driver = pci_drv;
306 rc = pci_drv->probe(pci_dev, ddi->id);
307 if (!rc)
308 return rc;
309 if (rc < 0) {
310 pci_dev->driver = NULL;
311 pm_runtime_put_sync(dev);
312 return rc;
313 }
314
315
316
317
318 pci_warn(pci_dev, "Driver probe function unexpectedly returned %d\n",
319 rc);
320 return 0;
321}
322
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
332static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
333 const struct pci_device_id *id)
334{
335 int error, node, cpu;
336 struct drv_dev_and_id ddi = { drv, dev, id };
337
338
339
340
341
342
343 node = dev_to_node(&dev->dev);
344 dev->is_probed = 1;
345
346 cpu_hotplug_disable();
347
348
349
350
351
352 if (node < 0 || node >= MAX_NUMNODES || !node_online(node) ||
353 pci_physfn_is_probed(dev))
354 cpu = nr_cpu_ids;
355 else
356 cpu = cpumask_any_and(cpumask_of_node(node), cpu_online_mask);
357
358 if (cpu < nr_cpu_ids)
359 error = work_on_cpu(cpu, local_pci_probe, &ddi);
360 else
361 error = local_pci_probe(&ddi);
362
363 dev->is_probed = 0;
364 cpu_hotplug_enable();
365 return error;
366}
367
368
369
370
371
372
373
374
375
376static int __pci_device_probe(struct pci_driver *drv, struct pci_dev *pci_dev)
377{
378 const struct pci_device_id *id;
379 int error = 0;
380
381 if (!pci_dev->driver && drv->probe) {
382 error = -ENODEV;
383
384 id = pci_match_device(drv, pci_dev);
385 if (id)
386 error = pci_call_probe(drv, pci_dev, id);
387 }
388 return error;
389}
390
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
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 pdev->driver_override);
405}
406#else
407static inline bool pci_device_can_probe(struct pci_dev *pdev)
408{
409 return true;
410}
411#endif
412
413static int pci_device_probe(struct device *dev)
414{
415 int error;
416 struct pci_dev *pci_dev = to_pci_dev(dev);
417 struct pci_driver *drv = to_pci_driver(dev->driver);
418
419 if (!pci_device_can_probe(pci_dev))
420 return -ENODEV;
421
422 pci_assign_irq(pci_dev);
423
424 error = pcibios_alloc_irq(pci_dev);
425 if (error < 0)
426 return error;
427
428 pci_dev_get(pci_dev);
429 error = __pci_device_probe(drv, pci_dev);
430 if (error) {
431 pcibios_free_irq(pci_dev);
432 pci_dev_put(pci_dev);
433 }
434
435 return error;
436}
437
438static int pci_device_remove(struct device *dev)
439{
440 struct pci_dev *pci_dev = to_pci_dev(dev);
441 struct pci_driver *drv = pci_dev->driver;
442
443 if (drv) {
444 if (drv->remove) {
445 pm_runtime_get_sync(dev);
446 drv->remove(pci_dev);
447 pm_runtime_put_noidle(dev);
448 }
449 pcibios_free_irq(pci_dev);
450 pci_dev->driver = NULL;
451 pci_iov_remove(pci_dev);
452 }
453
454
455 pm_runtime_put_sync(dev);
456
457
458
459
460
461 if (pci_dev->current_state == PCI_D0)
462 pci_dev->current_state = PCI_UNKNOWN;
463
464
465
466
467
468
469
470
471
472
473 pci_dev_put(pci_dev);
474 return 0;
475}
476
477static void pci_device_shutdown(struct device *dev)
478{
479 struct pci_dev *pci_dev = to_pci_dev(dev);
480 struct pci_driver *drv = pci_dev->driver;
481
482 pm_runtime_resume(dev);
483
484 if (drv && drv->shutdown)
485 drv->shutdown(pci_dev);
486
487
488
489
490
491
492
493
494 if (kexec_in_progress && (pci_dev->current_state <= PCI_D3hot))
495 pci_clear_master(pci_dev);
496}
497
498#ifdef CONFIG_PM
499
500
501
502
503
504
505
506static int pci_restore_standard_config(struct pci_dev *pci_dev)
507{
508 pci_update_current_state(pci_dev, PCI_UNKNOWN);
509
510 if (pci_dev->current_state != PCI_D0) {
511 int error = pci_set_power_state(pci_dev, PCI_D0);
512 if (error)
513 return error;
514 }
515
516 pci_restore_state(pci_dev);
517 pci_pme_restore(pci_dev);
518 return 0;
519}
520
521static void pci_pm_default_resume(struct pci_dev *pci_dev)
522{
523 pci_fixup_device(pci_fixup_resume, pci_dev);
524 pci_enable_wake(pci_dev, PCI_D0, false);
525}
526
527#endif
528
529#ifdef CONFIG_PM_SLEEP
530
531static void pci_pm_default_resume_early(struct pci_dev *pci_dev)
532{
533 pci_power_up(pci_dev);
534 pci_update_current_state(pci_dev, PCI_D0);
535 pci_restore_state(pci_dev);
536 pci_pme_restore(pci_dev);
537}
538
539
540
541
542
543static void pci_pm_set_unknown_state(struct pci_dev *pci_dev)
544{
545
546
547
548
549 if (pci_dev->current_state == PCI_D0)
550 pci_dev->current_state = PCI_UNKNOWN;
551}
552
553
554
555
556
557static int pci_pm_reenable_device(struct pci_dev *pci_dev)
558{
559 int retval;
560
561
562 retval = pci_reenable_device(pci_dev);
563
564
565
566
567 if (pci_dev->is_busmaster)
568 pci_set_master(pci_dev);
569
570 return retval;
571}
572
573static int pci_legacy_suspend(struct device *dev, pm_message_t state)
574{
575 struct pci_dev *pci_dev = to_pci_dev(dev);
576 struct pci_driver *drv = pci_dev->driver;
577
578 if (drv && drv->suspend) {
579 pci_power_t prev = pci_dev->current_state;
580 int error;
581
582 error = drv->suspend(pci_dev, state);
583 suspend_report_result(drv->suspend, error);
584 if (error)
585 return error;
586
587 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
588 && pci_dev->current_state != PCI_UNKNOWN) {
589 pci_WARN_ONCE(pci_dev, pci_dev->current_state != prev,
590 "PCI PM: Device state not saved by %pS\n",
591 drv->suspend);
592 }
593 }
594
595 pci_fixup_device(pci_fixup_suspend, pci_dev);
596
597 return 0;
598}
599
600static int pci_legacy_suspend_late(struct device *dev, pm_message_t state)
601{
602 struct pci_dev *pci_dev = to_pci_dev(dev);
603
604 if (!pci_dev->state_saved)
605 pci_save_state(pci_dev);
606
607 pci_pm_set_unknown_state(pci_dev);
608
609 pci_fixup_device(pci_fixup_suspend_late, pci_dev);
610
611 return 0;
612}
613
614static int pci_legacy_resume(struct device *dev)
615{
616 struct pci_dev *pci_dev = to_pci_dev(dev);
617 struct pci_driver *drv = pci_dev->driver;
618
619 pci_fixup_device(pci_fixup_resume, pci_dev);
620
621 return drv && drv->resume ?
622 drv->resume(pci_dev) : pci_pm_reenable_device(pci_dev);
623}
624
625
626
627static void pci_pm_default_suspend(struct pci_dev *pci_dev)
628{
629
630 if (!pci_has_subordinate(pci_dev))
631 pci_disable_enabled_device(pci_dev);
632}
633
634static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev)
635{
636 struct pci_driver *drv = pci_dev->driver;
637 bool ret = drv && (drv->suspend || drv->resume);
638
639
640
641
642
643
644 pci_WARN(pci_dev, ret && drv->driver.pm, "device %04x:%04x\n",
645 pci_dev->vendor, pci_dev->device);
646
647 return ret;
648}
649
650
651
652static int pci_pm_prepare(struct device *dev)
653{
654 struct pci_dev *pci_dev = to_pci_dev(dev);
655 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
656
657 if (pm && pm->prepare) {
658 int error = pm->prepare(dev);
659 if (error < 0)
660 return error;
661
662 if (!error && dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_PREPARE))
663 return 0;
664 }
665 if (pci_dev_need_resume(pci_dev))
666 return 0;
667
668
669
670
671
672 pci_dev_adjust_pme(pci_dev);
673 return 1;
674}
675
676static void pci_pm_complete(struct device *dev)
677{
678 struct pci_dev *pci_dev = to_pci_dev(dev);
679
680 pci_dev_complete_resume(pci_dev);
681 pm_generic_complete(dev);
682
683
684 if (pm_runtime_suspended(dev) && pm_resume_via_firmware()) {
685 pci_power_t pre_sleep_state = pci_dev->current_state;
686
687 pci_refresh_power_state(pci_dev);
688
689
690
691
692
693
694
695 if (pci_dev->current_state < pre_sleep_state)
696 pm_request_resume(dev);
697 }
698}
699
700#else
701
702#define pci_pm_prepare NULL
703#define pci_pm_complete NULL
704
705#endif
706
707#ifdef CONFIG_SUSPEND
708static void pcie_pme_root_status_cleanup(struct pci_dev *pci_dev)
709{
710
711
712
713
714
715 if (pci_is_pcie(pci_dev) &&
716 (pci_pcie_type(pci_dev) == PCI_EXP_TYPE_ROOT_PORT ||
717 pci_pcie_type(pci_dev) == PCI_EXP_TYPE_RC_EC))
718 pcie_clear_root_pme_status(pci_dev);
719}
720
721static int pci_pm_suspend(struct device *dev)
722{
723 struct pci_dev *pci_dev = to_pci_dev(dev);
724 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
725
726 pci_dev->skip_bus_pm = false;
727
728 if (pci_has_legacy_pm_support(pci_dev))
729 return pci_legacy_suspend(dev, PMSG_SUSPEND);
730
731 if (!pm) {
732 pci_pm_default_suspend(pci_dev);
733 return 0;
734 }
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749 if (!dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND) ||
750 pci_dev_need_resume(pci_dev)) {
751 pm_runtime_resume(dev);
752 pci_dev->state_saved = false;
753 } else {
754 pci_dev_adjust_pme(pci_dev);
755 }
756
757 if (pm->suspend) {
758 pci_power_t prev = pci_dev->current_state;
759 int error;
760
761 error = pm->suspend(dev);
762 suspend_report_result(pm->suspend, error);
763 if (error)
764 return error;
765
766 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
767 && pci_dev->current_state != PCI_UNKNOWN) {
768 pci_WARN_ONCE(pci_dev, pci_dev->current_state != prev,
769 "PCI PM: State of device not saved by %pS\n",
770 pm->suspend);
771 }
772 }
773
774 return 0;
775}
776
777static int pci_pm_suspend_late(struct device *dev)
778{
779 if (dev_pm_smart_suspend_and_suspended(dev))
780 return 0;
781
782 pci_fixup_device(pci_fixup_suspend, to_pci_dev(dev));
783
784 return pm_generic_suspend_late(dev);
785}
786
787static int pci_pm_suspend_noirq(struct device *dev)
788{
789 struct pci_dev *pci_dev = to_pci_dev(dev);
790 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
791
792 if (dev_pm_smart_suspend_and_suspended(dev)) {
793 dev->power.may_skip_resume = true;
794 return 0;
795 }
796
797 if (pci_has_legacy_pm_support(pci_dev))
798 return pci_legacy_suspend_late(dev, PMSG_SUSPEND);
799
800 if (!pm) {
801 pci_save_state(pci_dev);
802 goto Fixup;
803 }
804
805 if (pm->suspend_noirq) {
806 pci_power_t prev = pci_dev->current_state;
807 int error;
808
809 error = pm->suspend_noirq(dev);
810 suspend_report_result(pm->suspend_noirq, error);
811 if (error)
812 return error;
813
814 if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
815 && pci_dev->current_state != PCI_UNKNOWN) {
816 pci_WARN_ONCE(pci_dev, pci_dev->current_state != prev,
817 "PCI PM: State of device not saved by %pS\n",
818 pm->suspend_noirq);
819 goto Fixup;
820 }
821 }
822
823 if (pci_dev->skip_bus_pm) {
824
825
826
827
828
829
830
831
832 if (!pci_dev->state_saved)
833 pci_save_state(pci_dev);
834 } else if (!pci_dev->state_saved) {
835 pci_save_state(pci_dev);
836 if (pci_power_manageable(pci_dev))
837 pci_prepare_to_sleep(pci_dev);
838 }
839
840 pci_dbg(pci_dev, "PCI PM: Suspend power state: %s\n",
841 pci_power_name(pci_dev->current_state));
842
843 if (pci_dev->current_state == PCI_D0) {
844 pci_dev->skip_bus_pm = true;
845
846
847
848
849
850 if (pci_dev->bus->self)
851 pci_dev->bus->self->skip_bus_pm = true;
852 }
853
854 if (pci_dev->skip_bus_pm && pm_suspend_no_platform()) {
855 pci_dbg(pci_dev, "PCI PM: Skipped\n");
856 goto Fixup;
857 }
858
859 pci_pm_set_unknown_state(pci_dev);
860
861
862
863
864
865
866
867
868
869
870 if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
871 pci_write_config_word(pci_dev, PCI_COMMAND, 0);
872
873Fixup:
874 pci_fixup_device(pci_fixup_suspend_late, pci_dev);
875
876
877
878
879
880
881
882
883 dev->power.may_skip_resume = device_may_wakeup(dev) ||
884 !device_can_wakeup(dev);
885
886 return 0;
887}
888
889static int pci_pm_resume_noirq(struct device *dev)
890{
891 struct pci_dev *pci_dev = to_pci_dev(dev);
892 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
893 pci_power_t prev_state = pci_dev->current_state;
894 bool skip_bus_pm = pci_dev->skip_bus_pm;
895
896 if (dev_pm_may_skip_resume(dev))
897 return 0;
898
899
900
901
902
903
904 if (dev_pm_smart_suspend_and_suspended(dev))
905 pm_runtime_set_active(dev);
906
907
908
909
910
911
912
913 if (!(skip_bus_pm && pm_suspend_no_platform()))
914 pci_pm_default_resume_early(pci_dev);
915
916 pci_fixup_device(pci_fixup_resume_early, pci_dev);
917 pcie_pme_root_status_cleanup(pci_dev);
918
919 if (!skip_bus_pm && prev_state == PCI_D3cold)
920 pci_bridge_wait_for_secondary_bus(pci_dev);
921
922 if (pci_has_legacy_pm_support(pci_dev))
923 return 0;
924
925 if (pm && pm->resume_noirq)
926 return pm->resume_noirq(dev);
927
928 return 0;
929}
930
931static int pci_pm_resume(struct device *dev)
932{
933 struct pci_dev *pci_dev = to_pci_dev(dev);
934 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
935
936
937
938
939
940 if (pci_dev->state_saved)
941 pci_restore_standard_config(pci_dev);
942
943 if (pci_has_legacy_pm_support(pci_dev))
944 return pci_legacy_resume(dev);
945
946 pci_pm_default_resume(pci_dev);
947
948 if (pm) {
949 if (pm->resume)
950 return pm->resume(dev);
951 } else {
952 pci_pm_reenable_device(pci_dev);
953 }
954
955 return 0;
956}
957
958#else
959
960#define pci_pm_suspend NULL
961#define pci_pm_suspend_late NULL
962#define pci_pm_suspend_noirq NULL
963#define pci_pm_resume NULL
964#define pci_pm_resume_noirq NULL
965
966#endif
967
968#ifdef CONFIG_HIBERNATE_CALLBACKS
969
970
971
972
973
974struct dev_pm_ops __weak pcibios_pm_ops;
975
976static int pci_pm_freeze(struct device *dev)
977{
978 struct pci_dev *pci_dev = to_pci_dev(dev);
979 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
980
981 if (pci_has_legacy_pm_support(pci_dev))
982 return pci_legacy_suspend(dev, PMSG_FREEZE);
983
984 if (!pm) {
985 pci_pm_default_suspend(pci_dev);
986 return 0;
987 }
988
989
990
991
992
993
994
995
996
997 pm_runtime_resume(dev);
998 pci_dev->state_saved = false;
999
1000 if (pm->freeze) {
1001 int error;
1002
1003 error = pm->freeze(dev);
1004 suspend_report_result(pm->freeze, error);
1005 if (error)
1006 return error;
1007 }
1008
1009 return 0;
1010}
1011
1012static int pci_pm_freeze_noirq(struct device *dev)
1013{
1014 struct pci_dev *pci_dev = to_pci_dev(dev);
1015 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1016
1017 if (pci_has_legacy_pm_support(pci_dev))
1018 return pci_legacy_suspend_late(dev, PMSG_FREEZE);
1019
1020 if (pm && pm->freeze_noirq) {
1021 int error;
1022
1023 error = pm->freeze_noirq(dev);
1024 suspend_report_result(pm->freeze_noirq, error);
1025 if (error)
1026 return error;
1027 }
1028
1029 if (!pci_dev->state_saved)
1030 pci_save_state(pci_dev);
1031
1032 pci_pm_set_unknown_state(pci_dev);
1033
1034 if (pcibios_pm_ops.freeze_noirq)
1035 return pcibios_pm_ops.freeze_noirq(dev);
1036
1037 return 0;
1038}
1039
1040static int pci_pm_thaw_noirq(struct device *dev)
1041{
1042 struct pci_dev *pci_dev = to_pci_dev(dev);
1043 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1044 int error;
1045
1046 if (pcibios_pm_ops.thaw_noirq) {
1047 error = pcibios_pm_ops.thaw_noirq(dev);
1048 if (error)
1049 return error;
1050 }
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061 pci_set_power_state(pci_dev, PCI_D0);
1062 pci_restore_state(pci_dev);
1063
1064 if (pci_has_legacy_pm_support(pci_dev))
1065 return 0;
1066
1067 if (pm && pm->thaw_noirq)
1068 return pm->thaw_noirq(dev);
1069
1070 return 0;
1071}
1072
1073static int pci_pm_thaw(struct device *dev)
1074{
1075 struct pci_dev *pci_dev = to_pci_dev(dev);
1076 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1077 int error = 0;
1078
1079 if (pci_has_legacy_pm_support(pci_dev))
1080 return pci_legacy_resume(dev);
1081
1082 if (pm) {
1083 if (pm->thaw)
1084 error = pm->thaw(dev);
1085 } else {
1086 pci_pm_reenable_device(pci_dev);
1087 }
1088
1089 pci_dev->state_saved = false;
1090
1091 return error;
1092}
1093
1094static int pci_pm_poweroff(struct device *dev)
1095{
1096 struct pci_dev *pci_dev = to_pci_dev(dev);
1097 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1098
1099 if (pci_has_legacy_pm_support(pci_dev))
1100 return pci_legacy_suspend(dev, PMSG_HIBERNATE);
1101
1102 if (!pm) {
1103 pci_pm_default_suspend(pci_dev);
1104 return 0;
1105 }
1106
1107
1108 if (!dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND) ||
1109 pci_dev_need_resume(pci_dev)) {
1110 pm_runtime_resume(dev);
1111 pci_dev->state_saved = false;
1112 } else {
1113 pci_dev_adjust_pme(pci_dev);
1114 }
1115
1116 if (pm->poweroff) {
1117 int error;
1118
1119 error = pm->poweroff(dev);
1120 suspend_report_result(pm->poweroff, error);
1121 if (error)
1122 return error;
1123 }
1124
1125 return 0;
1126}
1127
1128static int pci_pm_poweroff_late(struct device *dev)
1129{
1130 if (dev_pm_smart_suspend_and_suspended(dev))
1131 return 0;
1132
1133 pci_fixup_device(pci_fixup_suspend, to_pci_dev(dev));
1134
1135 return pm_generic_poweroff_late(dev);
1136}
1137
1138static int pci_pm_poweroff_noirq(struct device *dev)
1139{
1140 struct pci_dev *pci_dev = to_pci_dev(dev);
1141 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1142
1143 if (dev_pm_smart_suspend_and_suspended(dev))
1144 return 0;
1145
1146 if (pci_has_legacy_pm_support(pci_dev))
1147 return pci_legacy_suspend_late(dev, PMSG_HIBERNATE);
1148
1149 if (!pm) {
1150 pci_fixup_device(pci_fixup_suspend_late, pci_dev);
1151 return 0;
1152 }
1153
1154 if (pm->poweroff_noirq) {
1155 int error;
1156
1157 error = pm->poweroff_noirq(dev);
1158 suspend_report_result(pm->poweroff_noirq, error);
1159 if (error)
1160 return error;
1161 }
1162
1163 if (!pci_dev->state_saved && !pci_has_subordinate(pci_dev))
1164 pci_prepare_to_sleep(pci_dev);
1165
1166
1167
1168
1169
1170 if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
1171 pci_write_config_word(pci_dev, PCI_COMMAND, 0);
1172
1173 pci_fixup_device(pci_fixup_suspend_late, pci_dev);
1174
1175 if (pcibios_pm_ops.poweroff_noirq)
1176 return pcibios_pm_ops.poweroff_noirq(dev);
1177
1178 return 0;
1179}
1180
1181static int pci_pm_restore_noirq(struct device *dev)
1182{
1183 struct pci_dev *pci_dev = to_pci_dev(dev);
1184 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1185 int error;
1186
1187 if (pcibios_pm_ops.restore_noirq) {
1188 error = pcibios_pm_ops.restore_noirq(dev);
1189 if (error)
1190 return error;
1191 }
1192
1193 pci_pm_default_resume_early(pci_dev);
1194 pci_fixup_device(pci_fixup_resume_early, pci_dev);
1195
1196 if (pci_has_legacy_pm_support(pci_dev))
1197 return 0;
1198
1199 if (pm && pm->restore_noirq)
1200 return pm->restore_noirq(dev);
1201
1202 return 0;
1203}
1204
1205static int pci_pm_restore(struct device *dev)
1206{
1207 struct pci_dev *pci_dev = to_pci_dev(dev);
1208 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1209
1210
1211
1212
1213
1214 if (pci_dev->state_saved)
1215 pci_restore_standard_config(pci_dev);
1216
1217 if (pci_has_legacy_pm_support(pci_dev))
1218 return pci_legacy_resume(dev);
1219
1220 pci_pm_default_resume(pci_dev);
1221
1222 if (pm) {
1223 if (pm->restore)
1224 return pm->restore(dev);
1225 } else {
1226 pci_pm_reenable_device(pci_dev);
1227 }
1228
1229 return 0;
1230}
1231
1232#else
1233
1234#define pci_pm_freeze NULL
1235#define pci_pm_freeze_noirq NULL
1236#define pci_pm_thaw NULL
1237#define pci_pm_thaw_noirq NULL
1238#define pci_pm_poweroff NULL
1239#define pci_pm_poweroff_late NULL
1240#define pci_pm_poweroff_noirq NULL
1241#define pci_pm_restore NULL
1242#define pci_pm_restore_noirq NULL
1243
1244#endif
1245
1246#ifdef CONFIG_PM
1247
1248static int pci_pm_runtime_suspend(struct device *dev)
1249{
1250 struct pci_dev *pci_dev = to_pci_dev(dev);
1251 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1252 pci_power_t prev = pci_dev->current_state;
1253 int error;
1254
1255
1256
1257
1258
1259
1260 if (!pci_dev->driver) {
1261 pci_save_state(pci_dev);
1262 return 0;
1263 }
1264
1265 pci_dev->state_saved = false;
1266 if (pm && pm->runtime_suspend) {
1267 error = pm->runtime_suspend(dev);
1268
1269
1270
1271
1272
1273 if (error == -EBUSY || error == -EAGAIN) {
1274 pci_dbg(pci_dev, "can't suspend now (%ps returned %d)\n",
1275 pm->runtime_suspend, error);
1276 return error;
1277 } else if (error) {
1278 pci_err(pci_dev, "can't suspend (%ps returned %d)\n",
1279 pm->runtime_suspend, error);
1280 return error;
1281 }
1282 }
1283
1284 pci_fixup_device(pci_fixup_suspend, pci_dev);
1285
1286 if (pm && pm->runtime_suspend
1287 && !pci_dev->state_saved && pci_dev->current_state != PCI_D0
1288 && pci_dev->current_state != PCI_UNKNOWN) {
1289 pci_WARN_ONCE(pci_dev, pci_dev->current_state != prev,
1290 "PCI PM: State of device not saved by %pS\n",
1291 pm->runtime_suspend);
1292 return 0;
1293 }
1294
1295 if (!pci_dev->state_saved) {
1296 pci_save_state(pci_dev);
1297 pci_finish_runtime_suspend(pci_dev);
1298 }
1299
1300 return 0;
1301}
1302
1303static int pci_pm_runtime_resume(struct device *dev)
1304{
1305 struct pci_dev *pci_dev = to_pci_dev(dev);
1306 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1307 pci_power_t prev_state = pci_dev->current_state;
1308 int error = 0;
1309
1310
1311
1312
1313
1314
1315 pci_restore_standard_config(pci_dev);
1316
1317 if (!pci_dev->driver)
1318 return 0;
1319
1320 pci_fixup_device(pci_fixup_resume_early, pci_dev);
1321 pci_pm_default_resume(pci_dev);
1322
1323 if (prev_state == PCI_D3cold)
1324 pci_bridge_wait_for_secondary_bus(pci_dev);
1325
1326 if (pm && pm->runtime_resume)
1327 error = pm->runtime_resume(dev);
1328
1329 pci_dev->runtime_d3cold = false;
1330
1331 return error;
1332}
1333
1334static int pci_pm_runtime_idle(struct device *dev)
1335{
1336 struct pci_dev *pci_dev = to_pci_dev(dev);
1337 const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1338
1339
1340
1341
1342
1343 if (!pci_dev->driver)
1344 return 0;
1345
1346 if (!pm)
1347 return -ENOSYS;
1348
1349 if (pm->runtime_idle)
1350 return pm->runtime_idle(dev);
1351
1352 return 0;
1353}
1354
1355static const struct dev_pm_ops pci_dev_pm_ops = {
1356 .prepare = pci_pm_prepare,
1357 .complete = pci_pm_complete,
1358 .suspend = pci_pm_suspend,
1359 .suspend_late = pci_pm_suspend_late,
1360 .resume = pci_pm_resume,
1361 .freeze = pci_pm_freeze,
1362 .thaw = pci_pm_thaw,
1363 .poweroff = pci_pm_poweroff,
1364 .poweroff_late = pci_pm_poweroff_late,
1365 .restore = pci_pm_restore,
1366 .suspend_noirq = pci_pm_suspend_noirq,
1367 .resume_noirq = pci_pm_resume_noirq,
1368 .freeze_noirq = pci_pm_freeze_noirq,
1369 .thaw_noirq = pci_pm_thaw_noirq,
1370 .poweroff_noirq = pci_pm_poweroff_noirq,
1371 .restore_noirq = pci_pm_restore_noirq,
1372 .runtime_suspend = pci_pm_runtime_suspend,
1373 .runtime_resume = pci_pm_runtime_resume,
1374 .runtime_idle = pci_pm_runtime_idle,
1375};
1376
1377#define PCI_PM_OPS_PTR (&pci_dev_pm_ops)
1378
1379#else
1380
1381#define pci_pm_runtime_suspend NULL
1382#define pci_pm_runtime_resume NULL
1383#define pci_pm_runtime_idle NULL
1384
1385#define PCI_PM_OPS_PTR NULL
1386
1387#endif
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400int __pci_register_driver(struct pci_driver *drv, struct module *owner,
1401 const char *mod_name)
1402{
1403
1404 drv->driver.name = drv->name;
1405 drv->driver.bus = &pci_bus_type;
1406 drv->driver.owner = owner;
1407 drv->driver.mod_name = mod_name;
1408 drv->driver.groups = drv->groups;
1409
1410 spin_lock_init(&drv->dynids.lock);
1411 INIT_LIST_HEAD(&drv->dynids.list);
1412
1413
1414 return driver_register(&drv->driver);
1415}
1416EXPORT_SYMBOL(__pci_register_driver);
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428void pci_unregister_driver(struct pci_driver *drv)
1429{
1430 driver_unregister(&drv->driver);
1431 pci_free_dynids(drv);
1432}
1433EXPORT_SYMBOL(pci_unregister_driver);
1434
1435static struct pci_driver pci_compat_driver = {
1436 .name = "compat"
1437};
1438
1439
1440
1441
1442
1443
1444
1445
1446struct pci_driver *pci_dev_driver(const struct pci_dev *dev)
1447{
1448 if (dev->driver)
1449 return dev->driver;
1450 else {
1451 int i;
1452 for (i = 0; i <= PCI_ROM_RESOURCE; i++)
1453 if (dev->resource[i].flags & IORESOURCE_BUSY)
1454 return &pci_compat_driver;
1455 }
1456 return NULL;
1457}
1458EXPORT_SYMBOL(pci_dev_driver);
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469static int pci_bus_match(struct device *dev, struct device_driver *drv)
1470{
1471 struct pci_dev *pci_dev = to_pci_dev(dev);
1472 struct pci_driver *pci_drv;
1473 const struct pci_device_id *found_id;
1474
1475 if (!pci_dev->match_driver)
1476 return 0;
1477
1478 pci_drv = to_pci_driver(drv);
1479 found_id = pci_match_device(pci_drv, pci_dev);
1480 if (found_id)
1481 return 1;
1482
1483 return 0;
1484}
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498struct pci_dev *pci_dev_get(struct pci_dev *dev)
1499{
1500 if (dev)
1501 get_device(&dev->dev);
1502 return dev;
1503}
1504EXPORT_SYMBOL(pci_dev_get);
1505
1506
1507
1508
1509
1510
1511
1512
1513void pci_dev_put(struct pci_dev *dev)
1514{
1515 if (dev)
1516 put_device(&dev->dev);
1517}
1518EXPORT_SYMBOL(pci_dev_put);
1519
1520static int pci_uevent(struct device *dev, struct kobj_uevent_env *env)
1521{
1522 struct pci_dev *pdev;
1523
1524 if (!dev)
1525 return -ENODEV;
1526
1527 pdev = to_pci_dev(dev);
1528
1529 if (add_uevent_var(env, "PCI_CLASS=%04X", pdev->class))
1530 return -ENOMEM;
1531
1532 if (add_uevent_var(env, "PCI_ID=%04X:%04X", pdev->vendor, pdev->device))
1533 return -ENOMEM;
1534
1535 if (add_uevent_var(env, "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor,
1536 pdev->subsystem_device))
1537 return -ENOMEM;
1538
1539 if (add_uevent_var(env, "PCI_SLOT_NAME=%s", pci_name(pdev)))
1540 return -ENOMEM;
1541
1542 if (add_uevent_var(env, "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02X",
1543 pdev->vendor, pdev->device,
1544 pdev->subsystem_vendor, pdev->subsystem_device,
1545 (u8)(pdev->class >> 16), (u8)(pdev->class >> 8),
1546 (u8)(pdev->class)))
1547 return -ENOMEM;
1548
1549 return 0;
1550}
1551
1552#if defined(CONFIG_PCIEPORTBUS) || defined(CONFIG_EEH)
1553
1554
1555
1556
1557
1558void pci_uevent_ers(struct pci_dev *pdev, enum pci_ers_result err_type)
1559{
1560 int idx = 0;
1561 char *envp[3];
1562
1563 switch (err_type) {
1564 case PCI_ERS_RESULT_NONE:
1565 case PCI_ERS_RESULT_CAN_RECOVER:
1566 envp[idx++] = "ERROR_EVENT=BEGIN_RECOVERY";
1567 envp[idx++] = "DEVICE_ONLINE=0";
1568 break;
1569 case PCI_ERS_RESULT_RECOVERED:
1570 envp[idx++] = "ERROR_EVENT=SUCCESSFUL_RECOVERY";
1571 envp[idx++] = "DEVICE_ONLINE=1";
1572 break;
1573 case PCI_ERS_RESULT_DISCONNECT:
1574 envp[idx++] = "ERROR_EVENT=FAILED_RECOVERY";
1575 envp[idx++] = "DEVICE_ONLINE=0";
1576 break;
1577 default:
1578 break;
1579 }
1580
1581 if (idx > 0) {
1582 envp[idx++] = NULL;
1583 kobject_uevent_env(&pdev->dev.kobj, KOBJ_CHANGE, envp);
1584 }
1585}
1586#endif
1587
1588static int pci_bus_num_vf(struct device *dev)
1589{
1590 return pci_num_vf(to_pci_dev(dev));
1591}
1592
1593
1594
1595
1596
1597
1598
1599
1600static int pci_dma_configure(struct device *dev)
1601{
1602 struct device *bridge;
1603 int ret = 0;
1604
1605 bridge = pci_get_host_bridge_device(to_pci_dev(dev));
1606
1607 if (IS_ENABLED(CONFIG_OF) && bridge->parent &&
1608 bridge->parent->of_node) {
1609 ret = of_dma_configure(dev, bridge->parent->of_node, true);
1610 } else if (has_acpi_companion(bridge)) {
1611 struct acpi_device *adev = to_acpi_device_node(bridge->fwnode);
1612
1613 ret = acpi_dma_configure(dev, acpi_get_dma_attr(adev));
1614 }
1615
1616 pci_put_host_bridge_device(bridge);
1617 return ret;
1618}
1619
1620struct bus_type pci_bus_type = {
1621 .name = "pci",
1622 .match = pci_bus_match,
1623 .uevent = pci_uevent,
1624 .probe = pci_device_probe,
1625 .remove = pci_device_remove,
1626 .shutdown = pci_device_shutdown,
1627 .dev_groups = pci_dev_groups,
1628 .bus_groups = pci_bus_groups,
1629 .drv_groups = pci_drv_groups,
1630 .pm = PCI_PM_OPS_PTR,
1631 .num_vf = pci_bus_num_vf,
1632 .dma_configure = pci_dma_configure,
1633};
1634EXPORT_SYMBOL(pci_bus_type);
1635
1636#ifdef CONFIG_PCIEPORTBUS
1637static int pcie_port_bus_match(struct device *dev, struct device_driver *drv)
1638{
1639 struct pcie_device *pciedev;
1640 struct pcie_port_service_driver *driver;
1641
1642 if (drv->bus != &pcie_port_bus_type || dev->bus != &pcie_port_bus_type)
1643 return 0;
1644
1645 pciedev = to_pcie_device(dev);
1646 driver = to_service_driver(drv);
1647
1648 if (driver->service != pciedev->service)
1649 return 0;
1650
1651 if (driver->port_type != PCIE_ANY_PORT &&
1652 driver->port_type != pci_pcie_type(pciedev->port))
1653 return 0;
1654
1655 return 1;
1656}
1657
1658struct bus_type pcie_port_bus_type = {
1659 .name = "pci_express",
1660 .match = pcie_port_bus_match,
1661};
1662EXPORT_SYMBOL_GPL(pcie_port_bus_type);
1663#endif
1664
1665static int __init pci_driver_init(void)
1666{
1667 int ret;
1668
1669 ret = bus_register(&pci_bus_type);
1670 if (ret)
1671 return ret;
1672
1673#ifdef CONFIG_PCIEPORTBUS
1674 ret = bus_register(&pcie_port_bus_type);
1675 if (ret)
1676 return ret;
1677#endif
1678 dma_debug_add_bus(&pci_bus_type);
1679 return 0;
1680}
1681postcore_initcall(pci_driver_init);
1682