pci-driver.c 41.7 KB
Newer Older
1
// SPDX-License-Identifier: GPL-2.0
L
Linus Torvalds 已提交
2
/*
3 4
 * (C) Copyright 2002-2004, 2007 Greg Kroah-Hartman <greg@kroah.com>
 * (C) Copyright 2007 Novell Inc.
L
Linus Torvalds 已提交
5 6 7 8 9 10
 */

#include <linux/pci.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/device.h>
11
#include <linux/mempolicy.h>
T
Tim Schmielau 已提交
12 13
#include <linux/string.h>
#include <linux/slab.h>
14
#include <linux/sched.h>
15
#include <linux/sched/isolation.h>
16
#include <linux/cpu.h>
17
#include <linux/pm_runtime.h>
18
#include <linux/suspend.h>
19
#include <linux/kexec.h>
20 21
#include <linux/of_device.h>
#include <linux/acpi.h>
22
#include <linux/dma-map-ops.h>
L
Linus Torvalds 已提交
23
#include "pci.h"
24
#include "pcie/portdrv.h"
L
Linus Torvalds 已提交
25

26 27 28 29
struct pci_dynid {
	struct list_head node;
	struct pci_device_id id;
};
L
Linus Torvalds 已提交
30

T
Tejun Heo 已提交
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
/**
 * pci_add_dynid - add a new PCI device ID to this driver and re-probe devices
 * @drv: target pci driver
 * @vendor: PCI vendor ID
 * @device: PCI device ID
 * @subvendor: PCI subvendor ID
 * @subdevice: PCI subdevice ID
 * @class: PCI class
 * @class_mask: PCI class mask
 * @driver_data: private driver data
 *
 * Adds a new dynamic pci device ID to this driver and causes the
 * driver to probe for all devices again.  @drv must have been
 * registered prior to calling this function.
 *
 * CONTEXT:
 * Does GFP_KERNEL allocation.
 *
 * RETURNS:
 * 0 on success, -errno on failure.
 */
int pci_add_dynid(struct pci_driver *drv,
		  unsigned int vendor, unsigned int device,
		  unsigned int subvendor, unsigned int subdevice,
		  unsigned int class, unsigned int class_mask,
		  unsigned long driver_data)
{
	struct pci_dynid *dynid;

	dynid = kzalloc(sizeof(*dynid), GFP_KERNEL);
	if (!dynid)
		return -ENOMEM;

	dynid->id.vendor = vendor;
	dynid->id.device = device;
	dynid->id.subvendor = subvendor;
	dynid->id.subdevice = subdevice;
	dynid->id.class = class;
	dynid->id.class_mask = class_mask;
	dynid->id.driver_data = driver_data;
71

T
Tejun Heo 已提交
72 73 74 75
	spin_lock(&drv->dynids.lock);
	list_add_tail(&dynid->node, &drv->dynids.list);
	spin_unlock(&drv->dynids.lock);

76
	return driver_attach(&drv->driver);
T
Tejun Heo 已提交
77
}
78
EXPORT_SYMBOL_GPL(pci_add_dynid);
T
Tejun Heo 已提交
79 80 81 82

static void pci_free_dynids(struct pci_driver *drv)
{
	struct pci_dynid *dynid, *n;
83

T
Tejun Heo 已提交
84 85 86 87 88 89 90 91
	spin_lock(&drv->dynids.lock);
	list_for_each_entry_safe(dynid, n, &drv->dynids.list, node) {
		list_del(&dynid->node);
		kfree(dynid);
	}
	spin_unlock(&drv->dynids.lock);
}

92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
/**
 * pci_match_id - See if a PCI device matches a given pci_id table
 * @ids: array of PCI device ID structures to search in
 * @dev: the PCI device structure to match against.
 *
 * Used by a driver to check whether a PCI device is in its list of
 * supported devices.  Returns the matching pci_device_id structure or
 * %NULL if there is no match.
 *
 * Deprecated; don't use this as it will not catch any dynamic IDs
 * that a driver might want to check for.
 */
const struct pci_device_id *pci_match_id(const struct pci_device_id *ids,
					 struct pci_dev *dev)
{
	if (ids) {
		while (ids->vendor || ids->subvendor || ids->class_mask) {
			if (pci_match_one_device(ids, dev))
				return ids;
			ids++;
		}
	}
	return NULL;
}
EXPORT_SYMBOL(pci_match_id);

static const struct pci_device_id pci_device_id_any = {
	.vendor = PCI_ANY_ID,
	.device = PCI_ANY_ID,
	.subvendor = PCI_ANY_ID,
	.subdevice = PCI_ANY_ID,
};

/**
 * pci_match_device - See if a device matches a driver's list of IDs
 * @drv: the PCI driver to match against
 * @dev: the PCI device structure to match against
 *
 * Used by a driver to check whether a PCI device is in its list of
 * supported devices or in the dynids list, which may have been augmented
 * via the sysfs "new_id" file.  Returns the matching pci_device_id
 * structure or %NULL if there is no match.
 */
static const struct pci_device_id *pci_match_device(struct pci_driver *drv,
						    struct pci_dev *dev)
{
	struct pci_dynid *dynid;
	const struct pci_device_id *found_id = NULL;

	/* When driver_override is set, only bind to the matching driver */
	if (dev->driver_override && strcmp(dev->driver_override, drv->name))
		return NULL;

	/* Look at the dynamic ids first, before the static ones */
	spin_lock(&drv->dynids.lock);
	list_for_each_entry(dynid, &drv->dynids.list, node) {
		if (pci_match_one_device(&dynid->id, dev)) {
			found_id = &dynid->id;
			break;
		}
	}
	spin_unlock(&drv->dynids.lock);

	if (!found_id)
		found_id = pci_match_id(drv->id_table, dev);

	/* driver_override will always match, send a dummy id */
	if (!found_id && dev->driver_override)
		found_id = &pci_device_id_any;

	return found_id;
}

L
Linus Torvalds 已提交
165
/**
M
Mauro Carvalho Chehab 已提交
166
 * new_id_store - sysfs frontend to pci_add_dynid()
R
Randy Dunlap 已提交
167 168 169
 * @driver: target device driver
 * @buf: buffer for scanning device ID data
 * @count: input size
L
Linus Torvalds 已提交
170
 *
T
Tejun Heo 已提交
171
 * Allow PCI IDs to be added to an existing driver via sysfs.
L
Linus Torvalds 已提交
172
 */
173
static ssize_t new_id_store(struct device_driver *driver, const char *buf,
R
Ryan Desfosses 已提交
174
			    size_t count)
L
Linus Torvalds 已提交
175 176
{
	struct pci_driver *pdrv = to_pci_driver(driver);
177
	const struct pci_device_id *ids = pdrv->id_table;
178
	u32 vendor, device, subvendor = PCI_ANY_ID,
R
Ryan Desfosses 已提交
179 180 181
		subdevice = PCI_ANY_ID, class = 0, class_mask = 0;
	unsigned long driver_data = 0;
	int fields = 0;
182
	int retval = 0;
L
Linus Torvalds 已提交
183

184
	fields = sscanf(buf, "%x %x %x %x %x %x %lx",
L
Linus Torvalds 已提交
185 186
			&vendor, &device, &subvendor, &subdevice,
			&class, &class_mask, &driver_data);
187
	if (fields < 2)
L
Linus Torvalds 已提交
188 189
		return -EINVAL;

190 191 192 193 194 195 196 197 198 199 200
	if (fields != 7) {
		struct pci_dev *pdev = kzalloc(sizeof(*pdev), GFP_KERNEL);
		if (!pdev)
			return -ENOMEM;

		pdev->vendor = vendor;
		pdev->device = device;
		pdev->subsystem_vendor = subvendor;
		pdev->subsystem_device = subdevice;
		pdev->class = class;

201
		if (pci_match_device(pdrv, pdev))
202 203 204 205 206 207 208 209
			retval = -EEXIST;

		kfree(pdev);

		if (retval)
			return retval;
	}

210 211
	/* Only accept driver_data values that match an existing id_table
	   entry */
212 213 214 215 216 217 218 219
	if (ids) {
		retval = -EINVAL;
		while (ids->vendor || ids->subvendor || ids->class_mask) {
			if (driver_data == ids->driver_data) {
				retval = 0;
				break;
			}
			ids++;
220
		}
221 222
		if (retval)	/* No match */
			return retval;
223 224
	}

T
Tejun Heo 已提交
225 226
	retval = pci_add_dynid(pdrv, vendor, device, subvendor, subdevice,
			       class, class_mask, driver_data);
227 228
	if (retval)
		return retval;
L
Linus Torvalds 已提交
229 230
	return count;
}
231
static DRIVER_ATTR_WO(new_id);
L
Linus Torvalds 已提交
232

C
Chris Wright 已提交
233
/**
M
Mauro Carvalho Chehab 已提交
234
 * remove_id_store - remove a PCI device ID from this driver
C
Chris Wright 已提交
235 236 237 238 239 240
 * @driver: target device driver
 * @buf: buffer for scanning device ID data
 * @count: input size
 *
 * Removes a dynamic pci device ID to this driver.
 */
241
static ssize_t remove_id_store(struct device_driver *driver, const char *buf,
R
Ryan Desfosses 已提交
242
			       size_t count)
C
Chris Wright 已提交
243 244 245
{
	struct pci_dynid *dynid, *n;
	struct pci_driver *pdrv = to_pci_driver(driver);
246
	u32 vendor, device, subvendor = PCI_ANY_ID,
C
Chris Wright 已提交
247 248
		subdevice = PCI_ANY_ID, class = 0, class_mask = 0;
	int fields = 0;
249
	size_t retval = -ENODEV;
C
Chris Wright 已提交
250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266

	fields = sscanf(buf, "%x %x %x %x %x %x",
			&vendor, &device, &subvendor, &subdevice,
			&class, &class_mask);
	if (fields < 2)
		return -EINVAL;

	spin_lock(&pdrv->dynids.lock);
	list_for_each_entry_safe(dynid, n, &pdrv->dynids.list, node) {
		struct pci_device_id *id = &dynid->id;
		if ((id->vendor == vendor) &&
		    (id->device == device) &&
		    (subvendor == PCI_ANY_ID || id->subvendor == subvendor) &&
		    (subdevice == PCI_ANY_ID || id->subdevice == subdevice) &&
		    !((id->class ^ class) & class_mask)) {
			list_del(&dynid->node);
			kfree(dynid);
267
			retval = count;
C
Chris Wright 已提交
268 269 270 271 272
			break;
		}
	}
	spin_unlock(&pdrv->dynids.lock);

273
	return retval;
C
Chris Wright 已提交
274
}
275
static DRIVER_ATTR_WO(remove_id);
C
Chris Wright 已提交
276

277 278 279 280
static struct attribute *pci_drv_attrs[] = {
	&driver_attr_new_id.attr,
	&driver_attr_remove_id.attr,
	NULL,
281
};
282
ATTRIBUTE_GROUPS(pci_drv);
C
Chris Wright 已提交
283

284 285 286 287 288 289 290 291 292
struct drv_dev_and_id {
	struct pci_driver *drv;
	struct pci_dev *dev;
	const struct pci_device_id *id;
};

static long local_pci_probe(void *_ddi)
{
	struct drv_dev_and_id *ddi = _ddi;
293 294 295
	struct pci_dev *pci_dev = ddi->dev;
	struct pci_driver *pci_drv = ddi->drv;
	struct device *dev = &pci_dev->dev;
296 297
	int rc;

298 299 300 301
	/*
	 * Unbound PCI devices are always put in D0, regardless of
	 * runtime PM status.  During probe, the device is set to
	 * active and the usage count is incremented.  If the driver
302 303 304 305
	 * supports runtime PM, it should call pm_runtime_put_noidle(),
	 * or any other runtime PM helper function decrementing the usage
	 * count, in its probe routine and pm_runtime_get_noresume() in
	 * its remove routine.
306
	 */
307 308 309
	pm_runtime_get_sync(dev);
	pci_dev->driver = pci_drv;
	rc = pci_drv->probe(pci_dev, ddi->id);
310 311 312
	if (!rc)
		return rc;
	if (rc < 0) {
313 314
		pci_dev->driver = NULL;
		pm_runtime_put_sync(dev);
315
		return rc;
316
	}
317 318 319 320
	/*
	 * Probe function should return < 0 for failure, 0 for success
	 * Treat values > 0 as success, but warn.
	 */
321 322
	pci_warn(pci_dev, "Driver probe function unexpectedly returned %d\n",
		 rc);
323
	return 0;
324 325
}

326 327 328 329 330 331 332 333 334
static bool pci_physfn_is_probed(struct pci_dev *dev)
{
#ifdef CONFIG_PCI_IOV
	return dev->is_virtfn && dev->physfn->is_probed;
#else
	return false;
#endif
}

335 336 337
static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
			  const struct pci_device_id *id)
{
338
	int error, node, cpu;
339
	int hk_flags = HK_FLAG_DOMAIN | HK_FLAG_WQ;
340 341
	struct drv_dev_and_id ddi = { drv, dev, id };

342 343 344 345 346
	/*
	 * Execute driver initialization on node where the device is
	 * attached.  This way the driver likely allocates its local memory
	 * on the right node.
	 */
347
	node = dev_to_node(&dev->dev);
348 349 350
	dev->is_probed = 1;

	cpu_hotplug_disable();
351 352

	/*
353 354
	 * Prevent nesting work_on_cpu() for the case where a Virtual Function
	 * device is probed from work_on_cpu() of the Physical device.
355
	 */
356 357 358 359
	if (node < 0 || node >= MAX_NUMNODES || !node_online(node) ||
	    pci_physfn_is_probed(dev))
		cpu = nr_cpu_ids;
	else
360 361
		cpu = cpumask_any_and(cpumask_of_node(node),
				      housekeeping_cpumask(hk_flags));
362 363 364 365

	if (cpu < nr_cpu_ids)
		error = work_on_cpu(cpu, local_pci_probe, &ddi);
	else
366
		error = local_pci_probe(&ddi);
367

368 369
	dev->is_probed = 0;
	cpu_hotplug_enable();
370 371 372
	return error;
}

L
Linus Torvalds 已提交
373
/**
374
 * __pci_device_probe - check if a driver wants to claim a specific PCI device
R
Randy Dunlap 已提交
375 376
 * @drv: driver to call to check if it wants the PCI device
 * @pci_dev: PCI device being probed
377
 *
R
Randy Dunlap 已提交
378
 * returns 0 on success, else error.
L
Linus Torvalds 已提交
379 380
 * side-effect: pci_dev->driver is set to drv when drv claims pci_dev.
 */
R
Ryan Desfosses 已提交
381
static int __pci_device_probe(struct pci_driver *drv, struct pci_dev *pci_dev)
382 383
{
	const struct pci_device_id *id;
L
Linus Torvalds 已提交
384 385 386
	int error = 0;

	if (!pci_dev->driver && drv->probe) {
387 388 389 390
		error = -ENODEV;

		id = pci_match_device(drv, pci_dev);
		if (id)
391
			error = pci_call_probe(drv, pci_dev, id);
L
Linus Torvalds 已提交
392 393 394 395
	}
	return error;
}

396 397 398 399 400 401 402 403 404
int __weak pcibios_alloc_irq(struct pci_dev *dev)
{
	return 0;
}

void __weak pcibios_free_irq(struct pci_dev *dev)
{
}

405 406 407
#ifdef CONFIG_PCI_IOV
static inline bool pci_device_can_probe(struct pci_dev *pdev)
{
408 409
	return (!pdev->is_virtfn || pdev->physfn->sriov->drivers_autoprobe ||
		pdev->driver_override);
410 411 412 413 414 415 416 417
}
#else
static inline bool pci_device_can_probe(struct pci_dev *pdev)
{
	return true;
}
#endif

R
Ryan Desfosses 已提交
418
static int pci_device_probe(struct device *dev)
L
Linus Torvalds 已提交
419
{
420 421 422 423
	int error;
	struct pci_dev *pci_dev = to_pci_dev(dev);
	struct pci_driver *drv = to_pci_driver(dev->driver);

424 425 426
	if (!pci_device_can_probe(pci_dev))
		return -ENODEV;

427 428
	pci_assign_irq(pci_dev);

429 430 431
	error = pcibios_alloc_irq(pci_dev);
	if (error < 0)
		return error;
L
Linus Torvalds 已提交
432 433

	pci_dev_get(pci_dev);
434 435 436 437
	error = __pci_device_probe(drv, pci_dev);
	if (error) {
		pcibios_free_irq(pci_dev);
		pci_dev_put(pci_dev);
438
	}
L
Linus Torvalds 已提交
439 440 441 442

	return error;
}

R
Ryan Desfosses 已提交
443
static int pci_device_remove(struct device *dev)
L
Linus Torvalds 已提交
444
{
R
Ryan Desfosses 已提交
445 446
	struct pci_dev *pci_dev = to_pci_dev(dev);
	struct pci_driver *drv = pci_dev->driver;
L
Linus Torvalds 已提交
447 448

	if (drv) {
449 450
		if (drv->remove) {
			pm_runtime_get_sync(dev);
L
Linus Torvalds 已提交
451
			drv->remove(pci_dev);
452 453
			pm_runtime_put_noidle(dev);
		}
454
		pcibios_free_irq(pci_dev);
L
Linus Torvalds 已提交
455
		pci_dev->driver = NULL;
456
		pci_iov_remove(pci_dev);
L
Linus Torvalds 已提交
457 458
	}

459
	/* Undo the runtime PM settings in local_pci_probe() */
460
	pm_runtime_put_sync(dev);
461

462 463 464 465 466 467 468
	/*
	 * If the device is still on, set the power state as "unknown",
	 * since it might change by the next time we load the driver.
	 */
	if (pci_dev->current_state == PCI_D0)
		pci_dev->current_state = PCI_UNKNOWN;

L
Linus Torvalds 已提交
469 470 471 472
	/*
	 * We would love to complain here if pci_dev->is_enabled is set, that
	 * the driver should have called pci_disable_device(), but the
	 * unfortunate fact is there are too many odd BIOS and bridge setups
473
	 * that don't like drivers doing that all of the time.
L
Linus Torvalds 已提交
474 475 476 477 478 479 480 481
	 * Oh well, we can dream of sane hardware when we sleep, no matter how
	 * horrible the crap we have to deal with is when we are awake...
	 */

	pci_dev_put(pci_dev);
	return 0;
}

482 483 484 485 486
static void pci_device_shutdown(struct device *dev)
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
	struct pci_driver *drv = pci_dev->driver;

H
Huang Ying 已提交
487 488
	pm_runtime_resume(dev);

489 490
	if (drv && drv->shutdown)
		drv->shutdown(pci_dev);
491

492
	/*
493 494 495 496 497
	 * If this is a kexec reboot, turn off Bus Master bit on the
	 * device to tell it to not continue to do DMA. Don't touch
	 * devices in D3cold or unknown states.
	 * If it is not a kexec reboot, firmware will hit the PCI
	 * devices with big hammer and stop their DMA any way.
498
	 */
499
	if (kexec_in_progress && (pci_dev->current_state <= PCI_D3hot))
500
		pci_clear_master(pci_dev);
501 502
}

R
Rafael J. Wysocki 已提交
503
#ifdef CONFIG_PM
504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520

/* Auxiliary functions used for system resume and run-time resume. */

/**
 * pci_restore_standard_config - restore standard config registers of PCI device
 * @pci_dev: PCI device to handle
 */
static int pci_restore_standard_config(struct pci_dev *pci_dev)
{
	pci_update_current_state(pci_dev, PCI_UNKNOWN);

	if (pci_dev->current_state != PCI_D0) {
		int error = pci_set_power_state(pci_dev, PCI_D0);
		if (error)
			return error;
	}

521
	pci_restore_state(pci_dev);
522
	pci_pme_restore(pci_dev);
523
	return 0;
524 525
}

526 527 528 529 530 531
static void pci_pm_default_resume(struct pci_dev *pci_dev)
{
	pci_fixup_device(pci_fixup_resume, pci_dev);
	pci_enable_wake(pci_dev, PCI_D0, false);
}

532 533 534 535
#endif

#ifdef CONFIG_PM_SLEEP

536 537
static void pci_pm_default_resume_early(struct pci_dev *pci_dev)
{
538
	pci_power_up(pci_dev);
539
	pci_update_current_state(pci_dev, PCI_D0);
540
	pci_restore_state(pci_dev);
541
	pci_pme_restore(pci_dev);
542 543
}

544 545 546
/*
 * Default "suspend" method for devices that have no driver provided suspend,
 * or not even a driver at all (second part).
547
 */
548
static void pci_pm_set_unknown_state(struct pci_dev *pci_dev)
549 550 551 552 553 554 555 556 557
{
	/*
	 * mark its power state as "unknown", since we don't know if
	 * e.g. the BIOS will change its device state when we suspend.
	 */
	if (pci_dev->current_state == PCI_D0)
		pci_dev->current_state = PCI_UNKNOWN;
}

558 559 560 561
/*
 * Default "resume" method for devices that have no driver provided resume,
 * or not even a driver at all (second part).
 */
562
static int pci_pm_reenable_device(struct pci_dev *pci_dev)
563 564 565
{
	int retval;

566 567 568 569 570 571 572 573 574 575 576 577 578
	/* if the device was enabled before suspend, reenable */
	retval = pci_reenable_device(pci_dev);
	/*
	 * if the device was busmaster before the suspend, make it busmaster
	 * again
	 */
	if (pci_dev->is_busmaster)
		pci_set_master(pci_dev);

	return retval;
}

static int pci_legacy_suspend(struct device *dev, pm_message_t state)
L
Linus Torvalds 已提交
579
{
R
Ryan Desfosses 已提交
580 581
	struct pci_dev *pci_dev = to_pci_dev(dev);
	struct pci_driver *drv = pci_dev->driver;
582

583
	if (drv && drv->suspend) {
584
		pci_power_t prev = pci_dev->current_state;
585
		int error;
586

587 588 589 590
		error = drv->suspend(pci_dev, state);
		suspend_report_result(drv->suspend, error);
		if (error)
			return error;
591

592
		if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
593
		    && pci_dev->current_state != PCI_UNKNOWN) {
594 595 596
			pci_WARN_ONCE(pci_dev, pci_dev->current_state != prev,
				      "PCI PM: Device state not saved by %pS\n",
				      drv->suspend);
597
		}
598
	}
599 600 601

	pci_fixup_device(pci_fixup_suspend, pci_dev);

602
	return 0;
L
Linus Torvalds 已提交
603 604
}

605
static int pci_legacy_suspend_late(struct device *dev, pm_message_t state)
L
Linus Torvalds 已提交
606
{
R
Ryan Desfosses 已提交
607
	struct pci_dev *pci_dev = to_pci_dev(dev);
608 609 610 611 612 613

	if (!pci_dev->state_saved)
		pci_save_state(pci_dev);

	pci_pm_set_unknown_state(pci_dev);

614 615
	pci_fixup_device(pci_fixup_suspend_late, pci_dev);

616
	return 0;
L
Linus Torvalds 已提交
617
}
L
Linus Torvalds 已提交
618

619
static int pci_legacy_resume(struct device *dev)
L
Linus Torvalds 已提交
620
{
R
Ryan Desfosses 已提交
621 622
	struct pci_dev *pci_dev = to_pci_dev(dev);
	struct pci_driver *drv = pci_dev->driver;
L
Linus Torvalds 已提交
623

624 625
	pci_fixup_device(pci_fixup_resume, pci_dev);

626 627
	return drv && drv->resume ?
			drv->resume(pci_dev) : pci_pm_reenable_device(pci_dev);
L
Linus Torvalds 已提交
628 629
}

630 631
/* Auxiliary functions used by the new power management framework */

632
static void pci_pm_default_suspend(struct pci_dev *pci_dev)
633
{
634
	/* Disable non-bridge devices without PM support */
635
	if (!pci_has_subordinate(pci_dev))
636
		pci_disable_enabled_device(pci_dev);
637 638
}

639 640 641
static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev)
{
	struct pci_driver *drv = pci_dev->driver;
642
	bool ret = drv && (drv->suspend || drv->resume);
643 644 645 646 647 648

	/*
	 * Legacy PM support is used by default, so warn if the new framework is
	 * supported as well.  Drivers are supposed to support either the
	 * former, or the latter, but not both at the same time.
	 */
649 650
	pci_WARN(pci_dev, ret && drv->driver.pm, "device %04x:%04x\n",
		 pci_dev->vendor, pci_dev->device);
651 652

	return ret;
653 654
}

655 656
/* New power management framework */

657 658
static int pci_pm_prepare(struct device *dev)
{
659
	struct pci_dev *pci_dev = to_pci_dev(dev);
660
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
661

662 663
	if (pm && pm->prepare) {
		int error = pm->prepare(dev);
664
		if (error < 0)
665
			return error;
666 667 668

		if (!error && dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_PREPARE))
			return 0;
669
	}
670 671 672 673 674 675 676 677 678
	if (pci_dev_need_resume(pci_dev))
		return 0;

	/*
	 * The PME setting needs to be adjusted here in case the direct-complete
	 * optimization is used with respect to this device.
	 */
	pci_dev_adjust_pme(pci_dev);
	return 1;
679 680
}

681 682
static void pci_pm_complete(struct device *dev)
{
683 684 685 686 687 688
	struct pci_dev *pci_dev = to_pci_dev(dev);

	pci_dev_complete_resume(pci_dev);
	pm_generic_complete(dev);

	/* Resume device if platform firmware has put it in reset-power-on */
689
	if (pm_runtime_suspended(dev) && pm_resume_via_firmware()) {
690 691
		pci_power_t pre_sleep_state = pci_dev->current_state;

692 693 694 695 696 697 698 699
		pci_refresh_power_state(pci_dev);
		/*
		 * On platforms with ACPI this check may also trigger for
		 * devices sharing power resources if one of those power
		 * resources has been activated as a result of a change of the
		 * power state of another device sharing it.  However, in that
		 * case it is also better to resume the device, in general.
		 */
700 701 702
		if (pci_dev->current_state < pre_sleep_state)
			pm_request_resume(dev);
	}
703
}
704

705 706 707
#else /* !CONFIG_PM_SLEEP */

#define pci_pm_prepare	NULL
708
#define pci_pm_complete	NULL
709 710 711

#endif /* !CONFIG_PM_SLEEP */

712
#ifdef CONFIG_SUSPEND
713 714 715 716 717 718 719 720
static void pcie_pme_root_status_cleanup(struct pci_dev *pci_dev)
{
	/*
	 * Some BIOSes forget to clear Root PME Status bits after system
	 * wakeup, which breaks ACPI-based runtime wakeup on PCI Express.
	 * Clear those bits now just in case (shouldn't hurt).
	 */
	if (pci_is_pcie(pci_dev) &&
721 722
	    (pci_pcie_type(pci_dev) == PCI_EXP_TYPE_ROOT_PORT ||
	     pci_pcie_type(pci_dev) == PCI_EXP_TYPE_RC_EC))
723 724
		pcie_clear_root_pme_status(pci_dev);
}
725 726 727 728

static int pci_pm_suspend(struct device *dev)
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
729
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
730

731 732
	pci_dev->skip_bus_pm = false;

733 734
	if (pci_has_legacy_pm_support(pci_dev))
		return pci_legacy_suspend(dev, PMSG_SUSPEND);
735

736 737
	if (!pm) {
		pci_pm_default_suspend(pci_dev);
738
		return 0;
739 740
	}

741
	/*
742 743 744 745 746 747 748 749 750 751 752
	 * PCI devices suspended at run time may need to be resumed at this
	 * point, because in general it may be necessary to reconfigure them for
	 * system suspend.  Namely, if the device is expected to wake up the
	 * system from the sleep state, it may have to be reconfigured for this
	 * purpose, or if the device is not expected to wake up the system from
	 * the sleep state, it should be prevented from signaling wakeup events
	 * going forward.
	 *
	 * Also if the driver of the device does not indicate that its system
	 * suspend callbacks can cope with runtime-suspended devices, it is
	 * better to resume the device from runtime suspend here.
753
	 */
754
	if (!dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND) ||
755
	    pci_dev_need_resume(pci_dev)) {
756
		pm_runtime_resume(dev);
757
		pci_dev->state_saved = false;
758 759
	} else {
		pci_dev_adjust_pme(pci_dev);
760
	}
761

762 763 764 765
	if (pm->suspend) {
		pci_power_t prev = pci_dev->current_state;
		int error;

766 767
		error = pm->suspend(dev);
		suspend_report_result(pm->suspend, error);
768 769 770
		if (error)
			return error;

771
		if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
772
		    && pci_dev->current_state != PCI_UNKNOWN) {
773 774 775
			pci_WARN_ONCE(pci_dev, pci_dev->current_state != prev,
				      "PCI PM: State of device not saved by %pS\n",
				      pm->suspend);
776
		}
777
	}
778

779
	return 0;
780 781
}

782 783
static int pci_pm_suspend_late(struct device *dev)
{
784
	if (dev_pm_skip_suspend(dev))
785 786 787 788 789 790 791
		return 0;

	pci_fixup_device(pci_fixup_suspend, to_pci_dev(dev));

	return pm_generic_suspend_late(dev);
}

792
static int pci_pm_suspend_noirq(struct device *dev)
G
Greg KH 已提交
793
{
794
	struct pci_dev *pci_dev = to_pci_dev(dev);
795
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
G
Greg KH 已提交
796

797
	if (dev_pm_skip_suspend(dev))
798 799
		return 0;

800 801 802
	if (pci_has_legacy_pm_support(pci_dev))
		return pci_legacy_suspend_late(dev, PMSG_SUSPEND);

803 804
	if (!pm) {
		pci_save_state(pci_dev);
805
		goto Fixup;
806
	}
807 808 809 810 811 812 813 814 815 816 817 818

	if (pm->suspend_noirq) {
		pci_power_t prev = pci_dev->current_state;
		int error;

		error = pm->suspend_noirq(dev);
		suspend_report_result(pm->suspend_noirq, error);
		if (error)
			return error;

		if (!pci_dev->state_saved && pci_dev->current_state != PCI_D0
		    && pci_dev->current_state != PCI_UNKNOWN) {
819 820 821
			pci_WARN_ONCE(pci_dev, pci_dev->current_state != prev,
				      "PCI PM: State of device not saved by %pS\n",
				      pm->suspend_noirq);
822
			goto Fixup;
823
		}
824 825
	}

826 827
	if (pci_dev->skip_bus_pm) {
		/*
828 829
		 * Either the device is a bridge with a child in D0 below it, or
		 * the function is running for the second time in a row without
830
		 * going through full resume, which is possible only during
831 832 833
		 * suspend-to-idle in a spurious wakeup case.  The device should
		 * be in D0 at this point, but if it is a bridge, it may be
		 * necessary to save its state.
834
		 */
835 836 837
		if (!pci_dev->state_saved)
			pci_save_state(pci_dev);
	} else if (!pci_dev->state_saved) {
838
		pci_save_state(pci_dev);
839
		if (pci_power_manageable(pci_dev))
840 841
			pci_prepare_to_sleep(pci_dev);
	}
842

843
	pci_dbg(pci_dev, "PCI PM: Suspend power state: %s\n",
844 845
		pci_power_name(pci_dev->current_state));

846 847 848 849 850 851 852 853 854 855 856
	if (pci_dev->current_state == PCI_D0) {
		pci_dev->skip_bus_pm = true;
		/*
		 * Per PCI PM r1.2, table 6-1, a bridge must be in D0 if any
		 * downstream device is in D0, so avoid changing the power state
		 * of the parent bridge by setting the skip_bus_pm flag for it.
		 */
		if (pci_dev->bus->self)
			pci_dev->bus->self->skip_bus_pm = true;
	}

857
	if (pci_dev->skip_bus_pm && pm_suspend_no_platform()) {
858
		pci_dbg(pci_dev, "PCI PM: Skipped\n");
859 860 861
		goto Fixup;
	}

862 863
	pci_pm_set_unknown_state(pci_dev);

864 865 866 867 868 869 870 871 872 873 874 875
	/*
	 * Some BIOSes from ASUS have a bug: If a USB EHCI host controller's
	 * PCI COMMAND register isn't 0, the BIOS assumes that the controller
	 * hasn't been quiesced and tries to turn it off.  If the controller
	 * is already in D3, this can hang or cause memory corruption.
	 *
	 * Since the value of the COMMAND register doesn't matter once the
	 * device has been suspended, we can safely set it to 0 here.
	 */
	if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
		pci_write_config_word(pci_dev, PCI_COMMAND, 0);

876 877 878
Fixup:
	pci_fixup_device(pci_fixup_suspend_late, pci_dev);

879 880 881 882 883 884 885
	/*
	 * If the target system sleep state is suspend-to-idle, it is sufficient
	 * to check whether or not the device's wakeup settings are good for
	 * runtime PM.  Otherwise, the pm_resume_via_firmware() check will cause
	 * pci_pm_complete() to take care of fixing up the device's state
	 * anyway, if need be.
	 */
886 887
	if (device_can_wakeup(dev) && !device_may_wakeup(dev))
		dev->power.may_skip_resume = false;
888

889
	return 0;
G
Greg KH 已提交
890
}
L
Linus Torvalds 已提交
891

892
static int pci_pm_resume_noirq(struct device *dev)
893 894
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
895
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
896 897
	pci_power_t prev_state = pci_dev->current_state;
	bool skip_bus_pm = pci_dev->skip_bus_pm;
898

899
	if (dev_pm_skip_resume(dev))
900 901
		return 0;

902 903 904
	/*
	 * In the suspend-to-idle case, devices left in D0 during suspend will
	 * stay in D0, so it is not necessary to restore or update their
905 906
	 * configuration here and attempting to put them into D0 again is
	 * pointless, so avoid doing that.
907
	 */
908
	if (!(skip_bus_pm && pm_suspend_no_platform()))
909 910 911
		pci_pm_default_resume_early(pci_dev);

	pci_fixup_device(pci_fixup_resume_early, pci_dev);
912
	pcie_pme_root_status_cleanup(pci_dev);
913

914 915 916
	if (!skip_bus_pm && prev_state == PCI_D3cold)
		pci_bridge_wait_for_secondary_bus(pci_dev);

917
	if (pci_has_legacy_pm_support(pci_dev))
918
		return 0;
919

920 921
	if (pm && pm->resume_noirq)
		return pm->resume_noirq(dev);
922

923
	return 0;
924 925
}

926 927
static int pci_pm_resume_early(struct device *dev)
{
928
	if (dev_pm_skip_resume(dev))
929 930 931 932 933
		return 0;

	return pm_generic_resume_early(dev);
}

934
static int pci_pm_resume(struct device *dev)
935
{
936
	struct pci_dev *pci_dev = to_pci_dev(dev);
937
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
938

939 940 941 942 943 944 945
	/*
	 * This is necessary for the suspend error path in which resume is
	 * called without restoring the standard config registers of the device.
	 */
	if (pci_dev->state_saved)
		pci_restore_standard_config(pci_dev);

946
	if (pci_has_legacy_pm_support(pci_dev))
947
		return pci_legacy_resume(dev);
948

949
	pci_pm_default_resume(pci_dev);
950

951 952
	if (pm) {
		if (pm->resume)
953
			return pm->resume(dev);
954 955 956
	} else {
		pci_pm_reenable_device(pci_dev);
	}
957

958
	return 0;
959 960 961 962 963
}

#else /* !CONFIG_SUSPEND */

#define pci_pm_suspend		NULL
964
#define pci_pm_suspend_late	NULL
965 966
#define pci_pm_suspend_noirq	NULL
#define pci_pm_resume		NULL
967
#define pci_pm_resume_early	NULL
968 969 970 971
#define pci_pm_resume_noirq	NULL

#endif /* !CONFIG_SUSPEND */

972
#ifdef CONFIG_HIBERNATE_CALLBACKS
973 974 975 976

static int pci_pm_freeze(struct device *dev)
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
977
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
978

979 980
	if (pci_has_legacy_pm_support(pci_dev))
		return pci_legacy_suspend(dev, PMSG_FREEZE);
981

982 983 984
	if (!pm) {
		pci_pm_default_suspend(pci_dev);
		return 0;
985 986
	}

987
	/*
988 989 990 991 992 993
	 * Resume all runtime-suspended devices before creating a snapshot
	 * image of system memory, because the restore kernel generally cannot
	 * be expected to always handle them consistently and they need to be
	 * put into the runtime-active metastate during system resume anyway,
	 * so it is better to ensure that the state saved in the image will be
	 * always consistent with that.
994
	 */
995 996
	pm_runtime_resume(dev);
	pci_dev->state_saved = false;
997

998 999 1000 1001 1002 1003 1004 1005 1006 1007
	if (pm->freeze) {
		int error;

		error = pm->freeze(dev);
		suspend_report_result(pm->freeze, error);
		if (error)
			return error;
	}

	return 0;
1008 1009 1010 1011
}

static int pci_pm_freeze_noirq(struct device *dev)
{
1012
	struct pci_dev *pci_dev = to_pci_dev(dev);
1013
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1014

1015 1016 1017
	if (pci_has_legacy_pm_support(pci_dev))
		return pci_legacy_suspend_late(dev, PMSG_FREEZE);

1018
	if (pm && pm->freeze_noirq) {
1019 1020
		int error;

1021 1022
		error = pm->freeze_noirq(dev);
		suspend_report_result(pm->freeze_noirq, error);
1023 1024
		if (error)
			return error;
1025 1026
	}

1027 1028
	if (!pci_dev->state_saved)
		pci_save_state(pci_dev);
1029

1030 1031 1032
	pci_pm_set_unknown_state(pci_dev);

	return 0;
1033 1034
}

1035
static int pci_pm_thaw_noirq(struct device *dev)
1036
{
1037
	struct pci_dev *pci_dev = to_pci_dev(dev);
1038
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1039

1040
	/*
1041 1042
	 * The pm->thaw_noirq() callback assumes the device has been
	 * returned to D0 and its config state has been restored.
1043 1044 1045 1046 1047
	 *
	 * In addition, pci_restore_state() restores MSI-X state in MMIO
	 * space, which requires the device to be in D0, so return it to D0
	 * in case the driver's "freeze" callbacks put it into a low-power
	 * state.
1048 1049
	 */
	pci_set_power_state(pci_dev, PCI_D0);
1050
	pci_restore_state(pci_dev);
1051

1052
	if (pci_has_legacy_pm_support(pci_dev))
1053
		return 0;
1054

1055 1056
	if (pm && pm->thaw_noirq)
		return pm->thaw_noirq(dev);
1057

1058
	return 0;
1059 1060
}

1061
static int pci_pm_thaw(struct device *dev)
1062
{
1063
	struct pci_dev *pci_dev = to_pci_dev(dev);
1064
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1065 1066
	int error = 0;

1067
	if (pci_has_legacy_pm_support(pci_dev))
1068
		return pci_legacy_resume(dev);
1069

1070 1071 1072 1073 1074 1075
	if (pm) {
		if (pm->thaw)
			error = pm->thaw(dev);
	} else {
		pci_pm_reenable_device(pci_dev);
	}
1076

1077 1078
	pci_dev->state_saved = false;

1079 1080 1081 1082 1083
	return error;
}

static int pci_pm_poweroff(struct device *dev)
{
1084
	struct pci_dev *pci_dev = to_pci_dev(dev);
1085
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1086

1087 1088
	if (pci_has_legacy_pm_support(pci_dev))
		return pci_legacy_suspend(dev, PMSG_HIBERNATE);
1089

1090 1091
	if (!pm) {
		pci_pm_default_suspend(pci_dev);
1092
		return 0;
1093 1094
	}

1095
	/* The reason to do that is the same as in pci_pm_suspend(). */
1096
	if (!dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND) ||
1097
	    pci_dev_need_resume(pci_dev)) {
1098
		pm_runtime_resume(dev);
1099 1100 1101 1102
		pci_dev->state_saved = false;
	} else {
		pci_dev_adjust_pme(pci_dev);
	}
1103

1104
	if (pm->poweroff) {
1105 1106
		int error;

1107 1108
		error = pm->poweroff(dev);
		suspend_report_result(pm->poweroff, error);
1109 1110
		if (error)
			return error;
1111 1112
	}

1113
	return 0;
1114
}
1115

1116 1117
static int pci_pm_poweroff_late(struct device *dev)
{
1118
	if (dev_pm_skip_suspend(dev))
1119
		return 0;
1120

1121 1122 1123
	pci_fixup_device(pci_fixup_suspend, to_pci_dev(dev));

	return pm_generic_poweroff_late(dev);
1124 1125 1126 1127
}

static int pci_pm_poweroff_noirq(struct device *dev)
{
1128
	struct pci_dev *pci_dev = to_pci_dev(dev);
1129
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1130

1131
	if (dev_pm_skip_suspend(dev))
1132 1133
		return 0;

1134
	if (pci_has_legacy_pm_support(pci_dev))
1135 1136
		return pci_legacy_suspend_late(dev, PMSG_HIBERNATE);

1137
	if (!pm) {
1138
		pci_fixup_device(pci_fixup_suspend_late, pci_dev);
1139
		return 0;
1140
	}
1141

1142
	if (pm->poweroff_noirq) {
1143 1144
		int error;

1145 1146
		error = pm->poweroff_noirq(dev);
		suspend_report_result(pm->poweroff_noirq, error);
1147 1148
		if (error)
			return error;
1149 1150
	}

1151
	if (!pci_dev->state_saved && !pci_has_subordinate(pci_dev))
1152 1153
		pci_prepare_to_sleep(pci_dev);

1154 1155 1156 1157 1158 1159 1160
	/*
	 * The reason for doing this here is the same as for the analogous code
	 * in pci_pm_suspend_noirq().
	 */
	if (pci_dev->class == PCI_CLASS_SERIAL_USB_EHCI)
		pci_write_config_word(pci_dev, PCI_COMMAND, 0);

1161 1162
	pci_fixup_device(pci_fixup_suspend_late, pci_dev);

1163
	return 0;
1164 1165
}

1166
static int pci_pm_restore_noirq(struct device *dev)
1167 1168
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
1169
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1170

1171
	pci_pm_default_resume_early(pci_dev);
1172
	pci_fixup_device(pci_fixup_resume_early, pci_dev);
1173

1174
	if (pci_has_legacy_pm_support(pci_dev))
1175
		return 0;
1176

1177 1178
	if (pm && pm->restore_noirq)
		return pm->restore_noirq(dev);
1179

1180
	return 0;
1181 1182
}

1183
static int pci_pm_restore(struct device *dev)
1184 1185
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
1186
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1187

1188 1189 1190 1191 1192 1193 1194
	/*
	 * This is necessary for the hibernation error path in which restore is
	 * called without restoring the standard config registers of the device.
	 */
	if (pci_dev->state_saved)
		pci_restore_standard_config(pci_dev);

1195
	if (pci_has_legacy_pm_support(pci_dev))
1196
		return pci_legacy_resume(dev);
1197

1198
	pci_pm_default_resume(pci_dev);
1199

1200 1201
	if (pm) {
		if (pm->restore)
1202
			return pm->restore(dev);
1203 1204 1205
	} else {
		pci_pm_reenable_device(pci_dev);
	}
1206

1207
	return 0;
G
Greg KH 已提交
1208
}
L
Linus Torvalds 已提交
1209

1210
#else /* !CONFIG_HIBERNATE_CALLBACKS */
1211 1212 1213 1214 1215 1216

#define pci_pm_freeze		NULL
#define pci_pm_freeze_noirq	NULL
#define pci_pm_thaw		NULL
#define pci_pm_thaw_noirq	NULL
#define pci_pm_poweroff		NULL
1217
#define pci_pm_poweroff_late	NULL
1218 1219 1220 1221
#define pci_pm_poweroff_noirq	NULL
#define pci_pm_restore		NULL
#define pci_pm_restore_noirq	NULL

1222
#endif /* !CONFIG_HIBERNATE_CALLBACKS */
1223

1224
#ifdef CONFIG_PM
1225 1226 1227 1228 1229 1230 1231 1232

static int pci_pm_runtime_suspend(struct device *dev)
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
	pci_power_t prev = pci_dev->current_state;
	int error;

1233
	/*
1234 1235 1236
	 * If pci_dev->driver is not set (unbound), we leave the device in D0,
	 * but it may go to D3cold when the bridge above it runtime suspends.
	 * Save its config space in case that happens.
1237
	 */
1238 1239
	if (!pci_dev->driver) {
		pci_save_state(pci_dev);
1240
		return 0;
1241
	}
1242

1243
	pci_dev->state_saved = false;
1244 1245
	if (pm && pm->runtime_suspend) {
		error = pm->runtime_suspend(dev);
1246 1247 1248 1249 1250
		/*
		 * -EBUSY and -EAGAIN is used to request the runtime PM core
		 * to schedule a new suspend, so log the event only with debug
		 * log level.
		 */
1251
		if (error == -EBUSY || error == -EAGAIN) {
1252
			pci_dbg(pci_dev, "can't suspend now (%ps returned %d)\n",
1253
				pm->runtime_suspend, error);
1254 1255
			return error;
		} else if (error) {
1256
			pci_err(pci_dev, "can't suspend (%ps returned %d)\n",
1257
				pm->runtime_suspend, error);
1258 1259
			return error;
		}
1260
	}
1261 1262 1263

	pci_fixup_device(pci_fixup_suspend, pci_dev);

1264 1265
	if (pm && pm->runtime_suspend
	    && !pci_dev->state_saved && pci_dev->current_state != PCI_D0
1266
	    && pci_dev->current_state != PCI_UNKNOWN) {
1267 1268 1269
		pci_WARN_ONCE(pci_dev, pci_dev->current_state != prev,
			      "PCI PM: State of device not saved by %pS\n",
			      pm->runtime_suspend);
1270 1271 1272
		return 0;
	}

1273
	if (!pci_dev->state_saved) {
1274
		pci_save_state(pci_dev);
1275 1276
		pci_finish_runtime_suspend(pci_dev);
	}
1277 1278 1279 1280 1281 1282 1283 1284

	return 0;
}

static int pci_pm_runtime_resume(struct device *dev)
{
	struct pci_dev *pci_dev = to_pci_dev(dev);
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;
1285
	pci_power_t prev_state = pci_dev->current_state;
1286
	int error = 0;
1287

1288
	/*
1289 1290 1291
	 * Restoring config space is necessary even if the device is not bound
	 * to a driver because although we left it in D0, it may have gone to
	 * D3cold when the bridge above it runtime suspended.
1292
	 */
1293 1294
	pci_restore_standard_config(pci_dev);

1295 1296 1297
	if (!pci_dev->driver)
		return 0;

1298
	pci_fixup_device(pci_fixup_resume_early, pci_dev);
1299
	pci_pm_default_resume(pci_dev);
1300

1301 1302 1303
	if (prev_state == PCI_D3cold)
		pci_bridge_wait_for_secondary_bus(pci_dev);

1304
	if (pm && pm->runtime_resume)
1305
		error = pm->runtime_resume(dev);
1306 1307 1308

	pci_dev->runtime_d3cold = false;

1309
	return error;
1310 1311 1312 1313
}

static int pci_pm_runtime_idle(struct device *dev)
{
1314
	struct pci_dev *pci_dev = to_pci_dev(dev);
1315 1316
	const struct dev_pm_ops *pm = dev->driver ? dev->driver->pm : NULL;

1317 1318 1319 1320 1321
	/*
	 * If pci_dev->driver is not set (unbound), the device should
	 * always remain in D0 regardless of the runtime PM status
	 */
	if (!pci_dev->driver)
1322
		return 0;
1323

1324 1325 1326
	if (!pm)
		return -ENOSYS;

1327
	if (pm->runtime_idle)
1328
		return pm->runtime_idle(dev);
1329

1330
	return 0;
1331 1332
}

S
Sachin Kamat 已提交
1333
static const struct dev_pm_ops pci_dev_pm_ops = {
1334
	.prepare = pci_pm_prepare,
1335
	.complete = pci_pm_complete,
1336
	.suspend = pci_pm_suspend,
1337
	.suspend_late = pci_pm_suspend_late,
1338
	.resume = pci_pm_resume,
1339
	.resume_early = pci_pm_resume_early,
1340 1341 1342
	.freeze = pci_pm_freeze,
	.thaw = pci_pm_thaw,
	.poweroff = pci_pm_poweroff,
1343
	.poweroff_late = pci_pm_poweroff_late,
1344
	.restore = pci_pm_restore,
1345 1346 1347 1348 1349 1350
	.suspend_noirq = pci_pm_suspend_noirq,
	.resume_noirq = pci_pm_resume_noirq,
	.freeze_noirq = pci_pm_freeze_noirq,
	.thaw_noirq = pci_pm_thaw_noirq,
	.poweroff_noirq = pci_pm_poweroff_noirq,
	.restore_noirq = pci_pm_restore_noirq,
1351 1352 1353
	.runtime_suspend = pci_pm_runtime_suspend,
	.runtime_resume = pci_pm_runtime_resume,
	.runtime_idle = pci_pm_runtime_idle,
1354 1355
};

1356
#define PCI_PM_OPS_PTR	(&pci_dev_pm_ops)
1357

1358 1359 1360 1361 1362
#else /* !CONFIG_PM */

#define pci_pm_runtime_suspend	NULL
#define pci_pm_runtime_resume	NULL
#define pci_pm_runtime_idle	NULL
1363 1364 1365

#define PCI_PM_OPS_PTR	NULL

1366
#endif /* !CONFIG_PM */
1367

L
Linus Torvalds 已提交
1368
/**
1369
 * __pci_register_driver - register a new pci driver
L
Linus Torvalds 已提交
1370
 * @drv: the driver structure to register
1371
 * @owner: owner module of drv
1372
 * @mod_name: module name string
1373
 *
L
Linus Torvalds 已提交
1374
 * Adds the driver structure to the list of registered drivers.
1375 1376
 * Returns a negative value on error, otherwise 0.
 * If no error occurred, the driver remains registered even if
L
Linus Torvalds 已提交
1377 1378
 * no device was claimed during registration.
 */
1379 1380
int __pci_register_driver(struct pci_driver *drv, struct module *owner,
			  const char *mod_name)
L
Linus Torvalds 已提交
1381 1382 1383 1384
{
	/* initialize common driver fields */
	drv->driver.name = drv->name;
	drv->driver.bus = &pci_bus_type;
1385
	drv->driver.owner = owner;
1386
	drv->driver.mod_name = mod_name;
1387
	drv->driver.groups = drv->groups;
A
Alan Cox 已提交
1388

1389 1390
	spin_lock_init(&drv->dynids.lock);
	INIT_LIST_HEAD(&drv->dynids.list);
L
Linus Torvalds 已提交
1391 1392

	/* register with core */
1393
	return driver_register(&drv->driver);
L
Linus Torvalds 已提交
1394
}
1395
EXPORT_SYMBOL(__pci_register_driver);
L
Linus Torvalds 已提交
1396 1397 1398 1399

/**
 * pci_unregister_driver - unregister a pci driver
 * @drv: the driver structure to unregister
1400
 *
L
Linus Torvalds 已提交
1401 1402 1403 1404 1405 1406
 * Deletes the driver structure from the list of registered PCI drivers,
 * gives it a chance to clean up by calling its remove() function for
 * each device it was responsible for, and marks those devices as
 * driverless.
 */

R
Ryan Desfosses 已提交
1407
void pci_unregister_driver(struct pci_driver *drv)
L
Linus Torvalds 已提交
1408 1409 1410 1411
{
	driver_unregister(&drv->driver);
	pci_free_dynids(drv);
}
1412
EXPORT_SYMBOL(pci_unregister_driver);
L
Linus Torvalds 已提交
1413 1414 1415 1416 1417 1418 1419 1420 1421

static struct pci_driver pci_compat_driver = {
	.name = "compat"
};

/**
 * pci_dev_driver - get the pci_driver of a device
 * @dev: the device to query
 *
1422
 * Returns the appropriate pci_driver structure or %NULL if there is no
L
Linus Torvalds 已提交
1423 1424
 * registered driver for the device.
 */
R
Ryan Desfosses 已提交
1425
struct pci_driver *pci_dev_driver(const struct pci_dev *dev)
L
Linus Torvalds 已提交
1426 1427 1428 1429 1430
{
	if (dev->driver)
		return dev->driver;
	else {
		int i;
R
Ryan Desfosses 已提交
1431
		for (i = 0; i <= PCI_ROM_RESOURCE; i++)
L
Linus Torvalds 已提交
1432 1433 1434 1435 1436
			if (dev->resource[i].flags & IORESOURCE_BUSY)
				return &pci_compat_driver;
	}
	return NULL;
}
1437
EXPORT_SYMBOL(pci_dev_driver);
L
Linus Torvalds 已提交
1438 1439 1440 1441

/**
 * pci_bus_match - Tell if a PCI device structure has a matching PCI device id structure
 * @dev: the PCI device structure to match against
R
Randy Dunlap 已提交
1442
 * @drv: the device driver to search for matching PCI device id structures
1443
 *
L
Linus Torvalds 已提交
1444
 * Used by a driver to check whether a PCI device present in the
R
Randy Dunlap 已提交
1445
 * system is in its list of supported devices. Returns the matching
L
Linus Torvalds 已提交
1446 1447
 * pci_device_id structure or %NULL if there is no match.
 */
1448
static int pci_bus_match(struct device *dev, struct device_driver *drv)
L
Linus Torvalds 已提交
1449
{
1450
	struct pci_dev *pci_dev = to_pci_dev(dev);
1451
	struct pci_driver *pci_drv;
L
Linus Torvalds 已提交
1452 1453
	const struct pci_device_id *found_id;

1454 1455 1456 1457
	if (!pci_dev->match_driver)
		return 0;

	pci_drv = to_pci_driver(drv);
1458
	found_id = pci_match_device(pci_drv, pci_dev);
L
Linus Torvalds 已提交
1459 1460 1461
	if (found_id)
		return 1;

1462
	return 0;
L
Linus Torvalds 已提交
1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482
}

/**
 * pci_dev_get - increments the reference count of the pci device structure
 * @dev: the device being referenced
 *
 * Each live reference to a device should be refcounted.
 *
 * Drivers for PCI devices should normally record such references in
 * their probe() methods, when they bind to a device, and release
 * them by calling pci_dev_put(), in their disconnect() methods.
 *
 * A pointer to the device with the incremented reference counter is returned.
 */
struct pci_dev *pci_dev_get(struct pci_dev *dev)
{
	if (dev)
		get_device(&dev->dev);
	return dev;
}
1483
EXPORT_SYMBOL(pci_dev_get);
L
Linus Torvalds 已提交
1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496

/**
 * pci_dev_put - release a use of the pci device structure
 * @dev: device that's been disconnected
 *
 * Must be called when a user of a device is finished with it.  When the last
 * user of the device calls this function, the memory of the device is freed.
 */
void pci_dev_put(struct pci_dev *dev)
{
	if (dev)
		put_device(&dev->dev);
}
1497
EXPORT_SYMBOL(pci_dev_put);
L
Linus Torvalds 已提交
1498

1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520
static int pci_uevent(struct device *dev, struct kobj_uevent_env *env)
{
	struct pci_dev *pdev;

	if (!dev)
		return -ENODEV;

	pdev = to_pci_dev(dev);

	if (add_uevent_var(env, "PCI_CLASS=%04X", pdev->class))
		return -ENOMEM;

	if (add_uevent_var(env, "PCI_ID=%04X:%04X", pdev->vendor, pdev->device))
		return -ENOMEM;

	if (add_uevent_var(env, "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor,
			   pdev->subsystem_device))
		return -ENOMEM;

	if (add_uevent_var(env, "PCI_SLOT_NAME=%s", pci_name(pdev)))
		return -ENOMEM;

1521
	if (add_uevent_var(env, "MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02X",
1522 1523 1524 1525 1526
			   pdev->vendor, pdev->device,
			   pdev->subsystem_vendor, pdev->subsystem_device,
			   (u8)(pdev->class >> 16), (u8)(pdev->class >> 8),
			   (u8)(pdev->class)))
		return -ENOMEM;
B
Bjorn Helgaas 已提交
1527

1528 1529 1530
	return 0;
}

1531
#if defined(CONFIG_PCIEPORTBUS) || defined(CONFIG_EEH)
1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566
/**
 * pci_uevent_ers - emit a uevent during recovery path of PCI device
 * @pdev: PCI device undergoing error recovery
 * @err_type: type of error event
 */
void pci_uevent_ers(struct pci_dev *pdev, enum pci_ers_result err_type)
{
	int idx = 0;
	char *envp[3];

	switch (err_type) {
	case PCI_ERS_RESULT_NONE:
	case PCI_ERS_RESULT_CAN_RECOVER:
		envp[idx++] = "ERROR_EVENT=BEGIN_RECOVERY";
		envp[idx++] = "DEVICE_ONLINE=0";
		break;
	case PCI_ERS_RESULT_RECOVERED:
		envp[idx++] = "ERROR_EVENT=SUCCESSFUL_RECOVERY";
		envp[idx++] = "DEVICE_ONLINE=1";
		break;
	case PCI_ERS_RESULT_DISCONNECT:
		envp[idx++] = "ERROR_EVENT=FAILED_RECOVERY";
		envp[idx++] = "DEVICE_ONLINE=0";
		break;
	default:
		break;
	}

	if (idx > 0) {
		envp[idx++] = NULL;
		kobject_uevent_env(&pdev->dev.kobj, KOBJ_CHANGE, envp);
	}
}
#endif

1567 1568 1569 1570 1571
static int pci_bus_num_vf(struct device *dev)
{
	return pci_num_vf(to_pci_dev(dev));
}

1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587
/**
 * pci_dma_configure - Setup DMA configuration
 * @dev: ptr to dev structure
 *
 * Function to update PCI devices's DMA configuration using the same
 * info from the OF node or ACPI node of host bridge's parent (if any).
 */
static int pci_dma_configure(struct device *dev)
{
	struct device *bridge;
	int ret = 0;

	bridge = pci_get_host_bridge_device(to_pci_dev(dev));

	if (IS_ENABLED(CONFIG_OF) && bridge->parent &&
	    bridge->parent->of_node) {
1588
		ret = of_dma_configure(dev, bridge->parent->of_node, true);
1589 1590 1591
	} else if (has_acpi_companion(bridge)) {
		struct acpi_device *adev = to_acpi_device_node(bridge->fwnode);

1592
		ret = acpi_dma_configure(dev, acpi_get_dma_attr(adev));
1593 1594 1595 1596 1597 1598
	}

	pci_put_host_bridge_device(bridge);
	return ret;
}

L
Linus Torvalds 已提交
1599 1600 1601
struct bus_type pci_bus_type = {
	.name		= "pci",
	.match		= pci_bus_match,
1602
	.uevent		= pci_uevent,
1603 1604
	.probe		= pci_device_probe,
	.remove		= pci_device_remove,
L
Linus Torvalds 已提交
1605
	.shutdown	= pci_device_shutdown,
1606
	.dev_groups	= pci_dev_groups,
1607
	.bus_groups	= pci_bus_groups,
1608
	.drv_groups	= pci_drv_groups,
1609
	.pm		= PCI_PM_OPS_PTR,
1610
	.num_vf		= pci_bus_num_vf,
1611
	.dma_configure	= pci_dma_configure,
L
Linus Torvalds 已提交
1612
};
1613
EXPORT_SYMBOL(pci_bus_type);
L
Linus Torvalds 已提交
1614

1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643
#ifdef CONFIG_PCIEPORTBUS
static int pcie_port_bus_match(struct device *dev, struct device_driver *drv)
{
	struct pcie_device *pciedev;
	struct pcie_port_service_driver *driver;

	if (drv->bus != &pcie_port_bus_type || dev->bus != &pcie_port_bus_type)
		return 0;

	pciedev = to_pcie_device(dev);
	driver = to_service_driver(drv);

	if (driver->service != pciedev->service)
		return 0;

	if (driver->port_type != PCIE_ANY_PORT &&
	    driver->port_type != pci_pcie_type(pciedev->port))
		return 0;

	return 1;
}

struct bus_type pcie_port_bus_type = {
	.name		= "pci_express",
	.match		= pcie_port_bus_match,
};
EXPORT_SYMBOL_GPL(pcie_port_bus_type);
#endif

L
Linus Torvalds 已提交
1644 1645
static int __init pci_driver_init(void)
{
1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656
	int ret;

	ret = bus_register(&pci_bus_type);
	if (ret)
		return ret;

#ifdef CONFIG_PCIEPORTBUS
	ret = bus_register(&pcie_port_bus_type);
	if (ret)
		return ret;
#endif
1657
	dma_debug_add_bus(&pci_bus_type);
1658
	return 0;
L
Linus Torvalds 已提交
1659 1660
}
postcore_initcall(pci_driver_init);