Linux Audio

Check our new training course

Loading...
v3.1
 
   1/*
   2 *	PCI Bus Services, see include/linux/pci.h for further explanation.
   3 *
   4 *	Copyright 1993 -- 1997 Drew Eckhardt, Frederic Potter,
   5 *	David Mosberger-Tang
   6 *
   7 *	Copyright 1997 -- 2000 Martin Mares <mj@ucw.cz>
   8 */
   9
 
  10#include <linux/kernel.h>
  11#include <linux/delay.h>
 
  12#include <linux/init.h>
 
 
  13#include <linux/pci.h>
  14#include <linux/pm.h>
  15#include <linux/slab.h>
  16#include <linux/module.h>
  17#include <linux/spinlock.h>
  18#include <linux/string.h>
  19#include <linux/log2.h>
  20#include <linux/pci-aspm.h>
  21#include <linux/pm_wakeup.h>
  22#include <linux/interrupt.h>
  23#include <linux/device.h>
  24#include <linux/pm_runtime.h>
  25#include <asm/setup.h>
 
 
 
 
  26#include "pci.h"
  27
 
 
  28const char *pci_power_names[] = {
  29	"error", "D0", "D1", "D2", "D3hot", "D3cold", "unknown",
  30};
  31EXPORT_SYMBOL_GPL(pci_power_names);
  32
 
  33int isa_dma_bridge_buggy;
  34EXPORT_SYMBOL(isa_dma_bridge_buggy);
 
  35
  36int pci_pci_problems;
  37EXPORT_SYMBOL(pci_pci_problems);
  38
  39unsigned int pci_pm_d3_delay;
  40
  41static void pci_pme_list_scan(struct work_struct *work);
  42
  43static LIST_HEAD(pci_pme_list);
  44static DEFINE_MUTEX(pci_pme_list_mutex);
  45static DECLARE_DELAYED_WORK(pci_pme_work, pci_pme_list_scan);
  46
  47struct pci_pme_device {
  48	struct list_head list;
  49	struct pci_dev *dev;
  50};
  51
  52#define PME_TIMEOUT 1000 /* How long between PME checks */
  53
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  54static void pci_dev_d3_sleep(struct pci_dev *dev)
  55{
  56	unsigned int delay = dev->d3_delay;
 
  57
  58	if (delay < pci_pm_d3_delay)
  59		delay = pci_pm_d3_delay;
 
 
 
 
 
  60
  61	msleep(delay);
 
 
  62}
  63
  64#ifdef CONFIG_PCI_DOMAINS
  65int pci_domains_supported = 1;
  66#endif
  67
  68#define DEFAULT_CARDBUS_IO_SIZE		(256)
  69#define DEFAULT_CARDBUS_MEM_SIZE	(64*1024*1024)
  70/* pci=cbmemsize=nnM,cbiosize=nn can override this */
  71unsigned long pci_cardbus_io_size = DEFAULT_CARDBUS_IO_SIZE;
  72unsigned long pci_cardbus_mem_size = DEFAULT_CARDBUS_MEM_SIZE;
  73
  74#define DEFAULT_HOTPLUG_IO_SIZE		(256)
  75#define DEFAULT_HOTPLUG_MEM_SIZE	(2*1024*1024)
  76/* pci=hpmemsize=nnM,hpiosize=nn can override this */
 
  77unsigned long pci_hotplug_io_size  = DEFAULT_HOTPLUG_IO_SIZE;
  78unsigned long pci_hotplug_mem_size = DEFAULT_HOTPLUG_MEM_SIZE;
 
 
 
 
 
 
 
 
 
 
  79
 
 
  80enum pcie_bus_config_types pcie_bus_config = PCIE_BUS_TUNE_OFF;
 
 
 
 
 
 
 
 
 
  81
  82/*
  83 * The default CLS is used if arch didn't set CLS explicitly and not
  84 * all pci devices agree on the same value.  Arch can override either
  85 * the dfl or actual value as it sees fit.  Don't forget this is
  86 * measured in 32-bit words, not bytes.
  87 */
  88u8 pci_dfl_cache_line_size __devinitdata = L1_CACHE_BYTES >> 2;
  89u8 pci_cache_line_size;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  90
  91/**
  92 * pci_bus_max_busnr - returns maximum PCI bus number of given bus' children
  93 * @bus: pointer to PCI bus structure to search
  94 *
  95 * Given a PCI bus, returns the highest PCI bus number present in the set
  96 * including the given PCI bus and its list of child PCI buses.
  97 */
  98unsigned char pci_bus_max_busnr(struct pci_bus* bus)
  99{
 100	struct list_head *tmp;
 101	unsigned char max, n;
 102
 103	max = bus->subordinate;
 104	list_for_each(tmp, &bus->children) {
 105		n = pci_bus_max_busnr(pci_bus_b(tmp));
 106		if(n > max)
 107			max = n;
 108	}
 109	return max;
 110}
 111EXPORT_SYMBOL_GPL(pci_bus_max_busnr);
 112
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 113#ifdef CONFIG_HAS_IOMEM
 114void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar)
 
 115{
 
 
 
 
 116	/*
 117	 * Make sure the BAR is actually a memory resource, not an IO resource
 118	 */
 119	if (!(pci_resource_flags(pdev, bar) & IORESOURCE_MEM)) {
 120		WARN_ON(1);
 121		return NULL;
 122	}
 123	return ioremap_nocache(pci_resource_start(pdev, bar),
 124				     pci_resource_len(pdev, bar));
 
 
 
 
 
 
 
 
 125}
 126EXPORT_SYMBOL_GPL(pci_ioremap_bar);
 
 
 
 
 
 
 127#endif
 128
 129#if 0
 130/**
 131 * pci_max_busnr - returns maximum PCI bus number
 
 
 
 
 
 
 
 
 
 
 
 
 
 132 *
 133 * Returns the highest PCI bus number present in the system global list of
 134 * PCI buses.
 135 */
 136unsigned char __devinit
 137pci_max_busnr(void)
 138{
 139	struct pci_bus *bus = NULL;
 140	unsigned char max, n;
 
 
 141
 142	max = 0;
 143	while ((bus = pci_find_next_bus(bus)) != NULL) {
 144		n = pci_bus_max_busnr(bus);
 145		if(n > max)
 146			max = n;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 147	}
 148	return max;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 149}
 150
 151#endif  /*  0  */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 152
 153#define PCI_FIND_CAP_TTL	48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 154
 155static int __pci_find_next_cap_ttl(struct pci_bus *bus, unsigned int devfn,
 156				   u8 pos, int cap, int *ttl)
 
 
 
 
 
 157{
 158	u8 id;
 
 
 
 159
 160	while ((*ttl)--) {
 161		pci_bus_read_config_byte(bus, devfn, pos, &pos);
 162		if (pos < 0x40)
 163			break;
 164		pos &= ~3;
 165		pci_bus_read_config_byte(bus, devfn, pos + PCI_CAP_LIST_ID,
 166					 &id);
 
 167		if (id == 0xff)
 168			break;
 169		if (id == cap)
 170			return pos;
 171		pos += PCI_CAP_LIST_NEXT;
 172	}
 173	return 0;
 174}
 175
 176static int __pci_find_next_cap(struct pci_bus *bus, unsigned int devfn,
 177			       u8 pos, int cap)
 178{
 179	int ttl = PCI_FIND_CAP_TTL;
 180
 181	return __pci_find_next_cap_ttl(bus, devfn, pos, cap, &ttl);
 182}
 183
 184int pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap)
 185{
 186	return __pci_find_next_cap(dev->bus, dev->devfn,
 187				   pos + PCI_CAP_LIST_NEXT, cap);
 188}
 189EXPORT_SYMBOL_GPL(pci_find_next_capability);
 190
 191static int __pci_bus_find_cap_start(struct pci_bus *bus,
 192				    unsigned int devfn, u8 hdr_type)
 193{
 194	u16 status;
 195
 196	pci_bus_read_config_word(bus, devfn, PCI_STATUS, &status);
 197	if (!(status & PCI_STATUS_CAP_LIST))
 198		return 0;
 199
 200	switch (hdr_type) {
 201	case PCI_HEADER_TYPE_NORMAL:
 202	case PCI_HEADER_TYPE_BRIDGE:
 203		return PCI_CAPABILITY_LIST;
 204	case PCI_HEADER_TYPE_CARDBUS:
 205		return PCI_CB_CAPABILITY_LIST;
 206	default:
 207		return 0;
 208	}
 209
 210	return 0;
 211}
 212
 213/**
 214 * pci_find_capability - query for devices' capabilities 
 215 * @dev: PCI device to query
 216 * @cap: capability code
 217 *
 218 * Tell if a device supports a given PCI capability.
 219 * Returns the address of the requested capability structure within the
 220 * device's PCI configuration space or 0 in case the device does not
 221 * support it.  Possible values for @cap:
 222 *
 223 *  %PCI_CAP_ID_PM           Power Management 
 224 *  %PCI_CAP_ID_AGP          Accelerated Graphics Port 
 225 *  %PCI_CAP_ID_VPD          Vital Product Data 
 226 *  %PCI_CAP_ID_SLOTID       Slot Identification 
 227 *  %PCI_CAP_ID_MSI          Message Signalled Interrupts
 228 *  %PCI_CAP_ID_CHSWP        CompactPCI HotSwap 
 229 *  %PCI_CAP_ID_PCIX         PCI-X
 230 *  %PCI_CAP_ID_EXP          PCI Express
 231 */
 232int pci_find_capability(struct pci_dev *dev, int cap)
 233{
 234	int pos;
 235
 236	pos = __pci_bus_find_cap_start(dev->bus, dev->devfn, dev->hdr_type);
 237	if (pos)
 238		pos = __pci_find_next_cap(dev->bus, dev->devfn, pos, cap);
 239
 240	return pos;
 241}
 
 242
 243/**
 244 * pci_bus_find_capability - query for devices' capabilities 
 245 * @bus:   the PCI bus to query
 246 * @devfn: PCI device to query
 247 * @cap:   capability code
 248 *
 249 * Like pci_find_capability() but works for pci devices that do not have a
 250 * pci_dev structure set up yet. 
 251 *
 252 * Returns the address of the requested capability structure within the
 253 * device's PCI configuration space or 0 in case the device does not
 254 * support it.
 255 */
 256int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap)
 257{
 258	int pos;
 259	u8 hdr_type;
 260
 261	pci_bus_read_config_byte(bus, devfn, PCI_HEADER_TYPE, &hdr_type);
 262
 263	pos = __pci_bus_find_cap_start(bus, devfn, hdr_type & 0x7f);
 264	if (pos)
 265		pos = __pci_find_next_cap(bus, devfn, pos, cap);
 266
 267	return pos;
 268}
 
 269
 270/**
 271 * pci_find_ext_capability - Find an extended capability
 272 * @dev: PCI device to query
 
 273 * @cap: capability code
 274 *
 275 * Returns the address of the requested extended capability structure
 276 * within the device's PCI configuration space or 0 if the device does
 277 * not support it.  Possible values for @cap:
 278 *
 279 *  %PCI_EXT_CAP_ID_ERR		Advanced Error Reporting
 280 *  %PCI_EXT_CAP_ID_VC		Virtual Channel
 281 *  %PCI_EXT_CAP_ID_DSN		Device Serial Number
 282 *  %PCI_EXT_CAP_ID_PWR		Power Budgeting
 283 */
 284int pci_find_ext_capability(struct pci_dev *dev, int cap)
 285{
 286	u32 header;
 287	int ttl;
 288	int pos = PCI_CFG_SPACE_SIZE;
 289
 290	/* minimum 8 bytes per capability */
 291	ttl = (PCI_CFG_SPACE_EXP_SIZE - PCI_CFG_SPACE_SIZE) / 8;
 292
 293	if (dev->cfg_size <= PCI_CFG_SPACE_SIZE)
 294		return 0;
 295
 
 
 
 296	if (pci_read_config_dword(dev, pos, &header) != PCIBIOS_SUCCESSFUL)
 297		return 0;
 298
 299	/*
 300	 * If we have no capabilities, this is indicated by cap ID,
 301	 * cap version and next pointer all being 0.
 302	 */
 303	if (header == 0)
 304		return 0;
 305
 306	while (ttl-- > 0) {
 307		if (PCI_EXT_CAP_ID(header) == cap)
 308			return pos;
 309
 310		pos = PCI_EXT_CAP_NEXT(header);
 311		if (pos < PCI_CFG_SPACE_SIZE)
 312			break;
 313
 314		if (pci_read_config_dword(dev, pos, &header) != PCIBIOS_SUCCESSFUL)
 315			break;
 316	}
 317
 318	return 0;
 319}
 320EXPORT_SYMBOL_GPL(pci_find_ext_capability);
 321
 322/**
 323 * pci_bus_find_ext_capability - find an extended capability
 324 * @bus:   the PCI bus to query
 325 * @devfn: PCI device to query
 326 * @cap:   capability code
 327 *
 328 * Like pci_find_ext_capability() but works for pci devices that do not have a
 329 * pci_dev structure set up yet.
 
 330 *
 331 * Returns the address of the requested capability structure within the
 332 * device's PCI configuration space or 0 in case the device does not
 333 * support it.
 
 334 */
 335int pci_bus_find_ext_capability(struct pci_bus *bus, unsigned int devfn,
 336				int cap)
 337{
 338	u32 header;
 339	int ttl;
 340	int pos = PCI_CFG_SPACE_SIZE;
 341
 342	/* minimum 8 bytes per capability */
 343	ttl = (PCI_CFG_SPACE_EXP_SIZE - PCI_CFG_SPACE_SIZE) / 8;
 
 
 
 
 
 
 
 
 
 
 
 
 344
 345	if (!pci_bus_read_config_dword(bus, devfn, pos, &header))
 346		return 0;
 347	if (header == 0xffffffff || header == 0)
 348		return 0;
 349
 350	while (ttl-- > 0) {
 351		if (PCI_EXT_CAP_ID(header) == cap)
 352			return pos;
 353
 354		pos = PCI_EXT_CAP_NEXT(header);
 355		if (pos < PCI_CFG_SPACE_SIZE)
 356			break;
 357
 358		if (!pci_bus_read_config_dword(bus, devfn, pos, &header))
 359			break;
 360	}
 361
 362	return 0;
 363}
 
 364
 365static int __pci_find_next_ht_cap(struct pci_dev *dev, int pos, int ht_cap)
 366{
 367	int rc, ttl = PCI_FIND_CAP_TTL;
 368	u8 cap, mask;
 369
 370	if (ht_cap == HT_CAPTYPE_SLAVE || ht_cap == HT_CAPTYPE_HOST)
 371		mask = HT_3BIT_CAP_MASK;
 372	else
 373		mask = HT_5BIT_CAP_MASK;
 374
 375	pos = __pci_find_next_cap_ttl(dev->bus, dev->devfn, pos,
 376				      PCI_CAP_ID_HT, &ttl);
 377	while (pos) {
 378		rc = pci_read_config_byte(dev, pos + 3, &cap);
 379		if (rc != PCIBIOS_SUCCESSFUL)
 380			return 0;
 381
 382		if ((cap & mask) == ht_cap)
 383			return pos;
 384
 385		pos = __pci_find_next_cap_ttl(dev->bus, dev->devfn,
 386					      pos + PCI_CAP_LIST_NEXT,
 387					      PCI_CAP_ID_HT, &ttl);
 388	}
 389
 390	return 0;
 391}
 
 392/**
 393 * pci_find_next_ht_capability - query a device's Hypertransport capabilities
 394 * @dev: PCI device to query
 395 * @pos: Position from which to continue searching
 396 * @ht_cap: Hypertransport capability code
 397 *
 398 * To be used in conjunction with pci_find_ht_capability() to search for
 399 * all capabilities matching @ht_cap. @pos should always be a value returned
 400 * from pci_find_ht_capability().
 401 *
 402 * NB. To be 100% safe against broken PCI devices, the caller should take
 403 * steps to avoid an infinite loop.
 404 */
 405int pci_find_next_ht_capability(struct pci_dev *dev, int pos, int ht_cap)
 406{
 407	return __pci_find_next_ht_cap(dev, pos + PCI_CAP_LIST_NEXT, ht_cap);
 408}
 409EXPORT_SYMBOL_GPL(pci_find_next_ht_capability);
 410
 411/**
 412 * pci_find_ht_capability - query a device's Hypertransport capabilities
 413 * @dev: PCI device to query
 414 * @ht_cap: Hypertransport capability code
 415 *
 416 * Tell if a device supports a given Hypertransport capability.
 417 * Returns an address within the device's PCI configuration space
 418 * or 0 in case the device does not support the request capability.
 419 * The address points to the PCI capability, of type PCI_CAP_ID_HT,
 420 * which has a Hypertransport capability matching @ht_cap.
 421 */
 422int pci_find_ht_capability(struct pci_dev *dev, int ht_cap)
 423{
 424	int pos;
 425
 426	pos = __pci_bus_find_cap_start(dev->bus, dev->devfn, dev->hdr_type);
 427	if (pos)
 428		pos = __pci_find_next_ht_cap(dev, pos, ht_cap);
 429
 430	return pos;
 431}
 432EXPORT_SYMBOL_GPL(pci_find_ht_capability);
 433
 434/**
 435 * pci_find_parent_resource - return resource region of parent bus of given region
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 436 * @dev: PCI device structure contains resources to be searched
 437 * @res: child resource record for which parent is sought
 438 *
 439 *  For given resource region of given device, return the resource
 440 *  region of parent bus the given region is contained in or where
 441 *  it should be allocated from.
 442 */
 443struct resource *
 444pci_find_parent_resource(const struct pci_dev *dev, struct resource *res)
 445{
 446	const struct pci_bus *bus = dev->bus;
 447	int i;
 448	struct resource *best = NULL, *r;
 449
 450	pci_bus_for_each_resource(bus, r, i) {
 451		if (!r)
 452			continue;
 453		if (res->start && !(res->start >= r->start && res->end <= r->end))
 454			continue;	/* Not contained */
 455		if ((res->flags ^ r->flags) & (IORESOURCE_IO | IORESOURCE_MEM))
 456			continue;	/* Wrong type */
 457		if (!((res->flags ^ r->flags) & IORESOURCE_PREFETCH))
 458			return r;	/* Exact match */
 459		/* We can't insert a non-prefetch resource inside a prefetchable parent .. */
 460		if (r->flags & IORESOURCE_PREFETCH)
 461			continue;
 462		/* .. but we can put a prefetchable resource inside a non-prefetchable one */
 463		if (!best)
 464			best = r;
 
 
 
 
 
 
 
 
 465	}
 466	return best;
 467}
 
 468
 469/**
 470 * pci_restore_bars - restore a devices BAR values (e.g. after wake-up)
 471 * @dev: PCI device to have its BARs restored
 
 472 *
 473 * Restore the BAR values for a given device, so as to make it
 474 * accessible by its driver.
 
 475 */
 476static void
 477pci_restore_bars(struct pci_dev *dev)
 478{
 479	int i;
 480
 481	for (i = 0; i < PCI_BRIDGE_RESOURCES; i++)
 482		pci_update_resource(dev, i);
 483}
 484
 485static struct pci_platform_pm_ops *pci_platform_pm;
 
 
 486
 487int pci_set_platform_pm(struct pci_platform_pm_ops *ops)
 
 
 
 
 
 
 
 
 
 
 
 488{
 489	if (!ops->is_manageable || !ops->set_state || !ops->choose_state
 490	    || !ops->sleep_wake || !ops->can_wakeup)
 491		return -EINVAL;
 492	pci_platform_pm = ops;
 493	return 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 494}
 495
 496static inline bool platform_pci_power_manageable(struct pci_dev *dev)
 
 
 
 
 
 
 
 
 497{
 498	return pci_platform_pm ? pci_platform_pm->is_manageable(dev) : false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 499}
 500
 501static inline int platform_pci_set_power_state(struct pci_dev *dev,
 502                                                pci_power_t t)
 
 
 
 
 503{
 504	return pci_platform_pm ? pci_platform_pm->set_state(dev, t) : -ENOSYS;
 505}
 506
 507static inline pci_power_t platform_pci_choose_state(struct pci_dev *dev)
 
 
 
 
 
 
 
 
 
 
 508{
 509	return pci_platform_pm ?
 510			pci_platform_pm->choose_state(dev) : PCI_POWER_ERROR;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 511}
 512
 513static inline bool platform_pci_can_wakeup(struct pci_dev *dev)
 
 
 
 
 
 514{
 515	return pci_platform_pm ? pci_platform_pm->can_wakeup(dev) : false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 516}
 517
 518static inline int platform_pci_sleep_wake(struct pci_dev *dev, bool enable)
 
 
 
 
 519{
 520	return pci_platform_pm ?
 521			pci_platform_pm->sleep_wake(dev, enable) : -ENODEV;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 522}
 523
 524static inline int platform_pci_run_wake(struct pci_dev *dev, bool enable)
 
 
 
 
 
 
 
 
 
 
 
 525{
 526	return pci_platform_pm ?
 527			pci_platform_pm->run_wake(dev, enable) : -ENODEV;
 
 
 
 
 
 
 
 
 
 
 528}
 
 529
 530/**
 531 * pci_raw_set_power_state - Use PCI PM registers to set the power state of
 532 *                           given PCI device
 533 * @dev: PCI device to handle.
 534 * @state: PCI power state (D0, D1, D2, D3hot) to put the device into.
 535 *
 536 * RETURN VALUE:
 537 * -EINVAL if the requested state is invalid.
 538 * -EIO if device does not support PCI PM or its PM capabilities register has a
 539 * wrong version, or device doesn't support the requested state.
 540 * 0 if device already is in the requested state.
 541 * 0 if device's power state has been successfully changed.
 542 */
 543static int pci_raw_set_power_state(struct pci_dev *dev, pci_power_t state)
 544{
 545	u16 pmcsr;
 546	bool need_restore = false;
 547
 548	/* Check if we're already there */
 549	if (dev->current_state == state)
 550		return 0;
 551
 552	if (!dev->pm_cap)
 553		return -EIO;
 
 
 554
 555	if (state < PCI_D0 || state > PCI_D3hot)
 556		return -EINVAL;
 557
 558	/* Validate current state:
 559	 * Can enter D0 from any state, but if we can only go deeper 
 560	 * to sleep if we're already in a low power state
 561	 */
 562	if (state != PCI_D0 && dev->current_state <= PCI_D3cold
 563	    && dev->current_state > state) {
 564		dev_err(&dev->dev, "invalid power transition "
 565			"(from state %d to %d)\n", dev->current_state, state);
 566		return -EINVAL;
 567	}
 568
 569	/* check if this device supports the desired state */
 570	if ((state == PCI_D1 && !dev->d1_support)
 571	   || (state == PCI_D2 && !dev->d2_support))
 572		return -EIO;
 573
 574	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
 
 
 
 575
 576	/* If we're (effectively) in D3, force entire word to 0.
 577	 * This doesn't affect PME_Status, disables PME_En, and
 578	 * sets PowerState to 0.
 579	 */
 580	switch (dev->current_state) {
 581	case PCI_D0:
 582	case PCI_D1:
 583	case PCI_D2:
 584		pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
 585		pmcsr |= state;
 586		break;
 587	case PCI_D3hot:
 588	case PCI_D3cold:
 589	case PCI_UNKNOWN: /* Boot-up */
 590		if ((pmcsr & PCI_PM_CTRL_STATE_MASK) == PCI_D3hot
 591		 && !(pmcsr & PCI_PM_CTRL_NO_SOFT_RESET))
 592			need_restore = true;
 593		/* Fall-through: force to D0 */
 594	default:
 595		pmcsr = 0;
 596		break;
 597	}
 598
 599	/* enter specified state */
 600	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pmcsr);
 
 
 
 601
 602	/* Mandatory power management transition delays */
 603	/* see PCI PM 1.1 5.6.1 table 18 */
 604	if (state == PCI_D3hot || dev->current_state == PCI_D3hot)
 605		pci_dev_d3_sleep(dev);
 606	else if (state == PCI_D2 || dev->current_state == PCI_D2)
 607		udelay(PCI_PM_D2_DELAY);
 608
 609	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
 610	dev->current_state = (pmcsr & PCI_PM_CTRL_STATE_MASK);
 611	if (dev->current_state != state && printk_ratelimit())
 612		dev_info(&dev->dev, "Refused to change power state, "
 613			"currently in D%d\n", dev->current_state);
 614
 615	/* According to section 5.4.1 of the "PCI BUS POWER MANAGEMENT
 616	 * INTERFACE SPECIFICATION, REV. 1.2", a device transitioning
 617	 * from D3hot to D0 _may_ perform an internal reset, thereby
 618	 * going to "D0 Uninitialized" rather than "D0 Initialized".
 619	 * For example, at least some versions of the 3c905B and the
 620	 * 3c556B exhibit this behaviour.
 621	 *
 622	 * At least some laptop BIOSen (e.g. the Thinkpad T21) leave
 623	 * devices in a D3hot state at boot.  Consequently, we need to
 624	 * restore at least the BARs so that the device will be
 625	 * accessible to its driver.
 626	 */
 627	if (need_restore)
 628		pci_restore_bars(dev);
 629
 630	if (dev->bus->self)
 631		pcie_aspm_pm_state_change(dev->bus->self);
 
 
 632
 633	return 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 634}
 635
 636/**
 637 * pci_update_current_state - Read PCI power state of given device from its
 638 *                            PCI PM registers and cache it
 639 * @dev: PCI device to handle.
 640 * @state: State to cache in case the device doesn't have the PM capability
 
 
 
 
 
 
 
 641 */
 642void pci_update_current_state(struct pci_dev *dev, pci_power_t state)
 643{
 644	if (dev->pm_cap) {
 
 
 645		u16 pmcsr;
 646
 647		pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
 648		dev->current_state = (pmcsr & PCI_PM_CTRL_STATE_MASK);
 
 
 
 
 649	} else {
 650		dev->current_state = state;
 651	}
 652}
 653
 654/**
 
 
 
 
 
 
 
 
 
 
 
 
 
 655 * pci_platform_power_transition - Use platform to change device power state
 656 * @dev: PCI device to handle.
 657 * @state: State to put the device into.
 658 */
 659static int pci_platform_power_transition(struct pci_dev *dev, pci_power_t state)
 660{
 661	int error;
 662
 663	if (platform_pci_power_manageable(dev)) {
 664		error = platform_pci_set_power_state(dev, state);
 665		if (!error)
 666			pci_update_current_state(dev, state);
 667	} else {
 668		error = -ENODEV;
 669		/* Fall back to PCI_D0 if native PM is not supported */
 670		if (!dev->pm_cap)
 671			dev->current_state = PCI_D0;
 672	}
 673
 674	return error;
 675}
 
 
 
 
 
 
 
 676
 677/**
 678 * __pci_start_power_transition - Start power transition of a PCI device
 679 * @dev: PCI device to handle.
 680 * @state: State to put the device into.
 681 */
 682static void __pci_start_power_transition(struct pci_dev *dev, pci_power_t state)
 683{
 684	if (state == PCI_D0)
 685		pci_platform_power_transition(dev, PCI_D0);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 686}
 687
 688/**
 689 * __pci_complete_power_transition - Complete power transition of a PCI device
 690 * @dev: PCI device to handle.
 691 * @state: State to put the device into.
 692 *
 693 * This function should not be called directly by device drivers.
 
 
 
 
 
 694 */
 695int __pci_complete_power_transition(struct pci_dev *dev, pci_power_t state)
 696{
 697	return state >= PCI_D0 ?
 698			pci_platform_power_transition(dev, state) : -EINVAL;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 699}
 700EXPORT_SYMBOL_GPL(__pci_complete_power_transition);
 701
 702/**
 703 * pci_set_power_state - Set the power state of a PCI device
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 704 * @dev: PCI device to handle.
 705 * @state: PCI power state (D0, D1, D2, D3hot) to put the device into.
 
 706 *
 707 * Transition a device to a new power state, using the platform firmware and/or
 708 * the device's PCI PM registers.
 709 *
 710 * RETURN VALUE:
 711 * -EINVAL if the requested state is invalid.
 712 * -EIO if device does not support PCI PM or its PM capabilities register has a
 713 * wrong version, or device doesn't support the requested state.
 714 * 0 if device already is in the requested state.
 715 * 0 if device's power state has been successfully changed.
 716 */
 717int pci_set_power_state(struct pci_dev *dev, pci_power_t state)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 718{
 719	int error;
 720
 721	/* bound the state we're entering */
 722	if (state > PCI_D3hot)
 723		state = PCI_D3hot;
 724	else if (state < PCI_D0)
 725		state = PCI_D0;
 726	else if ((state == PCI_D1 || state == PCI_D2) && pci_no_d1d2(dev))
 
 727		/*
 728		 * If the device or the parent bridge do not support PCI PM,
 729		 * ignore the request if we're doing anything other than putting
 730		 * it into D0 (which would only happen on boot).
 
 731		 */
 732		return 0;
 733
 734	__pci_start_power_transition(dev, state);
 735
 736	/* This device is quirked not to be put into D3, so
 737	   don't put it in D3 */
 738	if (state == PCI_D3hot && (dev->dev_flags & PCI_DEV_FLAGS_NO_D3))
 739		return 0;
 740
 741	error = pci_raw_set_power_state(dev, state);
 
 742
 743	if (!__pci_complete_power_transition(dev, state))
 744		error = 0;
 745	/*
 746	 * When aspm_policy is "powersave" this call ensures
 747	 * that ASPM is configured.
 748	 */
 749	if (!error && dev->bus->self)
 750		pcie_aspm_powersave_config_link(dev->bus->self);
 751
 752	return error;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 753}
 754
 755/**
 756 * pci_choose_state - Choose the power state of a PCI device
 757 * @dev: PCI device to be suspended
 758 * @state: target sleep state for the whole system. This is the value
 759 *	that is passed to suspend() function.
 760 *
 761 * Returns PCI power state suitable for given device and given system
 762 * message.
 
 
 
 
 
 
 
 
 
 763 */
 
 
 
 
 
 764
 765pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state)
 766{
 767	pci_power_t ret;
 768
 769	if (!pci_find_capability(dev, PCI_CAP_ID_PM))
 770		return PCI_D0;
 
 771
 772	ret = platform_pci_choose_state(dev);
 773	if (ret != PCI_POWER_ERROR)
 774		return ret;
 775
 776	switch (state.event) {
 777	case PM_EVENT_ON:
 778		return PCI_D0;
 779	case PM_EVENT_FREEZE:
 780	case PM_EVENT_PRETHAW:
 781		/* REVISIT both freeze and pre-thaw "should" use D0 */
 782	case PM_EVENT_SUSPEND:
 783	case PM_EVENT_HIBERNATE:
 784		return PCI_D3hot;
 785	default:
 786		dev_info(&dev->dev, "unrecognized suspend event %d\n",
 787			 state.event);
 788		BUG();
 789	}
 790	return PCI_D0;
 791}
 792
 793EXPORT_SYMBOL(pci_choose_state);
 794
 795#define PCI_EXP_SAVE_REGS	7
 
 796
 797#define pcie_cap_has_devctl(type, flags)	1
 798#define pcie_cap_has_lnkctl(type, flags)		\
 799		((flags & PCI_EXP_FLAGS_VERS) > 1 ||	\
 800		 (type == PCI_EXP_TYPE_ROOT_PORT ||	\
 801		  type == PCI_EXP_TYPE_ENDPOINT ||	\
 802		  type == PCI_EXP_TYPE_LEG_END))
 803#define pcie_cap_has_sltctl(type, flags)		\
 804		((flags & PCI_EXP_FLAGS_VERS) > 1 ||	\
 805		 ((type == PCI_EXP_TYPE_ROOT_PORT) ||	\
 806		  (type == PCI_EXP_TYPE_DOWNSTREAM &&	\
 807		   (flags & PCI_EXP_FLAGS_SLOT))))
 808#define pcie_cap_has_rtctl(type, flags)			\
 809		((flags & PCI_EXP_FLAGS_VERS) > 1 ||	\
 810		 (type == PCI_EXP_TYPE_ROOT_PORT ||	\
 811		  type == PCI_EXP_TYPE_RC_EC))
 812#define pcie_cap_has_devctl2(type, flags)		\
 813		((flags & PCI_EXP_FLAGS_VERS) > 1)
 814#define pcie_cap_has_lnkctl2(type, flags)		\
 815		((flags & PCI_EXP_FLAGS_VERS) > 1)
 816#define pcie_cap_has_sltctl2(type, flags)		\
 817		((flags & PCI_EXP_FLAGS_VERS) > 1)
 818
 819static int pci_save_pcie_state(struct pci_dev *dev)
 820{
 821	int pos, i = 0;
 822	struct pci_cap_saved_state *save_state;
 823	u16 *cap;
 824	u16 flags;
 825
 826	pos = pci_pcie_cap(dev);
 827	if (!pos)
 828		return 0;
 829
 830	save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP);
 831	if (!save_state) {
 832		dev_err(&dev->dev, "buffer not found in %s\n", __func__);
 833		return -ENOMEM;
 834	}
 835	cap = (u16 *)&save_state->cap.data[0];
 836
 837	pci_read_config_word(dev, pos + PCI_EXP_FLAGS, &flags);
 
 
 
 
 
 
 
 838
 839	if (pcie_cap_has_devctl(dev->pcie_type, flags))
 840		pci_read_config_word(dev, pos + PCI_EXP_DEVCTL, &cap[i++]);
 841	if (pcie_cap_has_lnkctl(dev->pcie_type, flags))
 842		pci_read_config_word(dev, pos + PCI_EXP_LNKCTL, &cap[i++]);
 843	if (pcie_cap_has_sltctl(dev->pcie_type, flags))
 844		pci_read_config_word(dev, pos + PCI_EXP_SLTCTL, &cap[i++]);
 845	if (pcie_cap_has_rtctl(dev->pcie_type, flags))
 846		pci_read_config_word(dev, pos + PCI_EXP_RTCTL, &cap[i++]);
 847	if (pcie_cap_has_devctl2(dev->pcie_type, flags))
 848		pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &cap[i++]);
 849	if (pcie_cap_has_lnkctl2(dev->pcie_type, flags))
 850		pci_read_config_word(dev, pos + PCI_EXP_LNKCTL2, &cap[i++]);
 851	if (pcie_cap_has_sltctl2(dev->pcie_type, flags))
 852		pci_read_config_word(dev, pos + PCI_EXP_SLTCTL2, &cap[i++]);
 853
 854	return 0;
 855}
 856
 857static void pci_restore_pcie_state(struct pci_dev *dev)
 858{
 859	int i = 0, pos;
 860	struct pci_cap_saved_state *save_state;
 861	u16 *cap;
 862	u16 flags;
 
 
 
 
 
 
 863
 864	save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP);
 865	pos = pci_find_capability(dev, PCI_CAP_ID_EXP);
 866	if (!save_state || pos <= 0)
 867		return;
 868	cap = (u16 *)&save_state->cap.data[0];
 869
 870	pci_read_config_word(dev, pos + PCI_EXP_FLAGS, &flags);
 
 
 
 
 
 871
 872	if (pcie_cap_has_devctl(dev->pcie_type, flags))
 873		pci_write_config_word(dev, pos + PCI_EXP_DEVCTL, cap[i++]);
 874	if (pcie_cap_has_lnkctl(dev->pcie_type, flags))
 875		pci_write_config_word(dev, pos + PCI_EXP_LNKCTL, cap[i++]);
 876	if (pcie_cap_has_sltctl(dev->pcie_type, flags))
 877		pci_write_config_word(dev, pos + PCI_EXP_SLTCTL, cap[i++]);
 878	if (pcie_cap_has_rtctl(dev->pcie_type, flags))
 879		pci_write_config_word(dev, pos + PCI_EXP_RTCTL, cap[i++]);
 880	if (pcie_cap_has_devctl2(dev->pcie_type, flags))
 881		pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, cap[i++]);
 882	if (pcie_cap_has_lnkctl2(dev->pcie_type, flags))
 883		pci_write_config_word(dev, pos + PCI_EXP_LNKCTL2, cap[i++]);
 884	if (pcie_cap_has_sltctl2(dev->pcie_type, flags))
 885		pci_write_config_word(dev, pos + PCI_EXP_SLTCTL2, cap[i++]);
 886}
 887
 888
 889static int pci_save_pcix_state(struct pci_dev *dev)
 890{
 891	int pos;
 892	struct pci_cap_saved_state *save_state;
 893
 894	pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
 895	if (pos <= 0)
 896		return 0;
 897
 898	save_state = pci_find_saved_cap(dev, PCI_CAP_ID_PCIX);
 899	if (!save_state) {
 900		dev_err(&dev->dev, "buffer not found in %s\n", __func__);
 901		return -ENOMEM;
 902	}
 903
 904	pci_read_config_word(dev, pos + PCI_X_CMD,
 905			     (u16 *)save_state->cap.data);
 906
 907	return 0;
 908}
 909
 910static void pci_restore_pcix_state(struct pci_dev *dev)
 911{
 912	int i = 0, pos;
 913	struct pci_cap_saved_state *save_state;
 914	u16 *cap;
 915
 916	save_state = pci_find_saved_cap(dev, PCI_CAP_ID_PCIX);
 917	pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
 918	if (!save_state || pos <= 0)
 919		return;
 920	cap = (u16 *)&save_state->cap.data[0];
 921
 922	pci_write_config_word(dev, pos + PCI_X_CMD, cap[i++]);
 923}
 924
 925
 926/**
 927 * pci_save_state - save the PCI configuration space of a device before suspending
 928 * @dev: - PCI device that we're dealing with
 
 929 */
 930int
 931pci_save_state(struct pci_dev *dev)
 932{
 933	int i;
 934	/* XXX: 100% dword access ok here? */
 935	for (i = 0; i < 16; i++)
 936		pci_read_config_dword(dev, i * 4, &dev->saved_config_space[i]);
 
 
 
 937	dev->state_saved = true;
 938	if ((i = pci_save_pcie_state(dev)) != 0)
 
 
 939		return i;
 940	if ((i = pci_save_pcix_state(dev)) != 0)
 
 
 941		return i;
 942	return 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 943}
 944
 945/** 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 946 * pci_restore_state - Restore the saved state of a PCI device
 947 * @dev: - PCI device that we're dealing with
 948 */
 949void pci_restore_state(struct pci_dev *dev)
 950{
 951	int i;
 952	u32 val;
 953
 954	if (!dev->state_saved)
 955		return;
 956
 957	/* PCI Express register must be restored first */
 958	pci_restore_pcie_state(dev);
 
 
 
 
 
 
 
 
 
 
 
 
 
 959
 960	/*
 961	 * The Base Address register should be programmed before the command
 962	 * register(s)
 963	 */
 964	for (i = 15; i >= 0; i--) {
 965		pci_read_config_dword(dev, i * 4, &val);
 966		if (val != dev->saved_config_space[i]) {
 967			dev_printk(KERN_DEBUG, &dev->dev, "restoring config "
 968				"space at offset %#x (was %#x, writing %#x)\n",
 969				i, val, (int)dev->saved_config_space[i]);
 970			pci_write_config_dword(dev,i * 4,
 971				dev->saved_config_space[i]);
 972		}
 973	}
 974	pci_restore_pcix_state(dev);
 975	pci_restore_msi_state(dev);
 
 
 
 976	pci_restore_iov_state(dev);
 977
 978	dev->state_saved = false;
 979}
 
 980
 981struct pci_saved_state {
 982	u32 config_space[16];
 983	struct pci_cap_saved_data cap[0];
 984};
 985
 986/**
 987 * pci_store_saved_state - Allocate and return an opaque struct containing
 988 *			   the device saved state.
 989 * @dev: PCI device that we're dealing with
 990 *
 991 * Rerturn NULL if no state or error.
 992 */
 993struct pci_saved_state *pci_store_saved_state(struct pci_dev *dev)
 994{
 995	struct pci_saved_state *state;
 996	struct pci_cap_saved_state *tmp;
 997	struct pci_cap_saved_data *cap;
 998	struct hlist_node *pos;
 999	size_t size;
1000
1001	if (!dev->state_saved)
1002		return NULL;
1003
1004	size = sizeof(*state) + sizeof(struct pci_cap_saved_data);
1005
1006	hlist_for_each_entry(tmp, pos, &dev->saved_cap_space, next)
1007		size += sizeof(struct pci_cap_saved_data) + tmp->cap.size;
1008
1009	state = kzalloc(size, GFP_KERNEL);
1010	if (!state)
1011		return NULL;
1012
1013	memcpy(state->config_space, dev->saved_config_space,
1014	       sizeof(state->config_space));
1015
1016	cap = state->cap;
1017	hlist_for_each_entry(tmp, pos, &dev->saved_cap_space, next) {
1018		size_t len = sizeof(struct pci_cap_saved_data) + tmp->cap.size;
1019		memcpy(cap, &tmp->cap, len);
1020		cap = (struct pci_cap_saved_data *)((u8 *)cap + len);
1021	}
1022	/* Empty cap_save terminates list */
1023
1024	return state;
1025}
1026EXPORT_SYMBOL_GPL(pci_store_saved_state);
1027
1028/**
1029 * pci_load_saved_state - Reload the provided save state into struct pci_dev.
1030 * @dev: PCI device that we're dealing with
1031 * @state: Saved state returned from pci_store_saved_state()
1032 */
1033int pci_load_saved_state(struct pci_dev *dev, struct pci_saved_state *state)
 
1034{
1035	struct pci_cap_saved_data *cap;
1036
1037	dev->state_saved = false;
1038
1039	if (!state)
1040		return 0;
1041
1042	memcpy(dev->saved_config_space, state->config_space,
1043	       sizeof(state->config_space));
1044
1045	cap = state->cap;
1046	while (cap->size) {
1047		struct pci_cap_saved_state *tmp;
1048
1049		tmp = pci_find_saved_cap(dev, cap->cap_nr);
1050		if (!tmp || tmp->cap.size != cap->size)
1051			return -EINVAL;
1052
1053		memcpy(tmp->cap.data, cap->data, tmp->cap.size);
1054		cap = (struct pci_cap_saved_data *)((u8 *)cap +
1055		       sizeof(struct pci_cap_saved_data) + cap->size);
1056	}
1057
1058	dev->state_saved = true;
1059	return 0;
1060}
1061EXPORT_SYMBOL_GPL(pci_load_saved_state);
1062
1063/**
1064 * pci_load_and_free_saved_state - Reload the save state pointed to by state,
1065 *				   and free the memory allocated for it.
1066 * @dev: PCI device that we're dealing with
1067 * @state: Pointer to saved state returned from pci_store_saved_state()
1068 */
1069int pci_load_and_free_saved_state(struct pci_dev *dev,
1070				  struct pci_saved_state **state)
1071{
1072	int ret = pci_load_saved_state(dev, *state);
1073	kfree(*state);
1074	*state = NULL;
1075	return ret;
1076}
1077EXPORT_SYMBOL_GPL(pci_load_and_free_saved_state);
1078
 
 
 
 
 
1079static int do_pci_enable_device(struct pci_dev *dev, int bars)
1080{
1081	int err;
 
 
 
1082
1083	err = pci_set_power_state(dev, PCI_D0);
1084	if (err < 0 && err != -EIO)
1085		return err;
 
 
 
 
 
1086	err = pcibios_enable_device(dev, bars);
1087	if (err < 0)
1088		return err;
1089	pci_fixup_device(pci_fixup_enable, dev);
1090
 
 
 
 
 
 
 
 
 
 
 
1091	return 0;
1092}
1093
1094/**
1095 * pci_reenable_device - Resume abandoned device
1096 * @dev: PCI device to be resumed
1097 *
1098 *  Note this function is a backend of pci_default_resume and is not supposed
1099 *  to be called by normal code, write proper resume handler and use it instead.
1100 */
1101int pci_reenable_device(struct pci_dev *dev)
1102{
1103	if (pci_is_enabled(dev))
1104		return do_pci_enable_device(dev, (1 << PCI_NUM_RESOURCES) - 1);
1105	return 0;
1106}
 
1107
1108static int __pci_enable_device_flags(struct pci_dev *dev,
1109				     resource_size_t flags)
1110{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1111	int err;
1112	int i, bars = 0;
1113
1114	/*
1115	 * Power state could be unknown at this point, either due to a fresh
1116	 * boot or a device removal call.  So get the current power state
1117	 * so that things like MSI message writing will behave as expected
1118	 * (e.g. if the device really is in D0 at enable time).
1119	 */
1120	if (dev->pm_cap) {
1121		u16 pmcsr;
1122		pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
1123		dev->current_state = (pmcsr & PCI_PM_CTRL_STATE_MASK);
1124	}
1125
1126	if (atomic_add_return(1, &dev->enable_cnt) > 1)
1127		return 0;		/* already enabled */
1128
1129	for (i = 0; i < DEVICE_COUNT_RESOURCE; i++)
 
 
 
 
 
 
 
 
1130		if (dev->resource[i].flags & flags)
1131			bars |= (1 << i);
1132
1133	err = do_pci_enable_device(dev, bars);
1134	if (err < 0)
1135		atomic_dec(&dev->enable_cnt);
1136	return err;
1137}
1138
1139/**
1140 * pci_enable_device_io - Initialize a device for use with IO space
1141 * @dev: PCI device to be initialized
1142 *
1143 *  Initialize device before it's used by a driver. Ask low-level code
1144 *  to enable I/O resources. Wake up the device if it was suspended.
1145 *  Beware, this function can fail.
1146 */
1147int pci_enable_device_io(struct pci_dev *dev)
1148{
1149	return __pci_enable_device_flags(dev, IORESOURCE_IO);
1150}
1151
1152/**
1153 * pci_enable_device_mem - Initialize a device for use with Memory space
1154 * @dev: PCI device to be initialized
1155 *
1156 *  Initialize device before it's used by a driver. Ask low-level code
1157 *  to enable Memory resources. Wake up the device if it was suspended.
1158 *  Beware, this function can fail.
1159 */
1160int pci_enable_device_mem(struct pci_dev *dev)
1161{
1162	return __pci_enable_device_flags(dev, IORESOURCE_MEM);
1163}
 
1164
1165/**
1166 * pci_enable_device - Initialize device before it's used by a driver.
1167 * @dev: PCI device to be initialized
1168 *
1169 *  Initialize device before it's used by a driver. Ask low-level code
1170 *  to enable I/O and memory. Wake up the device if it was suspended.
1171 *  Beware, this function can fail.
1172 *
1173 *  Note we don't actually enable the device many times if we call
1174 *  this function repeatedly (we just increment the count).
1175 */
1176int pci_enable_device(struct pci_dev *dev)
1177{
1178	return __pci_enable_device_flags(dev, IORESOURCE_MEM | IORESOURCE_IO);
1179}
 
1180
1181/*
1182 * Managed PCI resources.  This manages device on/off, intx/msi/msix
1183 * on/off and BAR regions.  pci_dev itself records msi/msix status, so
1184 * there's no need to track it separately.  pci_devres is initialized
1185 * when a device is enabled using managed PCI device enable interface.
1186 */
1187struct pci_devres {
1188	unsigned int enabled:1;
1189	unsigned int pinned:1;
1190	unsigned int orig_intx:1;
1191	unsigned int restore_intx:1;
1192	u32 region_mask;
1193};
1194
1195static void pcim_release(struct device *gendev, void *res)
1196{
1197	struct pci_dev *dev = container_of(gendev, struct pci_dev, dev);
1198	struct pci_devres *this = res;
1199	int i;
1200
1201	if (dev->msi_enabled)
1202		pci_disable_msi(dev);
1203	if (dev->msix_enabled)
1204		pci_disable_msix(dev);
1205
1206	for (i = 0; i < DEVICE_COUNT_RESOURCE; i++)
1207		if (this->region_mask & (1 << i))
1208			pci_release_region(dev, i);
1209
1210	if (this->restore_intx)
1211		pci_intx(dev, this->orig_intx);
1212
1213	if (this->enabled && !this->pinned)
1214		pci_disable_device(dev);
1215}
1216
1217static struct pci_devres * get_pci_dr(struct pci_dev *pdev)
1218{
1219	struct pci_devres *dr, *new_dr;
1220
1221	dr = devres_find(&pdev->dev, pcim_release, NULL, NULL);
1222	if (dr)
1223		return dr;
1224
1225	new_dr = devres_alloc(pcim_release, sizeof(*new_dr), GFP_KERNEL);
1226	if (!new_dr)
1227		return NULL;
1228	return devres_get(&pdev->dev, new_dr, NULL, NULL);
1229}
1230
1231static struct pci_devres * find_pci_dr(struct pci_dev *pdev)
1232{
1233	if (pci_is_managed(pdev))
1234		return devres_find(&pdev->dev, pcim_release, NULL, NULL);
1235	return NULL;
1236}
1237
1238/**
1239 * pcim_enable_device - Managed pci_enable_device()
1240 * @pdev: PCI device to be initialized
1241 *
1242 * Managed pci_enable_device().
 
 
1243 */
1244int pcim_enable_device(struct pci_dev *pdev)
1245{
1246	struct pci_devres *dr;
1247	int rc;
1248
1249	dr = get_pci_dr(pdev);
1250	if (unlikely(!dr))
1251		return -ENOMEM;
1252	if (dr->enabled)
1253		return 0;
1254
1255	rc = pci_enable_device(pdev);
1256	if (!rc) {
1257		pdev->is_managed = 1;
1258		dr->enabled = 1;
1259	}
1260	return rc;
1261}
1262
1263/**
1264 * pcim_pin_device - Pin managed PCI device
1265 * @pdev: PCI device to pin
 
1266 *
1267 * Pin managed PCI device @pdev.  Pinned device won't be disabled on
1268 * driver detach.  @pdev must have been enabled with
1269 * pcim_enable_device().
1270 */
1271void pcim_pin_device(struct pci_dev *pdev)
1272{
1273	struct pci_devres *dr;
1274
1275	dr = find_pci_dr(pdev);
1276	WARN_ON(!dr || !dr->enabled);
1277	if (dr)
1278		dr->pinned = 1;
1279}
1280
1281/**
1282 * pcibios_disable_device - disable arch specific PCI resources for device dev
1283 * @dev: the PCI device to disable
1284 *
1285 * Disables architecture specific PCI resources for the device. This
1286 * is the default implementation. Architecture implementations can
1287 * override this.
1288 */
1289void __attribute__ ((weak)) pcibios_disable_device (struct pci_dev *dev) {}
1290
1291static void do_pci_disable_device(struct pci_dev *dev)
1292{
1293	u16 pci_command;
1294
1295	pci_read_config_word(dev, PCI_COMMAND, &pci_command);
1296	if (pci_command & PCI_COMMAND_MASTER) {
1297		pci_command &= ~PCI_COMMAND_MASTER;
1298		pci_write_config_word(dev, PCI_COMMAND, pci_command);
1299	}
1300
1301	pcibios_disable_device(dev);
1302}
1303
1304/**
1305 * pci_disable_enabled_device - Disable device without updating enable_cnt
1306 * @dev: PCI device to disable
1307 *
1308 * NOTE: This function is a backend of PCI power management routines and is
1309 * not supposed to be called drivers.
1310 */
1311void pci_disable_enabled_device(struct pci_dev *dev)
1312{
1313	if (pci_is_enabled(dev))
1314		do_pci_disable_device(dev);
1315}
1316
1317/**
1318 * pci_disable_device - Disable PCI device after use
1319 * @dev: PCI device to be disabled
1320 *
1321 * Signal to the system that the PCI device is not in use by the system
1322 * anymore.  This only involves disabling PCI bus-mastering, if active.
1323 *
1324 * Note we don't actually disable the device until all callers of
1325 * pci_enable_device() have called pci_disable_device().
1326 */
1327void
1328pci_disable_device(struct pci_dev *dev)
1329{
1330	struct pci_devres *dr;
1331
1332	dr = find_pci_dr(dev);
1333	if (dr)
1334		dr->enabled = 0;
1335
1336	if (atomic_sub_return(1, &dev->enable_cnt) != 0)
1337		return;
1338
1339	do_pci_disable_device(dev);
1340
1341	dev->is_busmaster = 0;
1342}
 
1343
1344/**
1345 * pcibios_set_pcie_reset_state - set reset state for device dev
1346 * @dev: the PCIe device reset
1347 * @state: Reset state to enter into
1348 *
1349 *
1350 * Sets the PCIe reset state for the device. This is the default
1351 * implementation. Architecture implementations can override this.
1352 */
1353int __attribute__ ((weak)) pcibios_set_pcie_reset_state(struct pci_dev *dev,
1354							enum pcie_reset_state state)
1355{
1356	return -EINVAL;
1357}
1358
1359/**
1360 * pci_set_pcie_reset_state - set reset state for device dev
1361 * @dev: the PCIe device reset
1362 * @state: Reset state to enter into
1363 *
1364 *
1365 * Sets the PCI reset state for the device.
1366 */
1367int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state)
1368{
1369	return pcibios_set_pcie_reset_state(dev, state);
1370}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1371
1372/**
1373 * pci_check_pme_status - Check if given device has generated PME.
1374 * @dev: Device to check.
1375 *
1376 * Check the PME status of the device and if set, clear it and clear PME enable
1377 * (if set).  Return 'true' if PME status and PME enable were both set or
1378 * 'false' otherwise.
1379 */
1380bool pci_check_pme_status(struct pci_dev *dev)
1381{
1382	int pmcsr_pos;
1383	u16 pmcsr;
1384	bool ret = false;
1385
1386	if (!dev->pm_cap)
1387		return false;
1388
1389	pmcsr_pos = dev->pm_cap + PCI_PM_CTRL;
1390	pci_read_config_word(dev, pmcsr_pos, &pmcsr);
1391	if (!(pmcsr & PCI_PM_CTRL_PME_STATUS))
1392		return false;
1393
1394	/* Clear PME status. */
1395	pmcsr |= PCI_PM_CTRL_PME_STATUS;
1396	if (pmcsr & PCI_PM_CTRL_PME_ENABLE) {
1397		/* Disable PME to avoid interrupt flood. */
1398		pmcsr &= ~PCI_PM_CTRL_PME_ENABLE;
1399		ret = true;
1400	}
1401
1402	pci_write_config_word(dev, pmcsr_pos, pmcsr);
1403
1404	return ret;
1405}
1406
1407/**
1408 * pci_pme_wakeup - Wake up a PCI device if its PME Status bit is set.
1409 * @dev: Device to handle.
1410 * @ign: Ignored.
1411 *
1412 * Check if @dev has generated PME and queue a resume request for it in that
1413 * case.
1414 */
1415static int pci_pme_wakeup(struct pci_dev *dev, void *ign)
1416{
 
 
 
1417	if (pci_check_pme_status(dev)) {
1418		pci_wakeup_event(dev);
1419		pm_request_resume(&dev->dev);
1420	}
1421	return 0;
1422}
1423
1424/**
1425 * pci_pme_wakeup_bus - Walk given bus and wake up devices on it, if necessary.
1426 * @bus: Top bus of the subtree to walk.
1427 */
1428void pci_pme_wakeup_bus(struct pci_bus *bus)
1429{
1430	if (bus)
1431		pci_walk_bus(bus, pci_pme_wakeup, NULL);
1432}
1433
 
1434/**
1435 * pci_pme_capable - check the capability of PCI device to generate PME#
1436 * @dev: PCI device to handle.
1437 * @state: PCI state from which device will issue PME#.
1438 */
1439bool pci_pme_capable(struct pci_dev *dev, pci_power_t state)
1440{
1441	if (!dev->pm_cap)
1442		return false;
1443
1444	return !!(dev->pme_support & (1 << state));
1445}
 
1446
1447static void pci_pme_list_scan(struct work_struct *work)
1448{
1449	struct pci_pme_device *pme_dev;
1450
1451	mutex_lock(&pci_pme_list_mutex);
1452	if (!list_empty(&pci_pme_list)) {
1453		list_for_each_entry(pme_dev, &pci_pme_list, list)
1454			pci_pme_wakeup(pme_dev->dev, NULL);
1455		schedule_delayed_work(&pci_pme_work, msecs_to_jiffies(PME_TIMEOUT));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1456	}
 
 
 
1457	mutex_unlock(&pci_pme_list_mutex);
1458}
1459
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1460/**
1461 * pci_external_pme - is a device an external PCI PME source?
1462 * @dev: PCI device to check
1463 *
1464 */
1465
1466static bool pci_external_pme(struct pci_dev *dev)
1467{
1468	if (pci_is_pcie(dev) || dev->bus->number == 0)
1469		return false;
1470	return true;
 
 
 
 
 
 
 
 
 
 
 
1471}
1472
1473/**
1474 * pci_pme_active - enable or disable PCI device's PME# function
1475 * @dev: PCI device to handle.
1476 * @enable: 'true' to enable PME# generation; 'false' to disable it.
1477 *
1478 * The caller must verify that the device is capable of generating PME# before
1479 * calling this function with @enable equal to 'true'.
1480 */
1481void pci_pme_active(struct pci_dev *dev, bool enable)
1482{
1483	u16 pmcsr;
1484
1485	if (!dev->pm_cap)
1486		return;
1487
1488	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
1489	/* Clear PME_Status by writing 1 to it and enable PME# */
1490	pmcsr |= PCI_PM_CTRL_PME_STATUS | PCI_PM_CTRL_PME_ENABLE;
1491	if (!enable)
1492		pmcsr &= ~PCI_PM_CTRL_PME_ENABLE;
1493
1494	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pmcsr);
1495
1496	/* PCI (as opposed to PCIe) PME requires that the device have
1497	   its PME# line hooked up correctly. Not all hardware vendors
1498	   do this, so the PME never gets delivered and the device
1499	   remains asleep. The easiest way around this is to
1500	   periodically walk the list of suspended devices and check
1501	   whether any have their PME flag set. The assumption is that
1502	   we'll wake up often enough anyway that this won't be a huge
1503	   hit, and the power savings from the devices will still be a
1504	   win. */
1505
1506	if (pci_external_pme(dev)) {
1507		struct pci_pme_device *pme_dev;
1508		if (enable) {
1509			pme_dev = kmalloc(sizeof(struct pci_pme_device),
1510					  GFP_KERNEL);
1511			if (!pme_dev)
1512				goto out;
 
 
1513			pme_dev->dev = dev;
1514			mutex_lock(&pci_pme_list_mutex);
1515			list_add(&pme_dev->list, &pci_pme_list);
1516			if (list_is_singular(&pci_pme_list))
1517				schedule_delayed_work(&pci_pme_work,
1518						      msecs_to_jiffies(PME_TIMEOUT));
 
1519			mutex_unlock(&pci_pme_list_mutex);
1520		} else {
1521			mutex_lock(&pci_pme_list_mutex);
1522			list_for_each_entry(pme_dev, &pci_pme_list, list) {
1523				if (pme_dev->dev == dev) {
1524					list_del(&pme_dev->list);
1525					kfree(pme_dev);
1526					break;
1527				}
1528			}
1529			mutex_unlock(&pci_pme_list_mutex);
1530		}
1531	}
1532
1533out:
1534	dev_printk(KERN_DEBUG, &dev->dev, "PME# %s\n",
1535			enable ? "enabled" : "disabled");
1536}
 
1537
1538/**
1539 * __pci_enable_wake - enable PCI device as wakeup event source
1540 * @dev: PCI device affected
1541 * @state: PCI state from which device will issue wakeup events
1542 * @runtime: True if the events are to be generated at run time
1543 * @enable: True to enable event generation; false to disable
1544 *
1545 * This enables the device as a wakeup event source, or disables it.
1546 * When such events involves platform-specific hooks, those hooks are
1547 * called automatically by this routine.
1548 *
1549 * Devices with legacy power management (no standard PCI PM capabilities)
1550 * always require such platform hooks.
1551 *
1552 * RETURN VALUE:
1553 * 0 is returned on success
1554 * -EINVAL is returned if device is not supposed to wake up the system
1555 * Error code depending on the platform is returned if both the platform and
1556 * the native mechanism fail to enable the generation of wake-up events
1557 */
1558int __pci_enable_wake(struct pci_dev *dev, pci_power_t state,
1559		      bool runtime, bool enable)
1560{
1561	int ret = 0;
1562
1563	if (enable && !runtime && !device_may_wakeup(&dev->dev))
1564		return -EINVAL;
 
 
 
 
 
 
 
1565
1566	/* Don't do the same thing twice in a row for one device. */
1567	if (!!enable == !!dev->wakeup_prepared)
1568		return 0;
1569
1570	/*
1571	 * According to "PCI System Architecture" 4th ed. by Tom Shanley & Don
1572	 * Anderson we should be doing PME# wake enable followed by ACPI wake
1573	 * enable.  To disable wake-up we call the platform first, for symmetry.
1574	 */
1575
1576	if (enable) {
1577		int error;
1578
1579		if (pci_pme_capable(dev, state))
 
 
 
 
 
 
 
1580			pci_pme_active(dev, true);
1581		else
1582			ret = 1;
1583		error = runtime ? platform_pci_run_wake(dev, true) :
1584					platform_pci_sleep_wake(dev, true);
1585		if (ret)
1586			ret = error;
1587		if (!ret)
1588			dev->wakeup_prepared = true;
1589	} else {
1590		if (runtime)
1591			platform_pci_run_wake(dev, false);
1592		else
1593			platform_pci_sleep_wake(dev, false);
1594		pci_pme_active(dev, false);
1595		dev->wakeup_prepared = false;
1596	}
1597
1598	return ret;
1599}
1600EXPORT_SYMBOL(__pci_enable_wake);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1601
1602/**
1603 * pci_wake_from_d3 - enable/disable device to wake up from D3_hot or D3_cold
1604 * @dev: PCI device to prepare
1605 * @enable: True to enable wake-up event generation; false to disable
1606 *
1607 * Many drivers want the device to wake up the system from D3_hot or D3_cold
1608 * and this function allows them to set that up cleanly - pci_enable_wake()
1609 * should not be called twice in a row to enable wake-up due to PCI PM vs ACPI
1610 * ordering constraints.
1611 *
1612 * This function only returns error code if the device is not capable of
1613 * generating PME# from both D3_hot and D3_cold, and the platform is unable to
1614 * enable wake-up power for it.
1615 */
1616int pci_wake_from_d3(struct pci_dev *dev, bool enable)
1617{
1618	return pci_pme_capable(dev, PCI_D3cold) ?
1619			pci_enable_wake(dev, PCI_D3cold, enable) :
1620			pci_enable_wake(dev, PCI_D3hot, enable);
1621}
 
1622
1623/**
1624 * pci_target_state - find an appropriate low power state for a given PCI dev
1625 * @dev: PCI device
 
1626 *
1627 * Use underlying platform code to find a supported low power state for @dev.
1628 * If the platform can't manage @dev, return the deepest state from which it
1629 * can generate wake events, based on any available PME info.
1630 */
1631pci_power_t pci_target_state(struct pci_dev *dev)
1632{
1633	pci_power_t target_state = PCI_D3hot;
1634
1635	if (platform_pci_power_manageable(dev)) {
1636		/*
1637		 * Call the platform to choose the target state of the device
1638		 * and enable wake-up from this state if supported.
1639		 */
1640		pci_power_t state = platform_pci_choose_state(dev);
1641
1642		switch (state) {
1643		case PCI_POWER_ERROR:
1644		case PCI_UNKNOWN:
1645			break;
 
1646		case PCI_D1:
1647		case PCI_D2:
1648			if (pci_no_d1d2(dev))
1649				break;
1650		default:
1651			target_state = state;
1652		}
1653	} else if (!dev->pm_cap) {
1654		target_state = PCI_D0;
1655	} else if (device_may_wakeup(&dev->dev)) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1656		/*
1657		 * Find the deepest state from which the device can generate
1658		 * wake-up events, make it the target state and enable device
1659		 * to generate PME#.
1660		 */
1661		if (dev->pme_support) {
1662			while (target_state
1663			      && !(dev->pme_support & (1 << target_state)))
1664				target_state--;
1665		}
 
 
1666	}
1667
1668	return target_state;
1669}
1670
1671/**
1672 * pci_prepare_to_sleep - prepare PCI device for system-wide transition into a sleep state
 
1673 * @dev: Device to handle.
1674 *
1675 * Choose the power state appropriate for the device depending on whether
1676 * it can wake up the system and/or is power manageable by the platform
1677 * (PCI_D3hot is the default) and put the device into that state.
1678 */
1679int pci_prepare_to_sleep(struct pci_dev *dev)
1680{
1681	pci_power_t target_state = pci_target_state(dev);
 
1682	int error;
1683
1684	if (target_state == PCI_POWER_ERROR)
1685		return -EIO;
1686
1687	pci_enable_wake(dev, target_state, device_may_wakeup(&dev->dev));
1688
1689	error = pci_set_power_state(dev, target_state);
1690
1691	if (error)
1692		pci_enable_wake(dev, target_state, false);
1693
1694	return error;
1695}
 
1696
1697/**
1698 * pci_back_from_sleep - turn PCI device on during system-wide transition into working state
 
1699 * @dev: Device to handle.
1700 *
1701 * Disable device's system wake-up capability and put it into D0.
1702 */
1703int pci_back_from_sleep(struct pci_dev *dev)
1704{
 
 
 
 
 
1705	pci_enable_wake(dev, PCI_D0, false);
1706	return pci_set_power_state(dev, PCI_D0);
1707}
 
1708
1709/**
1710 * pci_finish_runtime_suspend - Carry out PCI-specific part of runtime suspend.
1711 * @dev: PCI device being suspended.
1712 *
1713 * Prepare @dev to generate wake-up events at run time and put it into a low
1714 * power state.
1715 */
1716int pci_finish_runtime_suspend(struct pci_dev *dev)
1717{
1718	pci_power_t target_state = pci_target_state(dev);
1719	int error;
1720
 
1721	if (target_state == PCI_POWER_ERROR)
1722		return -EIO;
1723
1724	__pci_enable_wake(dev, target_state, true, pci_dev_run_wake(dev));
1725
1726	error = pci_set_power_state(dev, target_state);
1727
1728	if (error)
1729		__pci_enable_wake(dev, target_state, true, false);
1730
1731	return error;
1732}
1733
1734/**
1735 * pci_dev_run_wake - Check if device can generate run-time wake-up events.
1736 * @dev: Device to check.
1737 *
1738 * Return true if the device itself is cabable of generating wake-up events
1739 * (through the platform or using the native PCIe PME) or if the device supports
1740 * PME and one of its upstream bridges can generate wake-up events.
1741 */
1742bool pci_dev_run_wake(struct pci_dev *dev)
1743{
1744	struct pci_bus *bus = dev->bus;
1745
1746	if (device_run_wake(&dev->dev))
1747		return true;
1748
1749	if (!dev->pme_support)
1750		return false;
1751
 
 
 
 
 
 
 
1752	while (bus->parent) {
1753		struct pci_dev *bridge = bus->self;
1754
1755		if (device_run_wake(&bridge->dev))
1756			return true;
1757
1758		bus = bus->parent;
1759	}
1760
1761	/* We have reached the root bus. */
1762	if (bus->bridge)
1763		return device_run_wake(bus->bridge);
1764
1765	return false;
1766}
1767EXPORT_SYMBOL_GPL(pci_dev_run_wake);
1768
1769/**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1770 * pci_pm_init - Initialize PM functions of given PCI device
1771 * @dev: PCI device to handle.
1772 */
1773void pci_pm_init(struct pci_dev *dev)
1774{
1775	int pm;
 
1776	u16 pmc;
1777
1778	pm_runtime_forbid(&dev->dev);
 
 
1779	device_enable_async_suspend(&dev->dev);
1780	dev->wakeup_prepared = false;
1781
1782	dev->pm_cap = 0;
 
1783
1784	/* find PCI PM capability in list */
1785	pm = pci_find_capability(dev, PCI_CAP_ID_PM);
1786	if (!pm)
1787		return;
1788	/* Check device's ability to generate PME# */
1789	pci_read_config_word(dev, pm + PCI_PM_PMC, &pmc);
1790
1791	if ((pmc & PCI_PM_CAP_VER_MASK) > 3) {
1792		dev_err(&dev->dev, "unsupported PM cap regs version (%u)\n",
1793			pmc & PCI_PM_CAP_VER_MASK);
1794		return;
1795	}
1796
1797	dev->pm_cap = pm;
1798	dev->d3_delay = PCI_PM_D3_WAIT;
 
 
 
1799
1800	dev->d1_support = false;
1801	dev->d2_support = false;
1802	if (!pci_no_d1d2(dev)) {
1803		if (pmc & PCI_PM_CAP_D1)
1804			dev->d1_support = true;
1805		if (pmc & PCI_PM_CAP_D2)
1806			dev->d2_support = true;
1807
1808		if (dev->d1_support || dev->d2_support)
1809			dev_printk(KERN_DEBUG, &dev->dev, "supports%s%s\n",
1810				   dev->d1_support ? " D1" : "",
1811				   dev->d2_support ? " D2" : "");
1812	}
1813
1814	pmc &= PCI_PM_CAP_PME_MASK;
1815	if (pmc) {
1816		dev_printk(KERN_DEBUG, &dev->dev,
1817			 "PME# supported from%s%s%s%s%s\n",
1818			 (pmc & PCI_PM_CAP_PME_D0) ? " D0" : "",
1819			 (pmc & PCI_PM_CAP_PME_D1) ? " D1" : "",
1820			 (pmc & PCI_PM_CAP_PME_D2) ? " D2" : "",
1821			 (pmc & PCI_PM_CAP_PME_D3) ? " D3hot" : "",
1822			 (pmc & PCI_PM_CAP_PME_D3cold) ? " D3cold" : "");
1823		dev->pme_support = pmc >> PCI_PM_CAP_PME_SHIFT;
 
1824		/*
1825		 * Make device's PM flags reflect the wake-up capability, but
1826		 * let the user space enable it to wake up the system as needed.
1827		 */
1828		device_set_wakeup_capable(&dev->dev, true);
1829		/* Disable the PME# generation functionality */
1830		pci_pme_active(dev, false);
1831	} else {
1832		dev->pme_support = 0;
1833	}
 
 
 
 
1834}
1835
1836/**
1837 * platform_pci_wakeup_init - init platform wakeup if present
1838 * @dev: PCI device
1839 *
1840 * Some devices don't have PCI PM caps but can still generate wakeup
1841 * events through platform methods (like ACPI events).  If @dev supports
1842 * platform wakeup events, set the device flag to indicate as much.  This
1843 * may be redundant if the device also supports PCI PM caps, but double
1844 * initialization should be safe in that case.
1845 */
1846void platform_pci_wakeup_init(struct pci_dev *dev)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1847{
1848	if (!platform_pci_can_wakeup(dev))
 
 
 
 
 
 
 
1849		return;
1850
1851	device_set_wakeup_capable(&dev->dev, true);
1852	platform_pci_sleep_wake(dev, false);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1853}
1854
1855/**
1856 * pci_add_save_buffer - allocate buffer for saving given capability registers
 
1857 * @dev: the PCI device
1858 * @cap: the capability to allocate the buffer for
 
1859 * @size: requested size of the buffer
1860 */
1861static int pci_add_cap_save_buffer(
1862	struct pci_dev *dev, char cap, unsigned int size)
1863{
1864	int pos;
1865	struct pci_cap_saved_state *save_state;
1866
1867	pos = pci_find_capability(dev, cap);
1868	if (pos <= 0)
 
 
 
 
1869		return 0;
1870
1871	save_state = kzalloc(sizeof(*save_state) + size, GFP_KERNEL);
1872	if (!save_state)
1873		return -ENOMEM;
1874
1875	save_state->cap.cap_nr = cap;
 
1876	save_state->cap.size = size;
1877	pci_add_saved_cap(dev, save_state);
1878
1879	return 0;
1880}
1881
 
 
 
 
 
 
 
 
 
 
1882/**
1883 * pci_allocate_cap_save_buffers - allocate buffers for saving capabilities
1884 * @dev: the PCI device
1885 */
1886void pci_allocate_cap_save_buffers(struct pci_dev *dev)
1887{
1888	int error;
1889
1890	error = pci_add_cap_save_buffer(dev, PCI_CAP_ID_EXP,
1891					PCI_EXP_SAVE_REGS * sizeof(u16));
1892	if (error)
1893		dev_err(&dev->dev,
1894			"unable to preallocate PCI Express save buffer\n");
1895
1896	error = pci_add_cap_save_buffer(dev, PCI_CAP_ID_PCIX, sizeof(u16));
1897	if (error)
1898		dev_err(&dev->dev,
1899			"unable to preallocate PCI-X save buffer\n");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1900}
1901
1902/**
1903 * pci_enable_ari - enable ARI forwarding if hardware support it
1904 * @dev: the PCI device
 
 
 
1905 */
1906void pci_enable_ari(struct pci_dev *dev)
1907{
1908	int pos;
1909	u32 cap;
1910	u16 flags, ctrl;
1911	struct pci_dev *bridge;
1912
1913	if (!pci_is_pcie(dev) || dev->devfn)
1914		return;
1915
1916	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI);
1917	if (!pos)
1918		return;
1919
1920	bridge = dev->bus->self;
1921	if (!bridge || !pci_is_pcie(bridge))
1922		return;
1923
1924	pos = pci_pcie_cap(bridge);
1925	if (!pos)
1926		return;
1927
1928	/* ARI is a PCIe v2 feature */
1929	pci_read_config_word(bridge, pos + PCI_EXP_FLAGS, &flags);
1930	if ((flags & PCI_EXP_FLAGS_VERS) < 2)
1931		return;
1932
1933	pci_read_config_dword(bridge, pos + PCI_EXP_DEVCAP2, &cap);
1934	if (!(cap & PCI_EXP_DEVCAP2_ARI))
1935		return;
1936
1937	pci_read_config_word(bridge, pos + PCI_EXP_DEVCTL2, &ctrl);
1938	ctrl |= PCI_EXP_DEVCTL2_ARI;
1939	pci_write_config_word(bridge, pos + PCI_EXP_DEVCTL2, ctrl);
1940
1941	bridge->ari_enabled = 1;
 
 
 
 
1942}
1943
1944/**
1945 * pci_enable_ido - enable ID-based ordering on a device
1946 * @dev: the PCI device
1947 * @type: which types of IDO to enable
1948 *
1949 * Enable ID-based ordering on @dev.  @type can contain the bits
1950 * %PCI_EXP_IDO_REQUEST and/or %PCI_EXP_IDO_COMPLETION to indicate
1951 * which types of transactions are allowed to be re-ordered.
1952 */
1953void pci_enable_ido(struct pci_dev *dev, unsigned long type)
1954{
1955	int pos;
1956	u16 ctrl;
1957
1958	pos = pci_pcie_cap(dev);
1959	if (!pos)
1960		return;
1961
1962	pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &ctrl);
1963	if (type & PCI_EXP_IDO_REQUEST)
1964		ctrl |= PCI_EXP_IDO_REQ_EN;
1965	if (type & PCI_EXP_IDO_COMPLETION)
1966		ctrl |= PCI_EXP_IDO_CMP_EN;
1967	pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, ctrl);
1968}
1969EXPORT_SYMBOL(pci_enable_ido);
1970
1971/**
1972 * pci_disable_ido - disable ID-based ordering on a device
1973 * @dev: the PCI device
1974 * @type: which types of IDO to disable
1975 */
1976void pci_disable_ido(struct pci_dev *dev, unsigned long type)
1977{
1978	int pos;
1979	u16 ctrl;
1980
1981	if (!pci_is_pcie(dev))
1982		return;
1983
1984	pos = pci_pcie_cap(dev);
1985	if (!pos)
1986		return;
 
 
 
 
1987
1988	pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &ctrl);
1989	if (type & PCI_EXP_IDO_REQUEST)
1990		ctrl &= ~PCI_EXP_IDO_REQ_EN;
1991	if (type & PCI_EXP_IDO_COMPLETION)
1992		ctrl &= ~PCI_EXP_IDO_CMP_EN;
1993	pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, ctrl);
1994}
1995EXPORT_SYMBOL(pci_disable_ido);
1996
1997/**
1998 * pci_enable_obff - enable optimized buffer flush/fill
1999 * @dev: PCI device
2000 * @type: type of signaling to use
2001 *
2002 * Try to enable @type OBFF signaling on @dev.  It will try using WAKE#
2003 * signaling if possible, falling back to message signaling only if
2004 * WAKE# isn't supported.  @type should indicate whether the PCIe link
2005 * be brought out of L0s or L1 to send the message.  It should be either
2006 * %PCI_EXP_OBFF_SIGNAL_ALWAYS or %PCI_OBFF_SIGNAL_L0.
2007 *
2008 * If your device can benefit from receiving all messages, even at the
2009 * power cost of bringing the link back up from a low power state, use
2010 * %PCI_EXP_OBFF_SIGNAL_ALWAYS.  Otherwise, use %PCI_OBFF_SIGNAL_L0 (the
2011 * preferred type).
2012 *
2013 * RETURNS:
2014 * Zero on success, appropriate error number on failure.
 
 
 
 
 
2015 */
2016int pci_enable_obff(struct pci_dev *dev, enum pci_obff_signal_type type)
2017{
2018	int pos;
2019	u32 cap;
2020	u16 ctrl;
2021	int ret;
2022
2023	if (!pci_is_pcie(dev))
2024		return -ENOTSUPP;
 
2025
2026	pos = pci_pcie_cap(dev);
2027	if (!pos)
2028		return -ENOTSUPP;
2029
2030	pci_read_config_dword(dev, pos + PCI_EXP_DEVCAP2, &cap);
2031	if (!(cap & PCI_EXP_OBFF_MASK))
2032		return -ENOTSUPP; /* no OBFF support at all */
2033
2034	/* Make sure the topology supports OBFF as well */
2035	if (dev->bus) {
2036		ret = pci_enable_obff(dev->bus->self, type);
2037		if (ret)
2038			return ret;
2039	}
2040
2041	pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &ctrl);
2042	if (cap & PCI_EXP_OBFF_WAKE)
2043		ctrl |= PCI_EXP_OBFF_WAKE_EN;
2044	else {
2045		switch (type) {
2046		case PCI_EXP_OBFF_SIGNAL_L0:
2047			if (!(ctrl & PCI_EXP_OBFF_WAKE_EN))
2048				ctrl |= PCI_EXP_OBFF_MSGA_EN;
2049			break;
2050		case PCI_EXP_OBFF_SIGNAL_ALWAYS:
2051			ctrl &= ~PCI_EXP_OBFF_WAKE_EN;
2052			ctrl |= PCI_EXP_OBFF_MSGB_EN;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2053			break;
2054		default:
2055			WARN(1, "bad OBFF signal type\n");
2056			return -ENOTSUPP;
2057		}
2058	}
2059	pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, ctrl);
2060
2061	return 0;
 
 
 
 
2062}
2063EXPORT_SYMBOL(pci_enable_obff);
2064
2065/**
2066 * pci_disable_obff - disable optimized buffer flush/fill
2067 * @dev: PCI device
 
 
2068 *
2069 * Disable OBFF on @dev.
 
2070 */
2071void pci_disable_obff(struct pci_dev *dev)
 
2072{
2073	int pos;
2074	u16 ctrl;
2075
2076	if (!pci_is_pcie(dev))
2077		return;
2078
2079	pos = pci_pcie_cap(dev);
2080	if (!pos)
2081		return;
2082
2083	pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &ctrl);
2084	ctrl &= ~PCI_EXP_OBFF_WAKE_EN;
2085	pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, ctrl);
 
 
 
 
2086}
2087EXPORT_SYMBOL(pci_disable_obff);
2088
2089/**
2090 * pci_ltr_supported - check whether a device supports LTR
2091 * @dev: PCI device
2092 *
2093 * RETURNS:
2094 * True if @dev supports latency tolerance reporting, false otherwise.
2095 */
2096bool pci_ltr_supported(struct pci_dev *dev)
2097{
2098	int pos;
2099	u32 cap;
2100
2101	if (!pci_is_pcie(dev))
2102		return false;
2103
2104	pos = pci_pcie_cap(dev);
2105	if (!pos)
2106		return false;
2107
2108	pci_read_config_dword(dev, pos + PCI_EXP_DEVCAP2, &cap);
2109
2110	return cap & PCI_EXP_DEVCAP2_LTR;
 
 
 
 
 
 
2111}
2112EXPORT_SYMBOL(pci_ltr_supported);
2113
2114/**
2115 * pci_enable_ltr - enable latency tolerance reporting
2116 * @dev: PCI device
 
2117 *
2118 * Enable LTR on @dev if possible, which means enabling it first on
2119 * upstream ports.
2120 *
2121 * RETURNS:
2122 * Zero on success, errno on failure.
2123 */
2124int pci_enable_ltr(struct pci_dev *dev)
2125{
2126	int pos;
2127	u16 ctrl;
2128	int ret;
2129
2130	if (!pci_ltr_supported(dev))
2131		return -ENOTSUPP;
2132
2133	pos = pci_pcie_cap(dev);
2134	if (!pos)
2135		return -ENOTSUPP;
2136
2137	/* Only primary function can enable/disable LTR */
2138	if (PCI_FUNC(dev->devfn) != 0)
2139		return -EINVAL;
2140
2141	/* Enable upstream ports first */
2142	if (dev->bus) {
2143		ret = pci_enable_ltr(dev->bus->self);
2144		if (ret)
2145			return ret;
2146	}
2147
2148	pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &ctrl);
2149	ctrl |= PCI_EXP_LTR_EN;
2150	pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, ctrl);
 
 
2151
2152	return 0;
2153}
2154EXPORT_SYMBOL(pci_enable_ltr);
2155
2156/**
2157 * pci_disable_ltr - disable latency tolerance reporting
2158 * @dev: PCI device
 
 
 
 
2159 */
2160void pci_disable_ltr(struct pci_dev *dev)
2161{
2162	int pos;
2163	u16 ctrl;
2164
2165	if (!pci_ltr_supported(dev))
2166		return;
2167
2168	pos = pci_pcie_cap(dev);
2169	if (!pos)
2170		return;
2171
2172	/* Only primary function can enable/disable LTR */
2173	if (PCI_FUNC(dev->devfn) != 0)
2174		return;
2175
2176	pci_read_config_word(dev, pos + PCI_EXP_DEVCTL2, &ctrl);
2177	ctrl &= ~PCI_EXP_LTR_EN;
2178	pci_write_config_word(dev, pos + PCI_EXP_DEVCTL2, ctrl);
2179}
2180EXPORT_SYMBOL(pci_disable_ltr);
2181
2182static int __pci_ltr_scale(int *val)
2183{
2184	int scale = 0;
 
2185
2186	while (*val > 1023) {
2187		*val = (*val + 31) / 32;
2188		scale++;
2189	}
2190	return scale;
2191}
 
2192
2193/**
2194 * pci_set_ltr - set LTR latency values
2195 * @dev: PCI device
2196 * @snoop_lat_ns: snoop latency in nanoseconds
2197 * @nosnoop_lat_ns: nosnoop latency in nanoseconds
2198 *
2199 * Figure out the scale and set the LTR values accordingly.
 
2200 */
2201int pci_set_ltr(struct pci_dev *dev, int snoop_lat_ns, int nosnoop_lat_ns)
2202{
2203	int pos, ret, snoop_scale, nosnoop_scale;
2204	u16 val;
2205
2206	if (!pci_ltr_supported(dev))
2207		return -ENOTSUPP;
2208
2209	snoop_scale = __pci_ltr_scale(&snoop_lat_ns);
2210	nosnoop_scale = __pci_ltr_scale(&nosnoop_lat_ns);
2211
2212	if (snoop_lat_ns > PCI_LTR_VALUE_MASK ||
2213	    nosnoop_lat_ns > PCI_LTR_VALUE_MASK)
2214		return -EINVAL;
2215
2216	if ((snoop_scale > (PCI_LTR_SCALE_MASK >> PCI_LTR_SCALE_SHIFT)) ||
2217	    (nosnoop_scale > (PCI_LTR_SCALE_MASK >> PCI_LTR_SCALE_SHIFT)))
2218		return -EINVAL;
2219
2220	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_LTR);
2221	if (!pos)
2222		return -ENOTSUPP;
2223
2224	val = (snoop_scale << PCI_LTR_SCALE_SHIFT) | snoop_lat_ns;
2225	ret = pci_write_config_word(dev, pos + PCI_LTR_MAX_SNOOP_LAT, val);
2226	if (ret != 4)
2227		return -EIO;
2228
2229	val = (nosnoop_scale << PCI_LTR_SCALE_SHIFT) | nosnoop_lat_ns;
2230	ret = pci_write_config_word(dev, pos + PCI_LTR_MAX_NOSNOOP_LAT, val);
2231	if (ret != 4)
2232		return -EIO;
2233
2234	return 0;
 
2235}
2236EXPORT_SYMBOL(pci_set_ltr);
2237
2238static int pci_acs_enable;
2239
2240/**
2241 * pci_request_acs - ask for ACS to be enabled if supported
 
 
 
 
 
 
2242 */
2243void pci_request_acs(void)
2244{
2245	pci_acs_enable = 1;
 
 
 
 
 
 
 
 
 
 
 
2246}
2247
2248/**
2249 * pci_enable_acs - enable ACS if hardware support it
2250 * @dev: the PCI device
 
 
 
 
 
 
 
 
 
2251 */
2252void pci_enable_acs(struct pci_dev *dev)
2253{
2254	int pos;
2255	u16 cap;
2256	u16 ctrl;
2257
2258	if (!pci_acs_enable)
2259		return;
 
 
 
 
 
2260
2261	if (!pci_is_pcie(dev))
2262		return;
2263
2264	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS);
2265	if (!pos)
2266		return;
2267
2268	pci_read_config_word(dev, pos + PCI_ACS_CAP, &cap);
2269	pci_read_config_word(dev, pos + PCI_ACS_CTRL, &ctrl);
2270
2271	/* Source Validation */
2272	ctrl |= (cap & PCI_ACS_SV);
2273
2274	/* P2P Request Redirect */
2275	ctrl |= (cap & PCI_ACS_RR);
2276
2277	/* P2P Completion Redirect */
2278	ctrl |= (cap & PCI_ACS_CR);
2279
2280	/* Upstream Forwarding */
2281	ctrl |= (cap & PCI_ACS_UF);
 
 
 
 
2282
2283	pci_write_config_word(dev, pos + PCI_ACS_CTRL, ctrl);
2284}
 
 
 
 
 
 
2285
2286/**
2287 * pci_swizzle_interrupt_pin - swizzle INTx for device behind bridge
2288 * @dev: the PCI device
2289 * @pin: the INTx pin (1=INTA, 2=INTB, 3=INTD, 4=INTD)
2290 *
2291 * Perform INTx swizzling for a device behind one level of bridge.  This is
2292 * required by section 9.1 of the PCI-to-PCI bridge specification for devices
2293 * behind bridges on add-in cards.  For devices with ARI enabled, the slot
2294 * number is always 0 (see the Implementation Note in section 2.2.8.1 of
2295 * the PCI Express Base Specification, Revision 2.1)
2296 */
2297u8 pci_swizzle_interrupt_pin(struct pci_dev *dev, u8 pin)
2298{
2299	int slot;
2300
2301	if (pci_ari_enabled(dev->bus))
2302		slot = 0;
2303	else
2304		slot = PCI_SLOT(dev->devfn);
2305
2306	return (((pin - 1) + slot) % 4) + 1;
2307}
 
 
 
 
 
2308
2309int
2310pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge)
2311{
2312	u8 pin;
 
 
2313
2314	pin = dev->pin;
2315	if (!pin)
2316		return -1;
 
 
 
 
2317
2318	while (!pci_is_root_bus(dev->bus)) {
2319		pin = pci_swizzle_interrupt_pin(dev, pin);
2320		dev = dev->bus->self;
2321	}
2322	*bridge = dev;
2323	return pin;
2324}
2325
2326/**
2327 * pci_common_swizzle - swizzle INTx all the way to root bridge
2328 * @dev: the PCI device
2329 * @pinp: pointer to the INTx pin value (1=INTA, 2=INTB, 3=INTD, 4=INTD)
2330 *
2331 * Perform INTx swizzling for a device.  This traverses through all PCI-to-PCI
2332 * bridges all the way up to a PCI root bus.
2333 */
2334u8 pci_common_swizzle(struct pci_dev *dev, u8 *pinp)
2335{
2336	u8 pin = *pinp;
2337
2338	while (!pci_is_root_bus(dev->bus)) {
2339		pin = pci_swizzle_interrupt_pin(dev, pin);
2340		dev = dev->bus->self;
2341	}
2342	*pinp = pin;
2343	return PCI_SLOT(dev->devfn);
2344}
 
2345
2346/**
2347 *	pci_release_region - Release a PCI bar
2348 *	@pdev: PCI device whose resources were previously reserved by pci_request_region
2349 *	@bar: BAR to release
 
2350 *
2351 *	Releases the PCI I/O and memory resources previously reserved by a
2352 *	successful call to pci_request_region.  Call this function only
2353 *	after all use of the PCI regions has ceased.
2354 */
2355void pci_release_region(struct pci_dev *pdev, int bar)
2356{
2357	struct pci_devres *dr;
 
 
 
 
 
 
 
 
2358
2359	if (pci_resource_len(pdev, bar) == 0)
2360		return;
2361	if (pci_resource_flags(pdev, bar) & IORESOURCE_IO)
2362		release_region(pci_resource_start(pdev, bar),
2363				pci_resource_len(pdev, bar));
2364	else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM)
2365		release_mem_region(pci_resource_start(pdev, bar),
2366				pci_resource_len(pdev, bar));
2367
2368	dr = find_pci_dr(pdev);
2369	if (dr)
2370		dr->region_mask &= ~(1 << bar);
2371}
 
2372
2373/**
2374 *	__pci_request_region - Reserved PCI I/O and memory resource
2375 *	@pdev: PCI device whose resources are to be reserved
2376 *	@bar: BAR to be reserved
2377 *	@res_name: Name to be associated with resource.
2378 *	@exclusive: whether the region access is exclusive or not
 
 
2379 *
2380 *	Mark the PCI region associated with PCI device @pdev BR @bar as
2381 *	being reserved by owner @res_name.  Do not access any
2382 *	address inside the PCI regions unless this call returns
2383 *	successfully.
2384 *
2385 *	If @exclusive is set, then the region is marked so that userspace
2386 *	is explicitly not allowed to map the resource via /dev/mem or
2387 * 	sysfs MMIO access.
2388 *
2389 *	Returns 0 on success, or %EBUSY on error.  A warning
2390 *	message is also printed on failure.
2391 */
2392static int __pci_request_region(struct pci_dev *pdev, int bar, const char *res_name,
2393									int exclusive)
2394{
2395	struct pci_devres *dr;
 
 
 
 
 
2396
2397	if (pci_resource_len(pdev, bar) == 0)
2398		return 0;
2399		
2400	if (pci_resource_flags(pdev, bar) & IORESOURCE_IO) {
2401		if (!request_region(pci_resource_start(pdev, bar),
2402			    pci_resource_len(pdev, bar), res_name))
2403			goto err_out;
2404	}
2405	else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM) {
2406		if (!__request_mem_region(pci_resource_start(pdev, bar),
2407					pci_resource_len(pdev, bar), res_name,
2408					exclusive))
2409			goto err_out;
2410	}
2411
2412	dr = find_pci_dr(pdev);
2413	if (dr)
2414		dr->region_mask |= 1 << bar;
2415
2416	return 0;
2417
2418err_out:
2419	dev_warn(&pdev->dev, "BAR %d: can't reserve %pR\n", bar,
2420		 &pdev->resource[bar]);
2421	return -EBUSY;
2422}
2423
2424/**
2425 *	pci_request_region - Reserve PCI I/O and memory resource
2426 *	@pdev: PCI device whose resources are to be reserved
2427 *	@bar: BAR to be reserved
2428 *	@res_name: Name to be associated with resource
2429 *
2430 *	Mark the PCI region associated with PCI device @pdev BAR @bar as
2431 *	being reserved by owner @res_name.  Do not access any
2432 *	address inside the PCI regions unless this call returns
2433 *	successfully.
2434 *
2435 *	Returns 0 on success, or %EBUSY on error.  A warning
2436 *	message is also printed on failure.
 
 
 
 
 
 
 
 
 
 
 
 
2437 */
2438int pci_request_region(struct pci_dev *pdev, int bar, const char *res_name)
2439{
2440	return __pci_request_region(pdev, bar, res_name, 0);
2441}
 
2442
2443/**
2444 *	pci_request_region_exclusive - Reserved PCI I/O and memory resource
2445 *	@pdev: PCI device whose resources are to be reserved
2446 *	@bar: BAR to be reserved
2447 *	@res_name: Name to be associated with resource.
2448 *
2449 *	Mark the PCI region associated with PCI device @pdev BR @bar as
2450 *	being reserved by owner @res_name.  Do not access any
2451 *	address inside the PCI regions unless this call returns
2452 *	successfully.
2453 *
2454 *	Returns 0 on success, or %EBUSY on error.  A warning
2455 *	message is also printed on failure.
2456 *
2457 *	The key difference that _exclusive makes it that userspace is
2458 *	explicitly not allowed to map the resource via /dev/mem or
2459 * 	sysfs.
2460 */
2461int pci_request_region_exclusive(struct pci_dev *pdev, int bar, const char *res_name)
2462{
2463	return __pci_request_region(pdev, bar, res_name, IORESOURCE_EXCLUSIVE);
2464}
2465/**
2466 * pci_release_selected_regions - Release selected PCI I/O and memory resources
2467 * @pdev: PCI device whose resources were previously reserved
2468 * @bars: Bitmask of BARs to be released
2469 *
2470 * Release selected PCI I/O and memory resources previously reserved.
2471 * Call this function only after all use of the PCI regions has ceased.
2472 */
2473void pci_release_selected_regions(struct pci_dev *pdev, int bars)
2474{
2475	int i;
2476
2477	for (i = 0; i < 6; i++)
2478		if (bars & (1 << i))
2479			pci_release_region(pdev, i);
2480}
 
2481
2482int __pci_request_selected_regions(struct pci_dev *pdev, int bars,
2483				 const char *res_name, int excl)
2484{
2485	int i;
2486
2487	for (i = 0; i < 6; i++)
2488		if (bars & (1 << i))
2489			if (__pci_request_region(pdev, i, res_name, excl))
2490				goto err_out;
2491	return 0;
2492
2493err_out:
2494	while(--i >= 0)
2495		if (bars & (1 << i))
2496			pci_release_region(pdev, i);
2497
2498	return -EBUSY;
2499}
2500
2501
2502/**
2503 * pci_request_selected_regions - Reserve selected PCI I/O and memory resources
2504 * @pdev: PCI device whose resources are to be reserved
2505 * @bars: Bitmask of BARs to be requested
2506 * @res_name: Name to be associated with resource
 
 
 
 
 
 
 
2507 */
2508int pci_request_selected_regions(struct pci_dev *pdev, int bars,
2509				 const char *res_name)
2510{
2511	return __pci_request_selected_regions(pdev, bars, res_name, 0);
2512}
 
2513
2514int pci_request_selected_regions_exclusive(struct pci_dev *pdev,
2515				 int bars, const char *res_name)
 
 
 
 
 
 
 
 
 
 
 
 
 
2516{
2517	return __pci_request_selected_regions(pdev, bars, res_name,
2518			IORESOURCE_EXCLUSIVE);
2519}
 
2520
2521/**
2522 *	pci_release_regions - Release reserved PCI I/O and memory resources
2523 *	@pdev: PCI device whose resources were previously reserved by pci_request_regions
2524 *
2525 *	Releases all PCI I/O and memory resources previously reserved by a
2526 *	successful call to pci_request_regions.  Call this function only
2527 *	after all use of the PCI regions has ceased.
 
2528 */
2529
2530void pci_release_regions(struct pci_dev *pdev)
2531{
2532	pci_release_selected_regions(pdev, (1 << 6) - 1);
2533}
 
2534
2535/**
2536 *	pci_request_regions - Reserved PCI I/O and memory resources
2537 *	@pdev: PCI device whose resources are to be reserved
2538 *	@res_name: Name to be associated with resource.
2539 *
2540 *	Mark all PCI regions associated with PCI device @pdev as
2541 *	being reserved by owner @res_name.  Do not access any
2542 *	address inside the PCI regions unless this call returns
2543 *	successfully.
2544 *
2545 *	Returns 0 on success, or %EBUSY on error.  A warning
2546 *	message is also printed on failure.
 
 
 
 
 
 
 
 
 
 
2547 */
2548int pci_request_regions(struct pci_dev *pdev, const char *res_name)
2549{
2550	return pci_request_selected_regions(pdev, ((1 << 6) - 1), res_name);
 
2551}
 
2552
2553/**
2554 *	pci_request_regions_exclusive - Reserved PCI I/O and memory resources
2555 *	@pdev: PCI device whose resources are to be reserved
2556 *	@res_name: Name to be associated with resource.
2557 *
2558 *	Mark all PCI regions associated with PCI device @pdev as
2559 *	being reserved by owner @res_name.  Do not access any
2560 *	address inside the PCI regions unless this call returns
2561 *	successfully.
2562 *
2563 *	pci_request_regions_exclusive() will mark the region so that
2564 * 	/dev/mem and the sysfs MMIO access will not be allowed.
 
2565 *
2566 *	Returns 0 on success, or %EBUSY on error.  A warning
2567 *	message is also printed on failure.
 
 
 
 
 
 
 
 
2568 */
2569int pci_request_regions_exclusive(struct pci_dev *pdev, const char *res_name)
2570{
2571	return pci_request_selected_regions_exclusive(pdev,
2572					((1 << 6) - 1), res_name);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2573}
 
2574
2575static void __pci_set_master(struct pci_dev *dev, bool enable)
2576{
2577	u16 old_cmd, cmd;
2578
2579	pci_read_config_word(dev, PCI_COMMAND, &old_cmd);
2580	if (enable)
2581		cmd = old_cmd | PCI_COMMAND_MASTER;
2582	else
2583		cmd = old_cmd & ~PCI_COMMAND_MASTER;
2584	if (cmd != old_cmd) {
2585		dev_dbg(&dev->dev, "%s bus mastering\n",
2586			enable ? "enabling" : "disabling");
2587		pci_write_config_word(dev, PCI_COMMAND, cmd);
2588	}
2589	dev->is_busmaster = enable;
2590}
2591
2592/**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2593 * pci_set_master - enables bus-mastering for device dev
2594 * @dev: the PCI device to enable
2595 *
2596 * Enables bus-mastering on the device and calls pcibios_set_master()
2597 * to do the needed arch specific settings.
2598 */
2599void pci_set_master(struct pci_dev *dev)
2600{
2601	__pci_set_master(dev, true);
2602	pcibios_set_master(dev);
2603}
 
2604
2605/**
2606 * pci_clear_master - disables bus-mastering for device dev
2607 * @dev: the PCI device to disable
2608 */
2609void pci_clear_master(struct pci_dev *dev)
2610{
2611	__pci_set_master(dev, false);
2612}
 
2613
2614/**
2615 * pci_set_cacheline_size - ensure the CACHE_LINE_SIZE register is programmed
2616 * @dev: the PCI device for which MWI is to be enabled
2617 *
2618 * Helper function for pci_set_mwi.
2619 * Originally copied from drivers/net/acenic.c.
2620 * Copyright 1998-2001 by Jes Sorensen, <jes@trained-monkey.org>.
2621 *
2622 * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
2623 */
2624int pci_set_cacheline_size(struct pci_dev *dev)
2625{
2626	u8 cacheline_size;
2627
2628	if (!pci_cache_line_size)
2629		return -EINVAL;
2630
2631	/* Validate current setting: the PCI_CACHE_LINE_SIZE must be
2632	   equal to or multiple of the right value. */
2633	pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cacheline_size);
2634	if (cacheline_size >= pci_cache_line_size &&
2635	    (cacheline_size % pci_cache_line_size) == 0)
2636		return 0;
2637
2638	/* Write the correct value. */
2639	pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, pci_cache_line_size);
2640	/* Read it back. */
2641	pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cacheline_size);
2642	if (cacheline_size == pci_cache_line_size)
2643		return 0;
2644
2645	dev_printk(KERN_DEBUG, &dev->dev, "cache line size of %d is not "
2646		   "supported\n", pci_cache_line_size << 2);
2647
2648	return -EINVAL;
2649}
2650EXPORT_SYMBOL_GPL(pci_set_cacheline_size);
2651
2652#ifdef PCI_DISABLE_MWI
2653int pci_set_mwi(struct pci_dev *dev)
2654{
2655	return 0;
2656}
2657
2658int pci_try_set_mwi(struct pci_dev *dev)
2659{
2660	return 0;
2661}
2662
2663void pci_clear_mwi(struct pci_dev *dev)
2664{
2665}
2666
2667#else
2668
2669/**
2670 * pci_set_mwi - enables memory-write-invalidate PCI transaction
2671 * @dev: the PCI device for which MWI is enabled
2672 *
2673 * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND.
2674 *
2675 * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
2676 */
2677int
2678pci_set_mwi(struct pci_dev *dev)
2679{
 
 
 
2680	int rc;
2681	u16 cmd;
2682
2683	rc = pci_set_cacheline_size(dev);
2684	if (rc)
2685		return rc;
2686
2687	pci_read_config_word(dev, PCI_COMMAND, &cmd);
2688	if (! (cmd & PCI_COMMAND_INVALIDATE)) {
2689		dev_dbg(&dev->dev, "enabling Mem-Wr-Inval\n");
2690		cmd |= PCI_COMMAND_INVALIDATE;
2691		pci_write_config_word(dev, PCI_COMMAND, cmd);
2692	}
2693	
2694	return 0;
 
2695}
 
2696
2697/**
2698 * pci_try_set_mwi - enables memory-write-invalidate PCI transaction
2699 * @dev: the PCI device for which MWI is enabled
2700 *
2701 * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND.
2702 * Callers are not required to check the return value.
2703 *
2704 * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
2705 */
2706int pci_try_set_mwi(struct pci_dev *dev)
2707{
2708	int rc = pci_set_mwi(dev);
2709	return rc;
 
 
 
2710}
 
2711
2712/**
2713 * pci_clear_mwi - disables Memory-Write-Invalidate for device dev
2714 * @dev: the PCI device to disable
2715 *
2716 * Disables PCI Memory-Write-Invalidate transaction on the device
2717 */
2718void
2719pci_clear_mwi(struct pci_dev *dev)
2720{
 
2721	u16 cmd;
2722
2723	pci_read_config_word(dev, PCI_COMMAND, &cmd);
2724	if (cmd & PCI_COMMAND_INVALIDATE) {
2725		cmd &= ~PCI_COMMAND_INVALIDATE;
2726		pci_write_config_word(dev, PCI_COMMAND, cmd);
2727	}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2728}
2729#endif /* ! PCI_DISABLE_MWI */
2730
2731/**
2732 * pci_intx - enables/disables PCI INTx for device dev
2733 * @pdev: the PCI device to operate on
2734 * @enable: boolean: whether to enable or disable PCI INTx
2735 *
2736 * Enables/disables PCI INTx for device dev
2737 */
2738void
2739pci_intx(struct pci_dev *pdev, int enable)
2740{
2741	u16 pci_command, new;
2742
2743	pci_read_config_word(pdev, PCI_COMMAND, &pci_command);
2744
2745	if (enable) {
2746		new = pci_command & ~PCI_COMMAND_INTX_DISABLE;
2747	} else {
2748		new = pci_command | PCI_COMMAND_INTX_DISABLE;
2749	}
2750
2751	if (new != pci_command) {
2752		struct pci_devres *dr;
2753
2754		pci_write_config_word(pdev, PCI_COMMAND, new);
 
2755
2756		dr = find_pci_dr(pdev);
2757		if (dr && !dr->restore_intx) {
2758			dr->restore_intx = 1;
2759			dr->orig_intx = !enable;
2760		}
2761	}
2762}
 
2763
2764/**
2765 * pci_msi_off - disables any msi or msix capabilities
2766 * @dev: the PCI device to operate on
2767 *
2768 * If you want to use msi see pci_enable_msi and friends.
2769 * This is a lower level primitive that allows us to disable
2770 * msi operation at the device level.
2771 */
2772void pci_msi_off(struct pci_dev *dev)
2773{
2774	int pos;
2775	u16 control;
2776
2777	pos = pci_find_capability(dev, PCI_CAP_ID_MSI);
2778	if (pos) {
2779		pci_read_config_word(dev, pos + PCI_MSI_FLAGS, &control);
2780		control &= ~PCI_MSI_FLAGS_ENABLE;
2781		pci_write_config_word(dev, pos + PCI_MSI_FLAGS, control);
2782	}
2783	pos = pci_find_capability(dev, PCI_CAP_ID_MSIX);
2784	if (pos) {
2785		pci_read_config_word(dev, pos + PCI_MSIX_FLAGS, &control);
2786		control &= ~PCI_MSIX_FLAGS_ENABLE;
2787		pci_write_config_word(dev, pos + PCI_MSIX_FLAGS, control);
2788	}
2789}
2790EXPORT_SYMBOL_GPL(pci_msi_off);
2791
2792int pci_set_dma_max_seg_size(struct pci_dev *dev, unsigned int size)
 
 
 
 
 
 
 
2793{
2794	return dma_set_max_seg_size(&dev->dev, size);
2795}
2796EXPORT_SYMBOL(pci_set_dma_max_seg_size);
2797
2798int pci_set_dma_seg_boundary(struct pci_dev *dev, unsigned long mask)
2799{
2800	return dma_set_seg_boundary(&dev->dev, mask);
 
 
 
 
 
 
 
 
 
 
2801}
2802EXPORT_SYMBOL(pci_set_dma_seg_boundary);
2803
2804static int pcie_flr(struct pci_dev *dev, int probe)
 
 
 
 
 
 
 
2805{
2806	int i;
2807	int pos;
2808	u32 cap;
2809	u16 status, control;
2810
2811	pos = pci_pcie_cap(dev);
2812	if (!pos)
2813		return -ENOTTY;
2814
2815	pci_read_config_dword(dev, pos + PCI_EXP_DEVCAP, &cap);
2816	if (!(cap & PCI_EXP_DEVCAP_FLR))
2817		return -ENOTTY;
2818
2819	if (probe)
2820		return 0;
2821
2822	/* Wait for Transaction Pending bit clean */
2823	for (i = 0; i < 4; i++) {
2824		if (i)
2825			msleep((1 << (i - 1)) * 100);
2826
2827		pci_read_config_word(dev, pos + PCI_EXP_DEVSTA, &status);
2828		if (!(status & PCI_EXP_DEVSTA_TRPND))
2829			goto clear;
2830	}
2831
2832	dev_err(&dev->dev, "transaction is not cleared; "
2833			"proceeding with reset anyway\n");
2834
2835clear:
2836	pci_read_config_word(dev, pos + PCI_EXP_DEVCTL, &control);
2837	control |= PCI_EXP_DEVCTL_BCR_FLR;
2838	pci_write_config_word(dev, pos + PCI_EXP_DEVCTL, control);
2839
2840	msleep(100);
2841
2842	return 0;
2843}
 
2844
2845static int pci_af_flr(struct pci_dev *dev, int probe)
2846{
2847	int i;
2848	int pos;
2849	u8 cap;
2850	u8 status;
2851
2852	pos = pci_find_capability(dev, PCI_CAP_ID_AF);
2853	if (!pos)
2854		return -ENOTTY;
2855
 
 
 
2856	pci_read_config_byte(dev, pos + PCI_AF_CAP, &cap);
2857	if (!(cap & PCI_AF_CAP_TP) || !(cap & PCI_AF_CAP_FLR))
2858		return -ENOTTY;
2859
2860	if (probe)
2861		return 0;
2862
2863	/* Wait for Transaction Pending bit clean */
2864	for (i = 0; i < 4; i++) {
2865		if (i)
2866			msleep((1 << (i - 1)) * 100);
 
 
 
 
2867
2868		pci_read_config_byte(dev, pos + PCI_AF_STATUS, &status);
2869		if (!(status & PCI_AF_STATUS_TP))
2870			goto clear;
2871	}
2872
2873	dev_err(&dev->dev, "transaction is not cleared; "
2874			"proceeding with reset anyway\n");
2875
2876clear:
2877	pci_write_config_byte(dev, pos + PCI_AF_CTRL, PCI_AF_CTRL_FLR);
 
 
 
 
2878	msleep(100);
2879
2880	return 0;
2881}
2882
2883/**
2884 * pci_pm_reset - Put device into PCI_D3 and back into PCI_D0.
2885 * @dev: Device to reset.
2886 * @probe: If set, only check if the device can be reset this way.
2887 *
2888 * If @dev supports native PCI PM and its PCI_PM_CTRL_NO_SOFT_RESET flag is
2889 * unset, it will be reinitialized internally when going from PCI_D3hot to
2890 * PCI_D0.  If that's the case and the device is not in a low-power state
2891 * already, force it into PCI_D3hot and back to PCI_D0, causing it to be reset.
2892 *
2893 * NOTE: This causes the caller to sleep for twice the device power transition
2894 * cooldown period, which for the D0->D3hot and D3hot->D0 transitions is 10 ms
2895 * by devault (i.e. unless the @dev's d3_delay field has a different value).
2896 * Moreover, only devices in D0 can be reset by this function.
2897 */
2898static int pci_pm_reset(struct pci_dev *dev, int probe)
2899{
2900	u16 csr;
2901
2902	if (!dev->pm_cap)
2903		return -ENOTTY;
2904
2905	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &csr);
2906	if (csr & PCI_PM_CTRL_NO_SOFT_RESET)
2907		return -ENOTTY;
2908
2909	if (probe)
2910		return 0;
2911
2912	if (dev->current_state != PCI_D0)
2913		return -EINVAL;
2914
2915	csr &= ~PCI_PM_CTRL_STATE_MASK;
2916	csr |= PCI_D3hot;
2917	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, csr);
2918	pci_dev_d3_sleep(dev);
2919
2920	csr &= ~PCI_PM_CTRL_STATE_MASK;
2921	csr |= PCI_D0;
2922	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, csr);
2923	pci_dev_d3_sleep(dev);
2924
2925	return 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2926}
2927
2928static int pci_parent_bus_reset(struct pci_dev *dev, int probe)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2929{
2930	u16 ctrl;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2931	struct pci_dev *pdev;
2932
2933	if (pci_is_root_bus(dev->bus) || dev->subordinate || !dev->bus->self)
 
2934		return -ENOTTY;
2935
2936	list_for_each_entry(pdev, &dev->bus->devices, bus_list)
2937		if (pdev != dev)
2938			return -ENOTTY;
2939
2940	if (probe)
2941		return 0;
2942
2943	pci_read_config_word(dev->bus->self, PCI_BRIDGE_CONTROL, &ctrl);
2944	ctrl |= PCI_BRIDGE_CTL_BUS_RESET;
2945	pci_write_config_word(dev->bus->self, PCI_BRIDGE_CONTROL, ctrl);
2946	msleep(100);
2947
2948	ctrl &= ~PCI_BRIDGE_CTL_BUS_RESET;
2949	pci_write_config_word(dev->bus->self, PCI_BRIDGE_CONTROL, ctrl);
2950	msleep(100);
2951
2952	return 0;
 
 
 
 
 
 
 
 
2953}
2954
2955static int pci_dev_reset(struct pci_dev *dev, int probe)
2956{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2957	int rc;
2958
2959	might_sleep();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2960
2961	if (!probe) {
2962		pci_block_user_cfg_access(dev);
2963		/* block PM suspend, driver probe, etc. */
2964		device_lock(&dev->dev);
 
 
 
 
 
 
 
 
 
 
2965	}
2966
2967	rc = pci_dev_specific_reset(dev, probe);
2968	if (rc != -ENOTTY)
2969		goto done;
 
 
2970
2971	rc = pcie_flr(dev, probe);
2972	if (rc != -ENOTTY)
2973		goto done;
 
 
2974
2975	rc = pci_af_flr(dev, probe);
2976	if (rc != -ENOTTY)
2977		goto done;
2978
2979	rc = pci_pm_reset(dev, probe);
2980	if (rc != -ENOTTY)
2981		goto done;
2982
2983	rc = pci_parent_bus_reset(dev, probe);
2984done:
2985	if (!probe) {
2986		device_unlock(&dev->dev);
2987		pci_unblock_user_cfg_access(dev);
 
 
 
 
 
 
 
 
2988	}
2989
 
 
 
 
 
 
2990	return rc;
2991}
2992
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2993/**
2994 * __pci_reset_function - reset a PCI device function
 
2995 * @dev: PCI device to reset
2996 *
2997 * Some devices allow an individual function to be reset without affecting
2998 * other functions in the same device.  The PCI device must be responsive
2999 * to PCI config space in order to use this function.
3000 *
3001 * The device function is presumed to be unused when this function is called.
 
 
3002 * Resetting the device will make the contents of PCI configuration space
3003 * random, so any caller of this must be prepared to reinitialise the
3004 * device including MSI, bus mastering, BARs, decoding IO and memory spaces,
3005 * etc.
3006 *
3007 * Returns 0 if the device function was successfully reset or negative if the
3008 * device doesn't support resetting a single function.
3009 */
3010int __pci_reset_function(struct pci_dev *dev)
3011{
3012	return pci_dev_reset(dev, 0);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3013}
3014EXPORT_SYMBOL_GPL(__pci_reset_function);
3015
3016/**
3017 * pci_probe_reset_function - check whether the device can be safely reset
3018 * @dev: PCI device to reset
3019 *
3020 * Some devices allow an individual function to be reset without affecting
3021 * other functions in the same device.  The PCI device must be responsive
3022 * to PCI config space in order to use this function.
3023 *
3024 * Returns 0 if the device function can be reset or negative if the
 
 
 
 
 
3025 * device doesn't support resetting a single function.
3026 */
3027int pci_probe_reset_function(struct pci_dev *dev)
3028{
3029	return pci_dev_reset(dev, 1);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3030}
 
3031
3032/**
3033 * pci_reset_function - quiesce and reset a PCI device function
3034 * @dev: PCI device to reset
3035 *
3036 * Some devices allow an individual function to be reset without affecting
3037 * other functions in the same device.  The PCI device must be responsive
3038 * to PCI config space in order to use this function.
3039 *
3040 * This function does not just reset the PCI portion of a device, but
3041 * clears all the state associated with the device.  This function differs
3042 * from __pci_reset_function in that it saves and restores device state
3043 * over the reset.
 
3044 *
3045 * Returns 0 if the device function was successfully reset or negative if the
3046 * device doesn't support resetting a single function.
3047 */
3048int pci_reset_function(struct pci_dev *dev)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3049{
3050	int rc;
3051
3052	rc = pci_dev_reset(dev, 1);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3053	if (rc)
3054		return rc;
3055
3056	pci_save_state(dev);
 
 
 
 
 
 
 
3057
3058	/*
3059	 * both INTx and MSI are disabled after the Interrupt Disable bit
3060	 * is set and the Bus Master bit is cleared.
3061	 */
3062	pci_write_config_word(dev, PCI_COMMAND, PCI_COMMAND_INTX_DISABLE);
3063
3064	rc = pci_dev_reset(dev, 0);
 
 
3065
3066	pci_restore_state(dev);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3067
3068	return rc;
3069}
3070EXPORT_SYMBOL_GPL(pci_reset_function);
 
 
 
 
 
 
 
 
 
 
 
 
3071
3072/**
3073 * pcix_get_max_mmrbc - get PCI-X maximum designed memory read byte count
3074 * @dev: PCI device to query
3075 *
3076 * Returns mmrbc: maximum designed memory read count in bytes
3077 *    or appropriate error value.
3078 */
3079int pcix_get_max_mmrbc(struct pci_dev *dev)
3080{
3081	int cap;
3082	u32 stat;
3083
3084	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
3085	if (!cap)
3086		return -EINVAL;
3087
3088	if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat))
3089		return -EINVAL;
3090
3091	return 512 << ((stat & PCI_X_STATUS_MAX_READ) >> 21);
3092}
3093EXPORT_SYMBOL(pcix_get_max_mmrbc);
3094
3095/**
3096 * pcix_get_mmrbc - get PCI-X maximum memory read byte count
3097 * @dev: PCI device to query
3098 *
3099 * Returns mmrbc: maximum memory read count in bytes
3100 *    or appropriate error value.
3101 */
3102int pcix_get_mmrbc(struct pci_dev *dev)
3103{
3104	int cap;
3105	u16 cmd;
3106
3107	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
3108	if (!cap)
3109		return -EINVAL;
3110
3111	if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd))
3112		return -EINVAL;
3113
3114	return 512 << ((cmd & PCI_X_CMD_MAX_READ) >> 2);
3115}
3116EXPORT_SYMBOL(pcix_get_mmrbc);
3117
3118/**
3119 * pcix_set_mmrbc - set PCI-X maximum memory read byte count
3120 * @dev: PCI device to query
3121 * @mmrbc: maximum memory read count in bytes
3122 *    valid values are 512, 1024, 2048, 4096
3123 *
3124 * If possible sets maximum memory read byte count, some bridges have erratas
3125 * that prevent this.
3126 */
3127int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc)
3128{
3129	int cap;
3130	u32 stat, v, o;
3131	u16 cmd;
3132
3133	if (mmrbc < 512 || mmrbc > 4096 || !is_power_of_2(mmrbc))
3134		return -EINVAL;
3135
3136	v = ffs(mmrbc) - 10;
3137
3138	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
3139	if (!cap)
3140		return -EINVAL;
3141
3142	if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat))
3143		return -EINVAL;
3144
3145	if (v > (stat & PCI_X_STATUS_MAX_READ) >> 21)
3146		return -E2BIG;
3147
3148	if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd))
3149		return -EINVAL;
3150
3151	o = (cmd & PCI_X_CMD_MAX_READ) >> 2;
3152	if (o != v) {
3153		if (v > o && dev->bus &&
3154		   (dev->bus->bus_flags & PCI_BUS_FLAGS_NO_MMRBC))
3155			return -EIO;
3156
3157		cmd &= ~PCI_X_CMD_MAX_READ;
3158		cmd |= v << 2;
3159		if (pci_write_config_word(dev, cap + PCI_X_CMD, cmd))
3160			return -EIO;
3161	}
3162	return 0;
3163}
3164EXPORT_SYMBOL(pcix_set_mmrbc);
3165
3166/**
3167 * pcie_get_readrq - get PCI Express read request size
3168 * @dev: PCI device to query
3169 *
3170 * Returns maximum memory read request in bytes
3171 *    or appropriate error value.
3172 */
3173int pcie_get_readrq(struct pci_dev *dev)
3174{
3175	int ret, cap;
3176	u16 ctl;
3177
3178	cap = pci_pcie_cap(dev);
3179	if (!cap)
3180		return -EINVAL;
3181
3182	ret = pci_read_config_word(dev, cap + PCI_EXP_DEVCTL, &ctl);
3183	if (!ret)
3184		ret = 128 << ((ctl & PCI_EXP_DEVCTL_READRQ) >> 12);
3185
3186	return ret;
3187}
3188EXPORT_SYMBOL(pcie_get_readrq);
3189
3190/**
3191 * pcie_set_readrq - set PCI Express maximum memory read request
3192 * @dev: PCI device to query
3193 * @rq: maximum memory read count in bytes
3194 *    valid values are 128, 256, 512, 1024, 2048, 4096
3195 *
3196 * If possible sets maximum memory read request in bytes
3197 */
3198int pcie_set_readrq(struct pci_dev *dev, int rq)
3199{
3200	int cap, err = -EINVAL;
3201	u16 ctl, v;
 
3202
3203	if (rq < 128 || rq > 4096 || !is_power_of_2(rq))
3204		goto out;
3205
3206	v = (ffs(rq) - 8) << 12;
 
 
 
 
 
 
3207
3208	cap = pci_pcie_cap(dev);
3209	if (!cap)
3210		goto out;
3211
3212	err = pci_read_config_word(dev, cap + PCI_EXP_DEVCTL, &ctl);
3213	if (err)
3214		goto out;
3215
3216	if ((ctl & PCI_EXP_DEVCTL_READRQ) != v) {
3217		ctl &= ~PCI_EXP_DEVCTL_READRQ;
3218		ctl |= v;
3219		err = pci_write_config_word(dev, cap + PCI_EXP_DEVCTL, ctl);
 
 
 
3220	}
3221
3222out:
3223	return err;
 
 
3224}
3225EXPORT_SYMBOL(pcie_set_readrq);
3226
3227/**
3228 * pcie_get_mps - get PCI Express maximum payload size
3229 * @dev: PCI device to query
3230 *
3231 * Returns maximum payload size in bytes
3232 *    or appropriate error value.
3233 */
3234int pcie_get_mps(struct pci_dev *dev)
3235{
3236	int ret, cap;
3237	u16 ctl;
3238
3239	cap = pci_pcie_cap(dev);
3240	if (!cap)
3241		return -EINVAL;
3242
3243	ret = pci_read_config_word(dev, cap + PCI_EXP_DEVCTL, &ctl);
3244	if (!ret)
3245		ret = 128 << ((ctl & PCI_EXP_DEVCTL_PAYLOAD) >> 5);
3246
3247	return ret;
3248}
 
3249
3250/**
3251 * pcie_set_mps - set PCI Express maximum payload size
3252 * @dev: PCI device to query
3253 * @mps: maximum payload size in bytes
3254 *    valid values are 128, 256, 512, 1024, 2048, 4096
3255 *
3256 * If possible sets maximum payload size
3257 */
3258int pcie_set_mps(struct pci_dev *dev, int mps)
3259{
3260	int cap, err = -EINVAL;
3261	u16 ctl, v;
3262
3263	if (mps < 128 || mps > 4096 || !is_power_of_2(mps))
3264		goto out;
3265
3266	v = ffs(mps) - 8;
3267	if (v > dev->pcie_mpss) 
3268		goto out;
3269	v <<= 5;
3270
3271	cap = pci_pcie_cap(dev);
3272	if (!cap)
3273		goto out;
3274
3275	err = pci_read_config_word(dev, cap + PCI_EXP_DEVCTL, &ctl);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3276	if (err)
3277		goto out;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3278
3279	if ((ctl & PCI_EXP_DEVCTL_PAYLOAD) != v) {
3280		ctl &= ~PCI_EXP_DEVCTL_PAYLOAD;
3281		ctl |= v;
3282		err = pci_write_config_word(dev, cap + PCI_EXP_DEVCTL, ctl);
3283	}
3284out:
3285	return err;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3286}
3287
3288/**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3289 * pci_select_bars - Make BAR mask from the type of resource
3290 * @dev: the PCI device for which BAR mask is made
3291 * @flags: resource type mask to be selected
3292 *
3293 * This helper routine makes bar mask from the type of resource.
3294 */
3295int pci_select_bars(struct pci_dev *dev, unsigned long flags)
3296{
3297	int i, bars = 0;
3298	for (i = 0; i < PCI_NUM_RESOURCES; i++)
3299		if (pci_resource_flags(dev, i) & flags)
3300			bars |= (1 << i);
3301	return bars;
3302}
3303
3304/**
3305 * pci_resource_bar - get position of the BAR associated with a resource
3306 * @dev: the PCI device
3307 * @resno: the resource number
3308 * @type: the BAR type to be filled in
3309 *
3310 * Returns BAR position in config space, or 0 if the BAR is invalid.
3311 */
3312int pci_resource_bar(struct pci_dev *dev, int resno, enum pci_bar_type *type)
3313{
3314	int reg;
3315
3316	if (resno < PCI_ROM_RESOURCE) {
3317		*type = pci_bar_unknown;
3318		return PCI_BASE_ADDRESS_0 + 4 * resno;
3319	} else if (resno == PCI_ROM_RESOURCE) {
3320		*type = pci_bar_mem32;
3321		return dev->rom_base_reg;
3322	} else if (resno < PCI_BRIDGE_RESOURCES) {
3323		/* device specific resource */
3324		reg = pci_iov_resource_bar(dev, resno, type);
3325		if (reg)
3326			return reg;
3327	}
3328
3329	dev_err(&dev->dev, "BAR %d: invalid resource\n", resno);
3330	return 0;
3331}
3332
3333/* Some architectures require additional programming to enable VGA */
3334static arch_set_vga_state_t arch_set_vga_state;
3335
3336void __init pci_register_set_vga_state(arch_set_vga_state_t func)
3337{
3338	arch_set_vga_state = func;	/* NULL disables */
3339}
3340
3341static int pci_set_vga_state_arch(struct pci_dev *dev, bool decode,
3342		      unsigned int command_bits, u32 flags)
3343{
3344	if (arch_set_vga_state)
3345		return arch_set_vga_state(dev, decode, command_bits,
3346						flags);
3347	return 0;
3348}
3349
3350/**
3351 * pci_set_vga_state - set VGA decode state on device and parents if requested
3352 * @dev: the PCI device
3353 * @decode: true = enable decoding, false = disable decoding
3354 * @command_bits: PCI_COMMAND_IO and/or PCI_COMMAND_MEMORY
3355 * @flags: traverse ancestors and change bridges
3356 * CHANGE_BRIDGE_ONLY / CHANGE_BRIDGE
3357 */
3358int pci_set_vga_state(struct pci_dev *dev, bool decode,
3359		      unsigned int command_bits, u32 flags)
3360{
3361	struct pci_bus *bus;
3362	struct pci_dev *bridge;
3363	u16 cmd;
3364	int rc;
3365
3366	WARN_ON((flags & PCI_VGA_STATE_CHANGE_DECODES) & (command_bits & ~(PCI_COMMAND_IO|PCI_COMMAND_MEMORY)));
3367
3368	/* ARCH specific VGA enables */
3369	rc = pci_set_vga_state_arch(dev, decode, command_bits, flags);
3370	if (rc)
3371		return rc;
3372
3373	if (flags & PCI_VGA_STATE_CHANGE_DECODES) {
3374		pci_read_config_word(dev, PCI_COMMAND, &cmd);
3375		if (decode == true)
3376			cmd |= command_bits;
3377		else
3378			cmd &= ~command_bits;
3379		pci_write_config_word(dev, PCI_COMMAND, cmd);
3380	}
3381
3382	if (!(flags & PCI_VGA_STATE_CHANGE_BRIDGE))
3383		return 0;
3384
3385	bus = dev->bus;
3386	while (bus) {
3387		bridge = bus->self;
3388		if (bridge) {
3389			pci_read_config_word(bridge, PCI_BRIDGE_CONTROL,
3390					     &cmd);
3391			if (decode == true)
3392				cmd |= PCI_BRIDGE_CTL_VGA;
3393			else
3394				cmd &= ~PCI_BRIDGE_CTL_VGA;
3395			pci_write_config_word(bridge, PCI_BRIDGE_CONTROL,
3396					      cmd);
3397		}
3398		bus = bus->parent;
3399	}
3400	return 0;
3401}
3402
3403#define RESOURCE_ALIGNMENT_PARAM_SIZE COMMAND_LINE_SIZE
3404static char resource_alignment_param[RESOURCE_ALIGNMENT_PARAM_SIZE] = {0};
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3405static DEFINE_SPINLOCK(resource_alignment_lock);
3406
3407/**
3408 * pci_specified_resource_alignment - get resource alignment specified by user.
3409 * @dev: the PCI device to get
 
3410 *
3411 * RETURNS: Resource alignment if it is specified.
3412 *          Zero if it is not specified.
3413 */
3414resource_size_t pci_specified_resource_alignment(struct pci_dev *dev)
 
3415{
3416	int seg, bus, slot, func, align_order, count;
3417	resource_size_t align = 0;
3418	char *p;
 
3419
3420	spin_lock(&resource_alignment_lock);
3421	p = resource_alignment_param;
 
 
 
 
 
 
 
 
3422	while (*p) {
3423		count = 0;
3424		if (sscanf(p, "%d%n", &align_order, &count) == 1 &&
3425							p[count] == '@') {
3426			p += count + 1;
3427		} else {
3428			align_order = -1;
3429		}
3430		if (sscanf(p, "%x:%x:%x.%x%n",
3431			&seg, &bus, &slot, &func, &count) != 4) {
3432			seg = 0;
3433			if (sscanf(p, "%x:%x.%x%n",
3434					&bus, &slot, &func, &count) != 3) {
3435				/* Invalid format */
3436				printk(KERN_ERR "PCI: Can't parse resource_alignment parameter: %s\n",
3437					p);
3438				break;
3439			}
 
 
3440		}
3441		p += count;
3442		if (seg == pci_domain_nr(dev->bus) &&
3443			bus == dev->bus->number &&
3444			slot == PCI_SLOT(dev->devfn) &&
3445			func == PCI_FUNC(dev->devfn)) {
3446			if (align_order == -1) {
3447				align = PAGE_SIZE;
3448			} else {
3449				align = 1 << align_order;
3450			}
3451			/* Found */
3452			break;
3453		}
 
3454		if (*p != ';' && *p != ',') {
3455			/* End of param or invalid format */
3456			break;
3457		}
3458		p++;
3459	}
 
3460	spin_unlock(&resource_alignment_lock);
3461	return align;
3462}
3463
3464/**
3465 * pci_is_reassigndev - check if specified PCI is target device to reassign
3466 * @dev: the PCI device to check
3467 *
3468 * RETURNS: non-zero for PCI device is a target device to reassign,
3469 *          or zero is not.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3470 */
3471int pci_is_reassigndev(struct pci_dev *dev)
3472{
3473	return (pci_specified_resource_alignment(dev) != 0);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3474}
3475
3476ssize_t pci_set_resource_alignment_param(const char *buf, size_t count)
3477{
3478	if (count > RESOURCE_ALIGNMENT_PARAM_SIZE - 1)
3479		count = RESOURCE_ALIGNMENT_PARAM_SIZE - 1;
3480	spin_lock(&resource_alignment_lock);
3481	strncpy(resource_alignment_param, buf, count);
3482	resource_alignment_param[count] = '\0';
3483	spin_unlock(&resource_alignment_lock);
 
3484	return count;
3485}
3486
3487ssize_t pci_get_resource_alignment_param(char *buf, size_t size)
 
3488{
3489	size_t count;
 
 
 
 
 
 
 
 
 
 
 
 
3490	spin_lock(&resource_alignment_lock);
3491	count = snprintf(buf, size, "%s", resource_alignment_param);
 
 
 
 
 
 
3492	spin_unlock(&resource_alignment_lock);
3493	return count;
3494}
3495
3496static ssize_t pci_resource_alignment_show(struct bus_type *bus, char *buf)
3497{
3498	return pci_get_resource_alignment_param(buf, PAGE_SIZE);
3499}
3500
3501static ssize_t pci_resource_alignment_store(struct bus_type *bus,
3502					const char *buf, size_t count)
3503{
3504	return pci_set_resource_alignment_param(buf, count);
3505}
3506
3507BUS_ATTR(resource_alignment, 0644, pci_resource_alignment_show,
3508					pci_resource_alignment_store);
3509
3510static int __init pci_resource_alignment_sysfs_init(void)
3511{
3512	return bus_create_file(&pci_bus_type,
3513					&bus_attr_resource_alignment);
3514}
3515
3516late_initcall(pci_resource_alignment_sysfs_init);
3517
3518static void __devinit pci_no_domains(void)
3519{
3520#ifdef CONFIG_PCI_DOMAINS
3521	pci_domains_supported = 0;
3522#endif
3523}
3524
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3525/**
3526 * pci_ext_cfg_enabled - can we access extended PCI config space?
3527 * @dev: The PCI device of the root bridge.
3528 *
3529 * Returns 1 if we can access PCI extended config space (offsets
3530 * greater than 0xff). This is the default implementation. Architecture
3531 * implementations can override this.
3532 */
3533int __attribute__ ((weak)) pci_ext_cfg_avail(struct pci_dev *dev)
3534{
3535	return 1;
3536}
3537
3538void __weak pci_fixup_cardbus(struct pci_bus *bus)
3539{
3540}
3541EXPORT_SYMBOL(pci_fixup_cardbus);
3542
3543static int __init pci_setup(char *str)
3544{
3545	while (str) {
3546		char *k = strchr(str, ',');
3547		if (k)
3548			*k++ = 0;
3549		if (*str && (str = pcibios_setup(str)) && *str) {
3550			if (!strcmp(str, "nomsi")) {
3551				pci_no_msi();
 
 
 
3552			} else if (!strcmp(str, "noaer")) {
3553				pci_no_aer();
 
 
 
 
3554			} else if (!strncmp(str, "realloc", 7)) {
3555				pci_realloc();
3556			} else if (!strcmp(str, "nodomains")) {
3557				pci_no_domains();
 
 
 
 
3558			} else if (!strncmp(str, "cbiosize=", 9)) {
3559				pci_cardbus_io_size = memparse(str + 9, &str);
3560			} else if (!strncmp(str, "cbmemsize=", 10)) {
3561				pci_cardbus_mem_size = memparse(str + 10, &str);
3562			} else if (!strncmp(str, "resource_alignment=", 19)) {
3563				pci_set_resource_alignment_param(str + 19,
3564							strlen(str + 19));
3565			} else if (!strncmp(str, "ecrc=", 5)) {
3566				pcie_ecrc_get_policy(str + 5);
3567			} else if (!strncmp(str, "hpiosize=", 9)) {
3568				pci_hotplug_io_size = memparse(str + 9, &str);
 
 
 
 
3569			} else if (!strncmp(str, "hpmemsize=", 10)) {
3570				pci_hotplug_mem_size = memparse(str + 10, &str);
 
 
 
 
 
 
3571			} else if (!strncmp(str, "pcie_bus_tune_off", 17)) {
3572				pcie_bus_config = PCIE_BUS_TUNE_OFF;
3573			} else if (!strncmp(str, "pcie_bus_safe", 13)) {
3574				pcie_bus_config = PCIE_BUS_SAFE;
3575			} else if (!strncmp(str, "pcie_bus_perf", 13)) {
3576				pcie_bus_config = PCIE_BUS_PERFORMANCE;
3577			} else if (!strncmp(str, "pcie_bus_peer2peer", 18)) {
3578				pcie_bus_config = PCIE_BUS_PEER2PEER;
 
 
 
 
 
 
3579			} else {
3580				printk(KERN_ERR "PCI: Unknown option `%s'\n",
3581						str);
3582			}
3583		}
3584		str = k;
3585	}
3586	return 0;
3587}
3588early_param("pci", pci_setup);
3589
3590EXPORT_SYMBOL(pci_reenable_device);
3591EXPORT_SYMBOL(pci_enable_device_io);
3592EXPORT_SYMBOL(pci_enable_device_mem);
3593EXPORT_SYMBOL(pci_enable_device);
3594EXPORT_SYMBOL(pcim_enable_device);
3595EXPORT_SYMBOL(pcim_pin_device);
3596EXPORT_SYMBOL(pci_disable_device);
3597EXPORT_SYMBOL(pci_find_capability);
3598EXPORT_SYMBOL(pci_bus_find_capability);
3599EXPORT_SYMBOL(pci_release_regions);
3600EXPORT_SYMBOL(pci_request_regions);
3601EXPORT_SYMBOL(pci_request_regions_exclusive);
3602EXPORT_SYMBOL(pci_release_region);
3603EXPORT_SYMBOL(pci_request_region);
3604EXPORT_SYMBOL(pci_request_region_exclusive);
3605EXPORT_SYMBOL(pci_release_selected_regions);
3606EXPORT_SYMBOL(pci_request_selected_regions);
3607EXPORT_SYMBOL(pci_request_selected_regions_exclusive);
3608EXPORT_SYMBOL(pci_set_master);
3609EXPORT_SYMBOL(pci_clear_master);
3610EXPORT_SYMBOL(pci_set_mwi);
3611EXPORT_SYMBOL(pci_try_set_mwi);
3612EXPORT_SYMBOL(pci_clear_mwi);
3613EXPORT_SYMBOL_GPL(pci_intx);
3614EXPORT_SYMBOL(pci_assign_resource);
3615EXPORT_SYMBOL(pci_find_parent_resource);
3616EXPORT_SYMBOL(pci_select_bars);
3617
3618EXPORT_SYMBOL(pci_set_power_state);
3619EXPORT_SYMBOL(pci_save_state);
3620EXPORT_SYMBOL(pci_restore_state);
3621EXPORT_SYMBOL(pci_pme_capable);
3622EXPORT_SYMBOL(pci_pme_active);
3623EXPORT_SYMBOL(pci_wake_from_d3);
3624EXPORT_SYMBOL(pci_target_state);
3625EXPORT_SYMBOL(pci_prepare_to_sleep);
3626EXPORT_SYMBOL(pci_back_from_sleep);
3627EXPORT_SYMBOL_GPL(pci_set_pcie_reset_state);
v6.13.7
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * PCI Bus Services, see include/linux/pci.h for further explanation.
   4 *
   5 * Copyright 1993 -- 1997 Drew Eckhardt, Frederic Potter,
   6 * David Mosberger-Tang
   7 *
   8 * Copyright 1997 -- 2000 Martin Mares <mj@ucw.cz>
   9 */
  10
  11#include <linux/acpi.h>
  12#include <linux/kernel.h>
  13#include <linux/delay.h>
  14#include <linux/dmi.h>
  15#include <linux/init.h>
  16#include <linux/msi.h>
  17#include <linux/of.h>
  18#include <linux/pci.h>
  19#include <linux/pm.h>
  20#include <linux/slab.h>
  21#include <linux/module.h>
  22#include <linux/spinlock.h>
  23#include <linux/string.h>
  24#include <linux/log2.h>
  25#include <linux/logic_pio.h>
  26#include <linux/pm_wakeup.h>
 
  27#include <linux/device.h>
  28#include <linux/pm_runtime.h>
  29#include <linux/pci_hotplug.h>
  30#include <linux/vmalloc.h>
  31#include <asm/dma.h>
  32#include <linux/aer.h>
  33#include <linux/bitfield.h>
  34#include "pci.h"
  35
  36DEFINE_MUTEX(pci_slot_mutex);
  37
  38const char *pci_power_names[] = {
  39	"error", "D0", "D1", "D2", "D3hot", "D3cold", "unknown",
  40};
  41EXPORT_SYMBOL_GPL(pci_power_names);
  42
  43#ifdef CONFIG_X86_32
  44int isa_dma_bridge_buggy;
  45EXPORT_SYMBOL(isa_dma_bridge_buggy);
  46#endif
  47
  48int pci_pci_problems;
  49EXPORT_SYMBOL(pci_pci_problems);
  50
  51unsigned int pci_pm_d3hot_delay;
  52
  53static void pci_pme_list_scan(struct work_struct *work);
  54
  55static LIST_HEAD(pci_pme_list);
  56static DEFINE_MUTEX(pci_pme_list_mutex);
  57static DECLARE_DELAYED_WORK(pci_pme_work, pci_pme_list_scan);
  58
  59struct pci_pme_device {
  60	struct list_head list;
  61	struct pci_dev *dev;
  62};
  63
  64#define PME_TIMEOUT 1000 /* How long between PME checks */
  65
  66/*
  67 * Following exit from Conventional Reset, devices must be ready within 1 sec
  68 * (PCIe r6.0 sec 6.6.1).  A D3cold to D0 transition implies a Conventional
  69 * Reset (PCIe r6.0 sec 5.8).
  70 */
  71#define PCI_RESET_WAIT 1000 /* msec */
  72
  73/*
  74 * Devices may extend the 1 sec period through Request Retry Status
  75 * completions (PCIe r6.0 sec 2.3.1).  The spec does not provide an upper
  76 * limit, but 60 sec ought to be enough for any device to become
  77 * responsive.
  78 */
  79#define PCIE_RESET_READY_POLL_MS 60000 /* msec */
  80
  81static void pci_dev_d3_sleep(struct pci_dev *dev)
  82{
  83	unsigned int delay_ms = max(dev->d3hot_delay, pci_pm_d3hot_delay);
  84	unsigned int upper;
  85
  86	if (delay_ms) {
  87		/* Use a 20% upper bound, 1ms minimum */
  88		upper = max(DIV_ROUND_CLOSEST(delay_ms, 5), 1U);
  89		usleep_range(delay_ms * USEC_PER_MSEC,
  90			     (delay_ms + upper) * USEC_PER_MSEC);
  91	}
  92}
  93
  94bool pci_reset_supported(struct pci_dev *dev)
  95{
  96	return dev->reset_methods[0] != 0;
  97}
  98
  99#ifdef CONFIG_PCI_DOMAINS
 100int pci_domains_supported = 1;
 101#endif
 102
 103#define DEFAULT_CARDBUS_IO_SIZE		(256)
 104#define DEFAULT_CARDBUS_MEM_SIZE	(64*1024*1024)
 105/* pci=cbmemsize=nnM,cbiosize=nn can override this */
 106unsigned long pci_cardbus_io_size = DEFAULT_CARDBUS_IO_SIZE;
 107unsigned long pci_cardbus_mem_size = DEFAULT_CARDBUS_MEM_SIZE;
 108
 109#define DEFAULT_HOTPLUG_IO_SIZE		(256)
 110#define DEFAULT_HOTPLUG_MMIO_SIZE	(2*1024*1024)
 111#define DEFAULT_HOTPLUG_MMIO_PREF_SIZE	(2*1024*1024)
 112/* hpiosize=nn can override this */
 113unsigned long pci_hotplug_io_size  = DEFAULT_HOTPLUG_IO_SIZE;
 114/*
 115 * pci=hpmmiosize=nnM overrides non-prefetchable MMIO size,
 116 * pci=hpmmioprefsize=nnM overrides prefetchable MMIO size;
 117 * pci=hpmemsize=nnM overrides both
 118 */
 119unsigned long pci_hotplug_mmio_size = DEFAULT_HOTPLUG_MMIO_SIZE;
 120unsigned long pci_hotplug_mmio_pref_size = DEFAULT_HOTPLUG_MMIO_PREF_SIZE;
 121
 122#define DEFAULT_HOTPLUG_BUS_SIZE	1
 123unsigned long pci_hotplug_bus_size = DEFAULT_HOTPLUG_BUS_SIZE;
 124
 125
 126/* PCIe MPS/MRRS strategy; can be overridden by kernel command-line param */
 127#ifdef CONFIG_PCIE_BUS_TUNE_OFF
 128enum pcie_bus_config_types pcie_bus_config = PCIE_BUS_TUNE_OFF;
 129#elif defined CONFIG_PCIE_BUS_SAFE
 130enum pcie_bus_config_types pcie_bus_config = PCIE_BUS_SAFE;
 131#elif defined CONFIG_PCIE_BUS_PERFORMANCE
 132enum pcie_bus_config_types pcie_bus_config = PCIE_BUS_PERFORMANCE;
 133#elif defined CONFIG_PCIE_BUS_PEER2PEER
 134enum pcie_bus_config_types pcie_bus_config = PCIE_BUS_PEER2PEER;
 135#else
 136enum pcie_bus_config_types pcie_bus_config = PCIE_BUS_DEFAULT;
 137#endif
 138
 139/*
 140 * The default CLS is used if arch didn't set CLS explicitly and not
 141 * all pci devices agree on the same value.  Arch can override either
 142 * the dfl or actual value as it sees fit.  Don't forget this is
 143 * measured in 32-bit words, not bytes.
 144 */
 145u8 pci_dfl_cache_line_size __ro_after_init = L1_CACHE_BYTES >> 2;
 146u8 pci_cache_line_size __ro_after_init ;
 147
 148/*
 149 * If we set up a device for bus mastering, we need to check the latency
 150 * timer as certain BIOSes forget to set it properly.
 151 */
 152unsigned int pcibios_max_latency = 255;
 153
 154/* If set, the PCIe ARI capability will not be used. */
 155static bool pcie_ari_disabled;
 156
 157/* If set, the PCIe ATS capability will not be used. */
 158static bool pcie_ats_disabled;
 159
 160/* If set, the PCI config space of each device is printed during boot. */
 161bool pci_early_dump;
 162
 163bool pci_ats_disabled(void)
 164{
 165	return pcie_ats_disabled;
 166}
 167EXPORT_SYMBOL_GPL(pci_ats_disabled);
 168
 169/* Disable bridge_d3 for all PCIe ports */
 170static bool pci_bridge_d3_disable;
 171/* Force bridge_d3 for all PCIe ports */
 172static bool pci_bridge_d3_force;
 173
 174static int __init pcie_port_pm_setup(char *str)
 175{
 176	if (!strcmp(str, "off"))
 177		pci_bridge_d3_disable = true;
 178	else if (!strcmp(str, "force"))
 179		pci_bridge_d3_force = true;
 180	return 1;
 181}
 182__setup("pcie_port_pm=", pcie_port_pm_setup);
 183
 184/**
 185 * pci_bus_max_busnr - returns maximum PCI bus number of given bus' children
 186 * @bus: pointer to PCI bus structure to search
 187 *
 188 * Given a PCI bus, returns the highest PCI bus number present in the set
 189 * including the given PCI bus and its list of child PCI buses.
 190 */
 191unsigned char pci_bus_max_busnr(struct pci_bus *bus)
 192{
 193	struct pci_bus *tmp;
 194	unsigned char max, n;
 195
 196	max = bus->busn_res.end;
 197	list_for_each_entry(tmp, &bus->children, node) {
 198		n = pci_bus_max_busnr(tmp);
 199		if (n > max)
 200			max = n;
 201	}
 202	return max;
 203}
 204EXPORT_SYMBOL_GPL(pci_bus_max_busnr);
 205
 206/**
 207 * pci_status_get_and_clear_errors - return and clear error bits in PCI_STATUS
 208 * @pdev: the PCI device
 209 *
 210 * Returns error bits set in PCI_STATUS and clears them.
 211 */
 212int pci_status_get_and_clear_errors(struct pci_dev *pdev)
 213{
 214	u16 status;
 215	int ret;
 216
 217	ret = pci_read_config_word(pdev, PCI_STATUS, &status);
 218	if (ret != PCIBIOS_SUCCESSFUL)
 219		return -EIO;
 220
 221	status &= PCI_STATUS_ERROR_BITS;
 222	if (status)
 223		pci_write_config_word(pdev, PCI_STATUS, status);
 224
 225	return status;
 226}
 227EXPORT_SYMBOL_GPL(pci_status_get_and_clear_errors);
 228
 229#ifdef CONFIG_HAS_IOMEM
 230static void __iomem *__pci_ioremap_resource(struct pci_dev *pdev, int bar,
 231					    bool write_combine)
 232{
 233	struct resource *res = &pdev->resource[bar];
 234	resource_size_t start = res->start;
 235	resource_size_t size = resource_size(res);
 236
 237	/*
 238	 * Make sure the BAR is actually a memory resource, not an IO resource
 239	 */
 240	if (res->flags & IORESOURCE_UNSET || !(res->flags & IORESOURCE_MEM)) {
 241		pci_err(pdev, "can't ioremap BAR %d: %pR\n", bar, res);
 242		return NULL;
 243	}
 244
 245	if (write_combine)
 246		return ioremap_wc(start, size);
 247
 248	return ioremap(start, size);
 249}
 250
 251void __iomem *pci_ioremap_bar(struct pci_dev *pdev, int bar)
 252{
 253	return __pci_ioremap_resource(pdev, bar, false);
 254}
 255EXPORT_SYMBOL_GPL(pci_ioremap_bar);
 256
 257void __iomem *pci_ioremap_wc_bar(struct pci_dev *pdev, int bar)
 258{
 259	return __pci_ioremap_resource(pdev, bar, true);
 260}
 261EXPORT_SYMBOL_GPL(pci_ioremap_wc_bar);
 262#endif
 263
 
 264/**
 265 * pci_dev_str_match_path - test if a path string matches a device
 266 * @dev: the PCI device to test
 267 * @path: string to match the device against
 268 * @endptr: pointer to the string after the match
 269 *
 270 * Test if a string (typically from a kernel parameter) formatted as a
 271 * path of device/function addresses matches a PCI device. The string must
 272 * be of the form:
 273 *
 274 *   [<domain>:]<bus>:<device>.<func>[/<device>.<func>]*
 275 *
 276 * A path for a device can be obtained using 'lspci -t'.  Using a path
 277 * is more robust against bus renumbering than using only a single bus,
 278 * device and function address.
 279 *
 280 * Returns 1 if the string matches the device, 0 if it does not and
 281 * a negative error code if it fails to parse the string.
 282 */
 283static int pci_dev_str_match_path(struct pci_dev *dev, const char *path,
 284				  const char **endptr)
 285{
 286	int ret;
 287	unsigned int seg, bus, slot, func;
 288	char *wpath, *p;
 289	char end;
 290
 291	*endptr = strchrnul(path, ';');
 292
 293	wpath = kmemdup_nul(path, *endptr - path, GFP_ATOMIC);
 294	if (!wpath)
 295		return -ENOMEM;
 296
 297	while (1) {
 298		p = strrchr(wpath, '/');
 299		if (!p)
 300			break;
 301		ret = sscanf(p, "/%x.%x%c", &slot, &func, &end);
 302		if (ret != 2) {
 303			ret = -EINVAL;
 304			goto free_and_exit;
 305		}
 306
 307		if (dev->devfn != PCI_DEVFN(slot, func)) {
 308			ret = 0;
 309			goto free_and_exit;
 310		}
 311
 312		/*
 313		 * Note: we don't need to get a reference to the upstream
 314		 * bridge because we hold a reference to the top level
 315		 * device which should hold a reference to the bridge,
 316		 * and so on.
 317		 */
 318		dev = pci_upstream_bridge(dev);
 319		if (!dev) {
 320			ret = 0;
 321			goto free_and_exit;
 322		}
 323
 324		*p = 0;
 325	}
 326
 327	ret = sscanf(wpath, "%x:%x:%x.%x%c", &seg, &bus, &slot,
 328		     &func, &end);
 329	if (ret != 4) {
 330		seg = 0;
 331		ret = sscanf(wpath, "%x:%x.%x%c", &bus, &slot, &func, &end);
 332		if (ret != 3) {
 333			ret = -EINVAL;
 334			goto free_and_exit;
 335		}
 336	}
 337
 338	ret = (seg == pci_domain_nr(dev->bus) &&
 339	       bus == dev->bus->number &&
 340	       dev->devfn == PCI_DEVFN(slot, func));
 341
 342free_and_exit:
 343	kfree(wpath);
 344	return ret;
 345}
 346
 347/**
 348 * pci_dev_str_match - test if a string matches a device
 349 * @dev: the PCI device to test
 350 * @p: string to match the device against
 351 * @endptr: pointer to the string after the match
 352 *
 353 * Test if a string (typically from a kernel parameter) matches a specified
 354 * PCI device. The string may be of one of the following formats:
 355 *
 356 *   [<domain>:]<bus>:<device>.<func>[/<device>.<func>]*
 357 *   pci:<vendor>:<device>[:<subvendor>:<subdevice>]
 358 *
 359 * The first format specifies a PCI bus/device/function address which
 360 * may change if new hardware is inserted, if motherboard firmware changes,
 361 * or due to changes caused in kernel parameters. If the domain is
 362 * left unspecified, it is taken to be 0.  In order to be robust against
 363 * bus renumbering issues, a path of PCI device/function numbers may be used
 364 * to address the specific device.  The path for a device can be determined
 365 * through the use of 'lspci -t'.
 366 *
 367 * The second format matches devices using IDs in the configuration
 368 * space which may match multiple devices in the system. A value of 0
 369 * for any field will match all devices. (Note: this differs from
 370 * in-kernel code that uses PCI_ANY_ID which is ~0; this is for
 371 * legacy reasons and convenience so users don't have to specify
 372 * FFFFFFFFs on the command line.)
 373 *
 374 * Returns 1 if the string matches the device, 0 if it does not and
 375 * a negative error code if the string cannot be parsed.
 376 */
 377static int pci_dev_str_match(struct pci_dev *dev, const char *p,
 378			     const char **endptr)
 379{
 380	int ret;
 381	int count;
 382	unsigned short vendor, device, subsystem_vendor, subsystem_device;
 383
 384	if (strncmp(p, "pci:", 4) == 0) {
 385		/* PCI vendor/device (subvendor/subdevice) IDs are specified */
 386		p += 4;
 387		ret = sscanf(p, "%hx:%hx:%hx:%hx%n", &vendor, &device,
 388			     &subsystem_vendor, &subsystem_device, &count);
 389		if (ret != 4) {
 390			ret = sscanf(p, "%hx:%hx%n", &vendor, &device, &count);
 391			if (ret != 2)
 392				return -EINVAL;
 393
 394			subsystem_vendor = 0;
 395			subsystem_device = 0;
 396		}
 397
 398		p += count;
 399
 400		if ((!vendor || vendor == dev->vendor) &&
 401		    (!device || device == dev->device) &&
 402		    (!subsystem_vendor ||
 403			    subsystem_vendor == dev->subsystem_vendor) &&
 404		    (!subsystem_device ||
 405			    subsystem_device == dev->subsystem_device))
 406			goto found;
 407	} else {
 408		/*
 409		 * PCI Bus, Device, Function IDs are specified
 410		 * (optionally, may include a path of devfns following it)
 411		 */
 412		ret = pci_dev_str_match_path(dev, p, &p);
 413		if (ret < 0)
 414			return ret;
 415		else if (ret)
 416			goto found;
 417	}
 418
 419	*endptr = p;
 420	return 0;
 421
 422found:
 423	*endptr = p;
 424	return 1;
 425}
 426
 427static u8 __pci_find_next_cap_ttl(struct pci_bus *bus, unsigned int devfn,
 428				  u8 pos, int cap, int *ttl)
 429{
 430	u8 id;
 431	u16 ent;
 432
 433	pci_bus_read_config_byte(bus, devfn, pos, &pos);
 434
 435	while ((*ttl)--) {
 
 436		if (pos < 0x40)
 437			break;
 438		pos &= ~3;
 439		pci_bus_read_config_word(bus, devfn, pos, &ent);
 440
 441		id = ent & 0xff;
 442		if (id == 0xff)
 443			break;
 444		if (id == cap)
 445			return pos;
 446		pos = (ent >> 8);
 447	}
 448	return 0;
 449}
 450
 451static u8 __pci_find_next_cap(struct pci_bus *bus, unsigned int devfn,
 452			      u8 pos, int cap)
 453{
 454	int ttl = PCI_FIND_CAP_TTL;
 455
 456	return __pci_find_next_cap_ttl(bus, devfn, pos, cap, &ttl);
 457}
 458
 459u8 pci_find_next_capability(struct pci_dev *dev, u8 pos, int cap)
 460{
 461	return __pci_find_next_cap(dev->bus, dev->devfn,
 462				   pos + PCI_CAP_LIST_NEXT, cap);
 463}
 464EXPORT_SYMBOL_GPL(pci_find_next_capability);
 465
 466static u8 __pci_bus_find_cap_start(struct pci_bus *bus,
 467				    unsigned int devfn, u8 hdr_type)
 468{
 469	u16 status;
 470
 471	pci_bus_read_config_word(bus, devfn, PCI_STATUS, &status);
 472	if (!(status & PCI_STATUS_CAP_LIST))
 473		return 0;
 474
 475	switch (hdr_type) {
 476	case PCI_HEADER_TYPE_NORMAL:
 477	case PCI_HEADER_TYPE_BRIDGE:
 478		return PCI_CAPABILITY_LIST;
 479	case PCI_HEADER_TYPE_CARDBUS:
 480		return PCI_CB_CAPABILITY_LIST;
 
 
 481	}
 482
 483	return 0;
 484}
 485
 486/**
 487 * pci_find_capability - query for devices' capabilities
 488 * @dev: PCI device to query
 489 * @cap: capability code
 490 *
 491 * Tell if a device supports a given PCI capability.
 492 * Returns the address of the requested capability structure within the
 493 * device's PCI configuration space or 0 in case the device does not
 494 * support it.  Possible values for @cap include:
 495 *
 496 *  %PCI_CAP_ID_PM           Power Management
 497 *  %PCI_CAP_ID_AGP          Accelerated Graphics Port
 498 *  %PCI_CAP_ID_VPD          Vital Product Data
 499 *  %PCI_CAP_ID_SLOTID       Slot Identification
 500 *  %PCI_CAP_ID_MSI          Message Signalled Interrupts
 501 *  %PCI_CAP_ID_CHSWP        CompactPCI HotSwap
 502 *  %PCI_CAP_ID_PCIX         PCI-X
 503 *  %PCI_CAP_ID_EXP          PCI Express
 504 */
 505u8 pci_find_capability(struct pci_dev *dev, int cap)
 506{
 507	u8 pos;
 508
 509	pos = __pci_bus_find_cap_start(dev->bus, dev->devfn, dev->hdr_type);
 510	if (pos)
 511		pos = __pci_find_next_cap(dev->bus, dev->devfn, pos, cap);
 512
 513	return pos;
 514}
 515EXPORT_SYMBOL(pci_find_capability);
 516
 517/**
 518 * pci_bus_find_capability - query for devices' capabilities
 519 * @bus: the PCI bus to query
 520 * @devfn: PCI device to query
 521 * @cap: capability code
 522 *
 523 * Like pci_find_capability() but works for PCI devices that do not have a
 524 * pci_dev structure set up yet.
 525 *
 526 * Returns the address of the requested capability structure within the
 527 * device's PCI configuration space or 0 in case the device does not
 528 * support it.
 529 */
 530u8 pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap)
 531{
 532	u8 hdr_type, pos;
 
 533
 534	pci_bus_read_config_byte(bus, devfn, PCI_HEADER_TYPE, &hdr_type);
 535
 536	pos = __pci_bus_find_cap_start(bus, devfn, hdr_type & PCI_HEADER_TYPE_MASK);
 537	if (pos)
 538		pos = __pci_find_next_cap(bus, devfn, pos, cap);
 539
 540	return pos;
 541}
 542EXPORT_SYMBOL(pci_bus_find_capability);
 543
 544/**
 545 * pci_find_next_ext_capability - Find an extended capability
 546 * @dev: PCI device to query
 547 * @start: address at which to start looking (0 to start at beginning of list)
 548 * @cap: capability code
 549 *
 550 * Returns the address of the next matching extended capability structure
 551 * within the device's PCI configuration space or 0 if the device does
 552 * not support it.  Some capabilities can occur several times, e.g., the
 553 * vendor-specific capability, and this provides a way to find them all.
 
 
 
 
 554 */
 555u16 pci_find_next_ext_capability(struct pci_dev *dev, u16 start, int cap)
 556{
 557	u32 header;
 558	int ttl;
 559	u16 pos = PCI_CFG_SPACE_SIZE;
 560
 561	/* minimum 8 bytes per capability */
 562	ttl = (PCI_CFG_SPACE_EXP_SIZE - PCI_CFG_SPACE_SIZE) / 8;
 563
 564	if (dev->cfg_size <= PCI_CFG_SPACE_SIZE)
 565		return 0;
 566
 567	if (start)
 568		pos = start;
 569
 570	if (pci_read_config_dword(dev, pos, &header) != PCIBIOS_SUCCESSFUL)
 571		return 0;
 572
 573	/*
 574	 * If we have no capabilities, this is indicated by cap ID,
 575	 * cap version and next pointer all being 0.
 576	 */
 577	if (header == 0)
 578		return 0;
 579
 580	while (ttl-- > 0) {
 581		if (PCI_EXT_CAP_ID(header) == cap && pos != start)
 582			return pos;
 583
 584		pos = PCI_EXT_CAP_NEXT(header);
 585		if (pos < PCI_CFG_SPACE_SIZE)
 586			break;
 587
 588		if (pci_read_config_dword(dev, pos, &header) != PCIBIOS_SUCCESSFUL)
 589			break;
 590	}
 591
 592	return 0;
 593}
 594EXPORT_SYMBOL_GPL(pci_find_next_ext_capability);
 595
 596/**
 597 * pci_find_ext_capability - Find an extended capability
 598 * @dev: PCI device to query
 599 * @cap: capability code
 
 600 *
 601 * Returns the address of the requested extended capability structure
 602 * within the device's PCI configuration space or 0 if the device does
 603 * not support it.  Possible values for @cap include:
 604 *
 605 *  %PCI_EXT_CAP_ID_ERR		Advanced Error Reporting
 606 *  %PCI_EXT_CAP_ID_VC		Virtual Channel
 607 *  %PCI_EXT_CAP_ID_DSN		Device Serial Number
 608 *  %PCI_EXT_CAP_ID_PWR		Power Budgeting
 609 */
 610u16 pci_find_ext_capability(struct pci_dev *dev, int cap)
 
 611{
 612	return pci_find_next_ext_capability(dev, 0, cap);
 613}
 614EXPORT_SYMBOL_GPL(pci_find_ext_capability);
 615
 616/**
 617 * pci_get_dsn - Read and return the 8-byte Device Serial Number
 618 * @dev: PCI device to query
 619 *
 620 * Looks up the PCI_EXT_CAP_ID_DSN and reads the 8 bytes of the Device Serial
 621 * Number.
 622 *
 623 * Returns the DSN, or zero if the capability does not exist.
 624 */
 625u64 pci_get_dsn(struct pci_dev *dev)
 626{
 627	u32 dword;
 628	u64 dsn;
 629	int pos;
 630
 631	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_DSN);
 632	if (!pos)
 
 633		return 0;
 634
 635	/*
 636	 * The Device Serial Number is two dwords offset 4 bytes from the
 637	 * capability position. The specification says that the first dword is
 638	 * the lower half, and the second dword is the upper half.
 639	 */
 640	pos += 4;
 641	pci_read_config_dword(dev, pos, &dword);
 642	dsn = (u64)dword;
 643	pci_read_config_dword(dev, pos + 4, &dword);
 644	dsn |= ((u64)dword) << 32;
 
 645
 646	return dsn;
 647}
 648EXPORT_SYMBOL_GPL(pci_get_dsn);
 649
 650static u8 __pci_find_next_ht_cap(struct pci_dev *dev, u8 pos, int ht_cap)
 651{
 652	int rc, ttl = PCI_FIND_CAP_TTL;
 653	u8 cap, mask;
 654
 655	if (ht_cap == HT_CAPTYPE_SLAVE || ht_cap == HT_CAPTYPE_HOST)
 656		mask = HT_3BIT_CAP_MASK;
 657	else
 658		mask = HT_5BIT_CAP_MASK;
 659
 660	pos = __pci_find_next_cap_ttl(dev->bus, dev->devfn, pos,
 661				      PCI_CAP_ID_HT, &ttl);
 662	while (pos) {
 663		rc = pci_read_config_byte(dev, pos + 3, &cap);
 664		if (rc != PCIBIOS_SUCCESSFUL)
 665			return 0;
 666
 667		if ((cap & mask) == ht_cap)
 668			return pos;
 669
 670		pos = __pci_find_next_cap_ttl(dev->bus, dev->devfn,
 671					      pos + PCI_CAP_LIST_NEXT,
 672					      PCI_CAP_ID_HT, &ttl);
 673	}
 674
 675	return 0;
 676}
 677
 678/**
 679 * pci_find_next_ht_capability - query a device's HyperTransport capabilities
 680 * @dev: PCI device to query
 681 * @pos: Position from which to continue searching
 682 * @ht_cap: HyperTransport capability code
 683 *
 684 * To be used in conjunction with pci_find_ht_capability() to search for
 685 * all capabilities matching @ht_cap. @pos should always be a value returned
 686 * from pci_find_ht_capability().
 687 *
 688 * NB. To be 100% safe against broken PCI devices, the caller should take
 689 * steps to avoid an infinite loop.
 690 */
 691u8 pci_find_next_ht_capability(struct pci_dev *dev, u8 pos, int ht_cap)
 692{
 693	return __pci_find_next_ht_cap(dev, pos + PCI_CAP_LIST_NEXT, ht_cap);
 694}
 695EXPORT_SYMBOL_GPL(pci_find_next_ht_capability);
 696
 697/**
 698 * pci_find_ht_capability - query a device's HyperTransport capabilities
 699 * @dev: PCI device to query
 700 * @ht_cap: HyperTransport capability code
 701 *
 702 * Tell if a device supports a given HyperTransport capability.
 703 * Returns an address within the device's PCI configuration space
 704 * or 0 in case the device does not support the request capability.
 705 * The address points to the PCI capability, of type PCI_CAP_ID_HT,
 706 * which has a HyperTransport capability matching @ht_cap.
 707 */
 708u8 pci_find_ht_capability(struct pci_dev *dev, int ht_cap)
 709{
 710	u8 pos;
 711
 712	pos = __pci_bus_find_cap_start(dev->bus, dev->devfn, dev->hdr_type);
 713	if (pos)
 714		pos = __pci_find_next_ht_cap(dev, pos, ht_cap);
 715
 716	return pos;
 717}
 718EXPORT_SYMBOL_GPL(pci_find_ht_capability);
 719
 720/**
 721 * pci_find_vsec_capability - Find a vendor-specific extended capability
 722 * @dev: PCI device to query
 723 * @vendor: Vendor ID for which capability is defined
 724 * @cap: Vendor-specific capability ID
 725 *
 726 * If @dev has Vendor ID @vendor, search for a VSEC capability with
 727 * VSEC ID @cap. If found, return the capability offset in
 728 * config space; otherwise return 0.
 729 */
 730u16 pci_find_vsec_capability(struct pci_dev *dev, u16 vendor, int cap)
 731{
 732	u16 vsec = 0;
 733	u32 header;
 734	int ret;
 735
 736	if (vendor != dev->vendor)
 737		return 0;
 738
 739	while ((vsec = pci_find_next_ext_capability(dev, vsec,
 740						     PCI_EXT_CAP_ID_VNDR))) {
 741		ret = pci_read_config_dword(dev, vsec + PCI_VNDR_HEADER, &header);
 742		if (ret != PCIBIOS_SUCCESSFUL)
 743			continue;
 744
 745		if (PCI_VNDR_HEADER_ID(header) == cap)
 746			return vsec;
 747	}
 748
 749	return 0;
 750}
 751EXPORT_SYMBOL_GPL(pci_find_vsec_capability);
 752
 753/**
 754 * pci_find_dvsec_capability - Find DVSEC for vendor
 755 * @dev: PCI device to query
 756 * @vendor: Vendor ID to match for the DVSEC
 757 * @dvsec: Designated Vendor-specific capability ID
 758 *
 759 * If DVSEC has Vendor ID @vendor and DVSEC ID @dvsec return the capability
 760 * offset in config space; otherwise return 0.
 761 */
 762u16 pci_find_dvsec_capability(struct pci_dev *dev, u16 vendor, u16 dvsec)
 763{
 764	int pos;
 765
 766	pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_DVSEC);
 767	if (!pos)
 768		return 0;
 769
 770	while (pos) {
 771		u16 v, id;
 772
 773		pci_read_config_word(dev, pos + PCI_DVSEC_HEADER1, &v);
 774		pci_read_config_word(dev, pos + PCI_DVSEC_HEADER2, &id);
 775		if (vendor == v && dvsec == id)
 776			return pos;
 777
 778		pos = pci_find_next_ext_capability(dev, pos, PCI_EXT_CAP_ID_DVSEC);
 779	}
 780
 781	return 0;
 782}
 783EXPORT_SYMBOL_GPL(pci_find_dvsec_capability);
 784
 785/**
 786 * pci_find_parent_resource - return resource region of parent bus of given
 787 *			      region
 788 * @dev: PCI device structure contains resources to be searched
 789 * @res: child resource record for which parent is sought
 790 *
 791 * For given resource region of given device, return the resource region of
 792 * parent bus the given region is contained in.
 
 793 */
 794struct resource *pci_find_parent_resource(const struct pci_dev *dev,
 795					  struct resource *res)
 796{
 797	const struct pci_bus *bus = dev->bus;
 798	struct resource *r;
 
 799
 800	pci_bus_for_each_resource(bus, r) {
 801		if (!r)
 802			continue;
 803		if (resource_contains(r, res)) {
 804
 805			/*
 806			 * If the window is prefetchable but the BAR is
 807			 * not, the allocator made a mistake.
 808			 */
 809			if (r->flags & IORESOURCE_PREFETCH &&
 810			    !(res->flags & IORESOURCE_PREFETCH))
 811				return NULL;
 812
 813			/*
 814			 * If we're below a transparent bridge, there may
 815			 * be both a positively-decoded aperture and a
 816			 * subtractively-decoded region that contain the BAR.
 817			 * We want the positively-decoded one, so this depends
 818			 * on pci_bus_for_each_resource() giving us those
 819			 * first.
 820			 */
 821			return r;
 822		}
 823	}
 824	return NULL;
 825}
 826EXPORT_SYMBOL(pci_find_parent_resource);
 827
 828/**
 829 * pci_find_resource - Return matching PCI device resource
 830 * @dev: PCI device to query
 831 * @res: Resource to look for
 832 *
 833 * Goes over standard PCI resources (BARs) and checks if the given resource
 834 * is partially or fully contained in any of them. In that case the
 835 * matching resource is returned, %NULL otherwise.
 836 */
 837struct resource *pci_find_resource(struct pci_dev *dev, struct resource *res)
 
 838{
 839	int i;
 840
 841	for (i = 0; i < PCI_STD_NUM_BARS; i++) {
 842		struct resource *r = &dev->resource[i];
 
 843
 844		if (r->start && resource_contains(r, res))
 845			return r;
 846	}
 847
 848	return NULL;
 849}
 850EXPORT_SYMBOL(pci_find_resource);
 851
 852/**
 853 * pci_resource_name - Return the name of the PCI resource
 854 * @dev: PCI device to query
 855 * @i: index of the resource
 856 *
 857 * Return the standard PCI resource (BAR) name according to their index.
 858 */
 859const char *pci_resource_name(struct pci_dev *dev, unsigned int i)
 860{
 861	static const char * const bar_name[] = {
 862		"BAR 0",
 863		"BAR 1",
 864		"BAR 2",
 865		"BAR 3",
 866		"BAR 4",
 867		"BAR 5",
 868		"ROM",
 869#ifdef CONFIG_PCI_IOV
 870		"VF BAR 0",
 871		"VF BAR 1",
 872		"VF BAR 2",
 873		"VF BAR 3",
 874		"VF BAR 4",
 875		"VF BAR 5",
 876#endif
 877		"bridge window",	/* "io" included in %pR */
 878		"bridge window",	/* "mem" included in %pR */
 879		"bridge window",	/* "mem pref" included in %pR */
 880	};
 881	static const char * const cardbus_name[] = {
 882		"BAR 1",
 883		"unknown",
 884		"unknown",
 885		"unknown",
 886		"unknown",
 887		"unknown",
 888#ifdef CONFIG_PCI_IOV
 889		"unknown",
 890		"unknown",
 891		"unknown",
 892		"unknown",
 893		"unknown",
 894		"unknown",
 895#endif
 896		"CardBus bridge window 0",	/* I/O */
 897		"CardBus bridge window 1",	/* I/O */
 898		"CardBus bridge window 0",	/* mem */
 899		"CardBus bridge window 1",	/* mem */
 900	};
 901
 902	if (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS &&
 903	    i < ARRAY_SIZE(cardbus_name))
 904		return cardbus_name[i];
 905
 906	if (i < ARRAY_SIZE(bar_name))
 907		return bar_name[i];
 908
 909	return "unknown";
 910}
 911
 912/**
 913 * pci_wait_for_pending - wait for @mask bit(s) to clear in status word @pos
 914 * @dev: the PCI device to operate on
 915 * @pos: config space offset of status word
 916 * @mask: mask of bit(s) to care about in status word
 917 *
 918 * Return 1 when mask bit(s) in status word clear, 0 otherwise.
 919 */
 920int pci_wait_for_pending(struct pci_dev *dev, int pos, u16 mask)
 921{
 922	int i;
 923
 924	/* Wait for Transaction Pending bit clean */
 925	for (i = 0; i < 4; i++) {
 926		u16 status;
 927		if (i)
 928			msleep((1 << (i - 1)) * 100);
 929
 930		pci_read_config_word(dev, pos, &status);
 931		if (!(status & mask))
 932			return 1;
 933	}
 934
 935	return 0;
 936}
 937
 938static int pci_acs_enable;
 939
 940/**
 941 * pci_request_acs - ask for ACS to be enabled if supported
 942 */
 943void pci_request_acs(void)
 944{
 945	pci_acs_enable = 1;
 946}
 947
 948static const char *disable_acs_redir_param;
 949static const char *config_acs_param;
 950
 951struct pci_acs {
 952	u16 cap;
 953	u16 ctrl;
 954	u16 fw_ctrl;
 955};
 956
 957static void __pci_config_acs(struct pci_dev *dev, struct pci_acs *caps,
 958			     const char *p, u16 mask, u16 flags)
 959{
 960	char *delimit;
 961	int ret = 0;
 962
 963	if (!p)
 964		return;
 965
 966	while (*p) {
 967		if (!mask) {
 968			/* Check for ACS flags */
 969			delimit = strstr(p, "@");
 970			if (delimit) {
 971				int end;
 972				u32 shift = 0;
 973
 974				end = delimit - p - 1;
 975
 976				while (end > -1) {
 977					if (*(p + end) == '0') {
 978						mask |= 1 << shift;
 979						shift++;
 980						end--;
 981					} else if (*(p + end) == '1') {
 982						mask |= 1 << shift;
 983						flags |= 1 << shift;
 984						shift++;
 985						end--;
 986					} else if ((*(p + end) == 'x') || (*(p + end) == 'X')) {
 987						shift++;
 988						end--;
 989					} else {
 990						pci_err(dev, "Invalid ACS flags... Ignoring\n");
 991						return;
 992					}
 993				}
 994				p = delimit + 1;
 995			} else {
 996				pci_err(dev, "ACS Flags missing\n");
 997				return;
 998			}
 999		}
1000
1001		if (mask & ~(PCI_ACS_SV | PCI_ACS_TB | PCI_ACS_RR | PCI_ACS_CR |
1002			    PCI_ACS_UF | PCI_ACS_EC | PCI_ACS_DT)) {
1003			pci_err(dev, "Invalid ACS flags specified\n");
1004			return;
1005		}
1006
1007		ret = pci_dev_str_match(dev, p, &p);
1008		if (ret < 0) {
1009			pr_info_once("PCI: Can't parse ACS command line parameter\n");
1010			break;
1011		} else if (ret == 1) {
1012			/* Found a match */
1013			break;
1014		}
1015
1016		if (*p != ';' && *p != ',') {
1017			/* End of param or invalid format */
1018			break;
1019		}
1020		p++;
1021	}
1022
1023	if (ret != 1)
1024		return;
1025
1026	if (!pci_dev_specific_disable_acs_redir(dev))
1027		return;
1028
1029	pci_dbg(dev, "ACS mask  = %#06x\n", mask);
1030	pci_dbg(dev, "ACS flags = %#06x\n", flags);
1031
1032	/* If mask is 0 then we copy the bit from the firmware setting. */
1033	caps->ctrl = (caps->ctrl & ~mask) | (caps->fw_ctrl & mask);
1034	caps->ctrl |= flags;
1035
1036	pci_info(dev, "Configured ACS to %#06x\n", caps->ctrl);
1037}
1038
1039/**
1040 * pci_std_enable_acs - enable ACS on devices using standard ACS capabilities
1041 * @dev: the PCI device
1042 * @caps: default ACS controls
1043 */
1044static void pci_std_enable_acs(struct pci_dev *dev, struct pci_acs *caps)
1045{
1046	/* Source Validation */
1047	caps->ctrl |= (caps->cap & PCI_ACS_SV);
1048
1049	/* P2P Request Redirect */
1050	caps->ctrl |= (caps->cap & PCI_ACS_RR);
1051
1052	/* P2P Completion Redirect */
1053	caps->ctrl |= (caps->cap & PCI_ACS_CR);
1054
1055	/* Upstream Forwarding */
1056	caps->ctrl |= (caps->cap & PCI_ACS_UF);
1057
1058	/* Enable Translation Blocking for external devices and noats */
1059	if (pci_ats_disabled() || dev->external_facing || dev->untrusted)
1060		caps->ctrl |= (caps->cap & PCI_ACS_TB);
1061}
1062
1063/**
1064 * pci_enable_acs - enable ACS if hardware support it
1065 * @dev: the PCI device
1066 */
1067static void pci_enable_acs(struct pci_dev *dev)
1068{
1069	struct pci_acs caps;
1070	bool enable_acs = false;
1071	int pos;
1072
1073	/* If an iommu is present we start with kernel default caps */
1074	if (pci_acs_enable) {
1075		if (pci_dev_specific_enable_acs(dev))
1076			enable_acs = true;
1077	}
1078
1079	pos = dev->acs_cap;
1080	if (!pos)
1081		return;
1082
1083	pci_read_config_word(dev, pos + PCI_ACS_CAP, &caps.cap);
1084	pci_read_config_word(dev, pos + PCI_ACS_CTRL, &caps.ctrl);
1085	caps.fw_ctrl = caps.ctrl;
1086
1087	if (enable_acs)
1088		pci_std_enable_acs(dev, &caps);
1089
1090	/*
1091	 * Always apply caps from the command line, even if there is no iommu.
1092	 * Trust that the admin has a reason to change the ACS settings.
1093	 */
1094	__pci_config_acs(dev, &caps, disable_acs_redir_param,
1095			 PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_EC,
1096			 ~(PCI_ACS_RR | PCI_ACS_CR | PCI_ACS_EC));
1097	__pci_config_acs(dev, &caps, config_acs_param, 0, 0);
1098
1099	pci_write_config_word(dev, pos + PCI_ACS_CTRL, caps.ctrl);
1100}
1101
1102/**
1103 * pcie_read_tlp_log - read TLP Header Log
1104 * @dev: PCIe device
1105 * @where: PCI Config offset of TLP Header Log
1106 * @tlp_log: TLP Log structure to fill
1107 *
1108 * Fill @tlp_log from TLP Header Log registers, e.g., AER or DPC.
1109 *
1110 * Return: 0 on success and filled TLP Log structure, <0 on error.
1111 */
1112int pcie_read_tlp_log(struct pci_dev *dev, int where,
1113		      struct pcie_tlp_log *tlp_log)
1114{
1115	int i, ret;
1116
1117	memset(tlp_log, 0, sizeof(*tlp_log));
1118
1119	for (i = 0; i < 4; i++) {
1120		ret = pci_read_config_dword(dev, where + i * 4,
1121					    &tlp_log->dw[i]);
1122		if (ret)
1123			return pcibios_err_to_errno(ret);
1124	}
1125
1126	return 0;
1127}
1128EXPORT_SYMBOL_GPL(pcie_read_tlp_log);
1129
1130/**
1131 * pci_restore_bars - restore a device's BAR values (e.g. after wake-up)
1132 * @dev: PCI device to have its BARs restored
 
 
1133 *
1134 * Restore the BAR values for a given device, so as to make it
1135 * accessible by its driver.
 
 
 
 
1136 */
1137static void pci_restore_bars(struct pci_dev *dev)
1138{
1139	int i;
 
1140
1141	for (i = 0; i < PCI_BRIDGE_RESOURCES; i++)
1142		pci_update_resource(dev, i);
1143}
1144
1145static inline bool platform_pci_power_manageable(struct pci_dev *dev)
1146{
1147	if (pci_use_mid_pm())
1148		return true;
1149
1150	return acpi_pci_power_manageable(dev);
1151}
1152
1153static inline int platform_pci_set_power_state(struct pci_dev *dev,
1154					       pci_power_t t)
1155{
1156	if (pci_use_mid_pm())
1157		return mid_pci_set_power_state(dev, t);
 
 
 
 
 
1158
1159	return acpi_pci_set_power_state(dev, t);
1160}
 
 
1161
1162static inline pci_power_t platform_pci_get_power_state(struct pci_dev *dev)
1163{
1164	if (pci_use_mid_pm())
1165		return mid_pci_get_power_state(dev);
1166
1167	return acpi_pci_get_power_state(dev);
1168}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1169
1170static inline void platform_pci_refresh_power_state(struct pci_dev *dev)
1171{
1172	if (!pci_use_mid_pm())
1173		acpi_pci_refresh_power_state(dev);
1174}
1175
1176static inline pci_power_t platform_pci_choose_state(struct pci_dev *dev)
1177{
1178	if (pci_use_mid_pm())
1179		return PCI_POWER_ERROR;
 
 
1180
1181	return acpi_pci_choose_state(dev);
1182}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1183
1184static inline int platform_pci_set_wakeup(struct pci_dev *dev, bool enable)
1185{
1186	if (pci_use_mid_pm())
1187		return PCI_POWER_ERROR;
1188
1189	return acpi_pci_wakeup(dev, enable);
1190}
1191
1192static inline bool platform_pci_need_resume(struct pci_dev *dev)
1193{
1194	if (pci_use_mid_pm())
1195		return false;
1196
1197	return acpi_pci_need_resume(dev);
1198}
1199
1200static inline bool platform_pci_bridge_d3(struct pci_dev *dev)
1201{
1202	if (pci_use_mid_pm())
1203		return false;
1204
1205	return acpi_pci_bridge_d3(dev);
1206}
1207
1208/**
1209 * pci_update_current_state - Read power state of given device and cache it
 
1210 * @dev: PCI device to handle.
1211 * @state: State to cache in case the device doesn't have the PM capability
1212 *
1213 * The power state is read from the PMCSR register, which however is
1214 * inaccessible in D3cold.  The platform firmware is therefore queried first
1215 * to detect accessibility of the register.  In case the platform firmware
1216 * reports an incorrect state or the device isn't power manageable by the
1217 * platform at all, we try to detect D3cold by testing accessibility of the
1218 * vendor ID in config space.
1219 */
1220void pci_update_current_state(struct pci_dev *dev, pci_power_t state)
1221{
1222	if (platform_pci_get_power_state(dev) == PCI_D3cold) {
1223		dev->current_state = PCI_D3cold;
1224	} else if (dev->pm_cap) {
1225		u16 pmcsr;
1226
1227		pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
1228		if (PCI_POSSIBLE_ERROR(pmcsr)) {
1229			dev->current_state = PCI_D3cold;
1230			return;
1231		}
1232		dev->current_state = pmcsr & PCI_PM_CTRL_STATE_MASK;
1233	} else {
1234		dev->current_state = state;
1235	}
1236}
1237
1238/**
1239 * pci_refresh_power_state - Refresh the given device's power state data
1240 * @dev: Target PCI device.
1241 *
1242 * Ask the platform to refresh the devices power state information and invoke
1243 * pci_update_current_state() to update its current PCI power state.
1244 */
1245void pci_refresh_power_state(struct pci_dev *dev)
1246{
1247	platform_pci_refresh_power_state(dev);
1248	pci_update_current_state(dev, dev->current_state);
1249}
1250
1251/**
1252 * pci_platform_power_transition - Use platform to change device power state
1253 * @dev: PCI device to handle.
1254 * @state: State to put the device into.
1255 */
1256int pci_platform_power_transition(struct pci_dev *dev, pci_power_t state)
1257{
1258	int error;
1259
1260	error = platform_pci_set_power_state(dev, state);
1261	if (!error)
1262		pci_update_current_state(dev, state);
1263	else if (!dev->pm_cap) /* Fall back to PCI_D0 */
1264		dev->current_state = PCI_D0;
 
 
 
 
 
1265
1266	return error;
1267}
1268EXPORT_SYMBOL_GPL(pci_platform_power_transition);
1269
1270static int pci_resume_one(struct pci_dev *pci_dev, void *ign)
1271{
1272	pm_request_resume(&pci_dev->dev);
1273	return 0;
1274}
1275
1276/**
1277 * pci_resume_bus - Walk given bus and runtime resume devices on it
1278 * @bus: Top bus of the subtree to walk.
 
1279 */
1280void pci_resume_bus(struct pci_bus *bus)
1281{
1282	if (bus)
1283		pci_walk_bus(bus, pci_resume_one, NULL);
1284}
1285
1286static int pci_dev_wait(struct pci_dev *dev, char *reset_type, int timeout)
1287{
1288	int delay = 1;
1289	bool retrain = false;
1290	struct pci_dev *root, *bridge;
1291
1292	root = pcie_find_root_port(dev);
1293
1294	if (pci_is_pcie(dev)) {
1295		bridge = pci_upstream_bridge(dev);
1296		if (bridge)
1297			retrain = true;
1298	}
1299
1300	/*
1301	 * The caller has already waited long enough after a reset that the
1302	 * device should respond to config requests, but it may respond
1303	 * with Request Retry Status (RRS) if it needs more time to
1304	 * initialize.
1305	 *
1306	 * If the device is below a Root Port with Configuration RRS
1307	 * Software Visibility enabled, reading the Vendor ID returns a
1308	 * special data value if the device responded with RRS.  Read the
1309	 * Vendor ID until we get non-RRS status.
1310	 *
1311	 * If there's no Root Port or Configuration RRS Software Visibility
1312	 * is not enabled, the device may still respond with RRS, but
1313	 * hardware may retry the config request.  If no retries receive
1314	 * Successful Completion, hardware generally synthesizes ~0
1315	 * (PCI_ERROR_RESPONSE) data to complete the read.  Reading Vendor
1316	 * ID for VFs and non-existent devices also returns ~0, so read the
1317	 * Command register until it returns something other than ~0.
1318	 */
1319	for (;;) {
1320		u32 id;
1321
1322		if (pci_dev_is_disconnected(dev)) {
1323			pci_dbg(dev, "disconnected; not waiting\n");
1324			return -ENOTTY;
1325		}
1326
1327		if (root && root->config_rrs_sv) {
1328			pci_read_config_dword(dev, PCI_VENDOR_ID, &id);
1329			if (!pci_bus_rrs_vendor_id(id))
1330				break;
1331		} else {
1332			pci_read_config_dword(dev, PCI_COMMAND, &id);
1333			if (!PCI_POSSIBLE_ERROR(id))
1334				break;
1335		}
1336
1337		if (delay > timeout) {
1338			pci_warn(dev, "not ready %dms after %s; giving up\n",
1339				 delay - 1, reset_type);
1340			return -ENOTTY;
1341		}
1342
1343		if (delay > PCI_RESET_WAIT) {
1344			if (retrain) {
1345				retrain = false;
1346				if (pcie_failed_link_retrain(bridge) == 0) {
1347					delay = 1;
1348					continue;
1349				}
1350			}
1351			pci_info(dev, "not ready %dms after %s; waiting\n",
1352				 delay - 1, reset_type);
1353		}
1354
1355		msleep(delay);
1356		delay *= 2;
1357	}
1358
1359	if (delay > PCI_RESET_WAIT)
1360		pci_info(dev, "ready %dms after %s\n", delay - 1,
1361			 reset_type);
1362	else
1363		pci_dbg(dev, "ready %dms after %s\n", delay - 1,
1364			reset_type);
1365
1366	return 0;
1367}
1368
1369/**
1370 * pci_power_up - Put the given device into D0
1371 * @dev: PCI device to power up
 
1372 *
1373 * On success, return 0 or 1, depending on whether or not it is necessary to
1374 * restore the device's BARs subsequently (1 is returned in that case).
1375 *
1376 * On failure, return a negative error code.  Always return failure if @dev
1377 * lacks a Power Management Capability, even if the platform was able to
1378 * put the device in D0 via non-PCI means.
1379 */
1380int pci_power_up(struct pci_dev *dev)
1381{
1382	bool need_restore;
1383	pci_power_t state;
1384	u16 pmcsr;
1385
1386	platform_pci_set_power_state(dev, PCI_D0);
1387
1388	if (!dev->pm_cap) {
1389		state = platform_pci_get_power_state(dev);
1390		if (state == PCI_UNKNOWN)
1391			dev->current_state = PCI_D0;
1392		else
1393			dev->current_state = state;
1394
1395		return -EIO;
1396	}
1397
1398	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
1399	if (PCI_POSSIBLE_ERROR(pmcsr)) {
1400		pci_err(dev, "Unable to change power state from %s to D0, device inaccessible\n",
1401			pci_power_name(dev->current_state));
1402		dev->current_state = PCI_D3cold;
1403		return -EIO;
1404	}
1405
1406	state = pmcsr & PCI_PM_CTRL_STATE_MASK;
1407
1408	need_restore = (state == PCI_D3hot || dev->current_state >= PCI_D3hot) &&
1409			!(pmcsr & PCI_PM_CTRL_NO_SOFT_RESET);
1410
1411	if (state == PCI_D0)
1412		goto end;
1413
1414	/*
1415	 * Force the entire word to 0. This doesn't affect PME_Status, disables
1416	 * PME_En, and sets PowerState to 0.
1417	 */
1418	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, 0);
1419
1420	/* Mandatory transition delays; see PCI PM 1.2. */
1421	if (state == PCI_D3hot)
1422		pci_dev_d3_sleep(dev);
1423	else if (state == PCI_D2)
1424		udelay(PCI_PM_D2_DELAY);
1425
1426end:
1427	dev->current_state = PCI_D0;
1428	if (need_restore)
1429		return 1;
1430
1431	return 0;
1432}
 
1433
1434/**
1435 * pci_set_full_power_state - Put a PCI device into D0 and update its state
1436 * @dev: PCI device to power up
1437 * @locked: whether pci_bus_sem is held
1438 *
1439 * Call pci_power_up() to put @dev into D0, read from its PCI_PM_CTRL register
1440 * to confirm the state change, restore its BARs if they might be lost and
1441 * reconfigure ASPM in accordance with the new power state.
1442 *
1443 * If pci_restore_state() is going to be called right after a power state change
1444 * to D0, it is more efficient to use pci_power_up() directly instead of this
1445 * function.
1446 */
1447static int pci_set_full_power_state(struct pci_dev *dev, bool locked)
1448{
1449	u16 pmcsr;
1450	int ret;
1451
1452	ret = pci_power_up(dev);
1453	if (ret < 0) {
1454		if (dev->current_state == PCI_D0)
1455			return 0;
1456
1457		return ret;
1458	}
1459
1460	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
1461	dev->current_state = pmcsr & PCI_PM_CTRL_STATE_MASK;
1462	if (dev->current_state != PCI_D0) {
1463		pci_info_ratelimited(dev, "Refused to change power state from %s to D0\n",
1464				     pci_power_name(dev->current_state));
1465	} else if (ret > 0) {
1466		/*
1467		 * According to section 5.4.1 of the "PCI BUS POWER MANAGEMENT
1468		 * INTERFACE SPECIFICATION, REV. 1.2", a device transitioning
1469		 * from D3hot to D0 _may_ perform an internal reset, thereby
1470		 * going to "D0 Uninitialized" rather than "D0 Initialized".
1471		 * For example, at least some versions of the 3c905B and the
1472		 * 3c556B exhibit this behaviour.
1473		 *
1474		 * At least some laptop BIOSen (e.g. the Thinkpad T21) leave
1475		 * devices in a D3hot state at boot.  Consequently, we need to
1476		 * restore at least the BARs so that the device will be
1477		 * accessible to its driver.
1478		 */
1479		pci_restore_bars(dev);
1480	}
1481
1482	if (dev->bus->self)
1483		pcie_aspm_pm_state_change(dev->bus->self, locked);
1484
1485	return 0;
1486}
1487
1488/**
1489 * __pci_dev_set_current_state - Set current state of a PCI device
1490 * @dev: Device to handle
1491 * @data: pointer to state to be set
1492 */
1493static int __pci_dev_set_current_state(struct pci_dev *dev, void *data)
1494{
1495	pci_power_t state = *(pci_power_t *)data;
1496
1497	dev->current_state = state;
1498	return 0;
1499}
1500
1501/**
1502 * pci_bus_set_current_state - Walk given bus and set current state of devices
1503 * @bus: Top bus of the subtree to walk.
1504 * @state: state to be set
1505 */
1506void pci_bus_set_current_state(struct pci_bus *bus, pci_power_t state)
1507{
1508	if (bus)
1509		pci_walk_bus(bus, __pci_dev_set_current_state, &state);
1510}
1511
1512static void __pci_bus_set_current_state(struct pci_bus *bus, pci_power_t state, bool locked)
1513{
1514	if (!bus)
1515		return;
1516
1517	if (locked)
1518		pci_walk_bus_locked(bus, __pci_dev_set_current_state, &state);
1519	else
1520		pci_walk_bus(bus, __pci_dev_set_current_state, &state);
1521}
1522
1523/**
1524 * pci_set_low_power_state - Put a PCI device into a low-power state.
1525 * @dev: PCI device to handle.
1526 * @state: PCI power state (D1, D2, D3hot) to put the device into.
1527 * @locked: whether pci_bus_sem is held
1528 *
1529 * Use the device's PCI_PM_CTRL register to put it into a low-power state.
 
1530 *
1531 * RETURN VALUE:
1532 * -EINVAL if the requested state is invalid.
1533 * -EIO if device does not support PCI PM or its PM capabilities register has a
1534 * wrong version, or device doesn't support the requested state.
1535 * 0 if device already is in the requested state.
1536 * 0 if device's power state has been successfully changed.
1537 */
1538static int pci_set_low_power_state(struct pci_dev *dev, pci_power_t state, bool locked)
1539{
1540	u16 pmcsr;
1541
1542	if (!dev->pm_cap)
1543		return -EIO;
1544
1545	/*
1546	 * Validate transition: We can enter D0 from any state, but if
1547	 * we're already in a low-power state, we can only go deeper.  E.g.,
1548	 * we can go from D1 to D3, but we can't go directly from D3 to D1;
1549	 * we'd have to go from D3 to D0, then to D1.
1550	 */
1551	if (dev->current_state <= PCI_D3cold && dev->current_state > state) {
1552		pci_dbg(dev, "Invalid power transition (from %s to %s)\n",
1553			pci_power_name(dev->current_state),
1554			pci_power_name(state));
1555		return -EINVAL;
1556	}
1557
1558	/* Check if this device supports the desired state */
1559	if ((state == PCI_D1 && !dev->d1_support)
1560	   || (state == PCI_D2 && !dev->d2_support))
1561		return -EIO;
1562
1563	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
1564	if (PCI_POSSIBLE_ERROR(pmcsr)) {
1565		pci_err(dev, "Unable to change power state from %s to %s, device inaccessible\n",
1566			pci_power_name(dev->current_state),
1567			pci_power_name(state));
1568		dev->current_state = PCI_D3cold;
1569		return -EIO;
1570	}
1571
1572	pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
1573	pmcsr |= state;
1574
1575	/* Enter specified state */
1576	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pmcsr);
1577
1578	/* Mandatory power management transition delays; see PCI PM 1.2. */
1579	if (state == PCI_D3hot)
1580		pci_dev_d3_sleep(dev);
1581	else if (state == PCI_D2)
1582		udelay(PCI_PM_D2_DELAY);
1583
1584	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
1585	dev->current_state = pmcsr & PCI_PM_CTRL_STATE_MASK;
1586	if (dev->current_state != state)
1587		pci_info_ratelimited(dev, "Refused to change power state from %s to %s\n",
1588				     pci_power_name(dev->current_state),
1589				     pci_power_name(state));
1590
1591	if (dev->bus->self)
1592		pcie_aspm_pm_state_change(dev->bus->self, locked);
1593
1594	return 0;
1595}
1596
1597static int __pci_set_power_state(struct pci_dev *dev, pci_power_t state, bool locked)
1598{
1599	int error;
1600
1601	/* Bound the state we're entering */
1602	if (state > PCI_D3cold)
1603		state = PCI_D3cold;
1604	else if (state < PCI_D0)
1605		state = PCI_D0;
1606	else if ((state == PCI_D1 || state == PCI_D2) && pci_no_d1d2(dev))
1607
1608		/*
1609		 * If the device or the parent bridge do not support PCI
1610		 * PM, ignore the request if we're doing anything other
1611		 * than putting it into D0 (which would only happen on
1612		 * boot).
1613		 */
1614		return 0;
1615
1616	/* Check if we're already there */
1617	if (dev->current_state == state)
 
 
 
1618		return 0;
1619
1620	if (state == PCI_D0)
1621		return pci_set_full_power_state(dev, locked);
1622
 
 
1623	/*
1624	 * This device is quirked not to be put into D3, so don't put it in
1625	 * D3
1626	 */
1627	if (state >= PCI_D3hot && (dev->dev_flags & PCI_DEV_FLAGS_NO_D3))
1628		return 0;
1629
1630	if (state == PCI_D3cold) {
1631		/*
1632		 * To put the device in D3cold, put it into D3hot in the native
1633		 * way, then put it into D3cold using platform ops.
1634		 */
1635		error = pci_set_low_power_state(dev, PCI_D3hot, locked);
1636
1637		if (pci_platform_power_transition(dev, PCI_D3cold))
1638			return error;
1639
1640		/* Powering off a bridge may power off the whole hierarchy */
1641		if (dev->current_state == PCI_D3cold)
1642			__pci_bus_set_current_state(dev->subordinate, PCI_D3cold, locked);
1643	} else {
1644		error = pci_set_low_power_state(dev, state, locked);
1645
1646		if (pci_platform_power_transition(dev, state))
1647			return error;
1648	}
1649
1650	return 0;
1651}
1652
1653/**
1654 * pci_set_power_state - Set the power state of a PCI device
1655 * @dev: PCI device to handle.
1656 * @state: PCI power state (D0, D1, D2, D3hot) to put the device into.
 
1657 *
1658 * Transition a device to a new power state, using the platform firmware and/or
1659 * the device's PCI PM registers.
1660 *
1661 * RETURN VALUE:
1662 * -EINVAL if the requested state is invalid.
1663 * -EIO if device does not support PCI PM or its PM capabilities register has a
1664 * wrong version, or device doesn't support the requested state.
1665 * 0 if the transition is to D1 or D2 but D1 and D2 are not supported.
1666 * 0 if device already is in the requested state.
1667 * 0 if the transition is to D3 but D3 is not supported.
1668 * 0 if device's power state has been successfully changed.
1669 */
1670int pci_set_power_state(struct pci_dev *dev, pci_power_t state)
1671{
1672	return __pci_set_power_state(dev, state, false);
1673}
1674EXPORT_SYMBOL(pci_set_power_state);
1675
1676int pci_set_power_state_locked(struct pci_dev *dev, pci_power_t state)
1677{
1678	lockdep_assert_held(&pci_bus_sem);
1679
1680	return __pci_set_power_state(dev, state, true);
1681}
1682EXPORT_SYMBOL(pci_set_power_state_locked);
1683
1684#define PCI_EXP_SAVE_REGS	7
 
 
1685
1686static struct pci_cap_saved_state *_pci_find_saved_cap(struct pci_dev *pci_dev,
1687						       u16 cap, bool extended)
1688{
1689	struct pci_cap_saved_state *tmp;
1690
1691	hlist_for_each_entry(tmp, &pci_dev->saved_cap_space, next) {
1692		if (tmp->cap.cap_extended == extended && tmp->cap.cap_nr == cap)
1693			return tmp;
 
 
 
 
 
1694	}
1695	return NULL;
1696}
1697
1698struct pci_cap_saved_state *pci_find_saved_cap(struct pci_dev *dev, char cap)
1699{
1700	return _pci_find_saved_cap(dev, cap, false);
1701}
1702
1703struct pci_cap_saved_state *pci_find_saved_ext_cap(struct pci_dev *dev, u16 cap)
1704{
1705	return _pci_find_saved_cap(dev, cap, true);
1706}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1707
1708static int pci_save_pcie_state(struct pci_dev *dev)
1709{
1710	int i = 0;
1711	struct pci_cap_saved_state *save_state;
1712	u16 *cap;
 
1713
1714	if (!pci_is_pcie(dev))
 
1715		return 0;
1716
1717	save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP);
1718	if (!save_state) {
1719		pci_err(dev, "buffer not found in %s\n", __func__);
1720		return -ENOMEM;
1721	}
 
1722
1723	cap = (u16 *)&save_state->cap.data[0];
1724	pcie_capability_read_word(dev, PCI_EXP_DEVCTL, &cap[i++]);
1725	pcie_capability_read_word(dev, PCI_EXP_LNKCTL, &cap[i++]);
1726	pcie_capability_read_word(dev, PCI_EXP_SLTCTL, &cap[i++]);
1727	pcie_capability_read_word(dev, PCI_EXP_RTCTL,  &cap[i++]);
1728	pcie_capability_read_word(dev, PCI_EXP_DEVCTL2, &cap[i++]);
1729	pcie_capability_read_word(dev, PCI_EXP_LNKCTL2, &cap[i++]);
1730	pcie_capability_read_word(dev, PCI_EXP_SLTCTL2, &cap[i++]);
1731
1732	pci_save_aspm_l1ss_state(dev);
1733	pci_save_ltr_state(dev);
 
 
 
 
 
 
 
 
 
 
 
 
1734
1735	return 0;
1736}
1737
1738static void pci_restore_pcie_state(struct pci_dev *dev)
1739{
1740	int i = 0;
1741	struct pci_cap_saved_state *save_state;
1742	u16 *cap;
1743
1744	/*
1745	 * Restore max latencies (in the LTR capability) before enabling
1746	 * LTR itself in PCI_EXP_DEVCTL2.
1747	 */
1748	pci_restore_ltr_state(dev);
1749	pci_restore_aspm_l1ss_state(dev);
1750
1751	save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP);
1752	if (!save_state)
 
1753		return;
 
1754
1755	/*
1756	 * Downstream ports reset the LTR enable bit when link goes down.
1757	 * Check and re-configure the bit here before restoring device.
1758	 * PCIe r5.0, sec 7.5.3.16.
1759	 */
1760	pci_bridge_reconfigure_ltr(dev);
1761
1762	cap = (u16 *)&save_state->cap.data[0];
1763	pcie_capability_write_word(dev, PCI_EXP_DEVCTL, cap[i++]);
1764	pcie_capability_write_word(dev, PCI_EXP_LNKCTL, cap[i++]);
1765	pcie_capability_write_word(dev, PCI_EXP_SLTCTL, cap[i++]);
1766	pcie_capability_write_word(dev, PCI_EXP_RTCTL, cap[i++]);
1767	pcie_capability_write_word(dev, PCI_EXP_DEVCTL2, cap[i++]);
1768	pcie_capability_write_word(dev, PCI_EXP_LNKCTL2, cap[i++]);
1769	pcie_capability_write_word(dev, PCI_EXP_SLTCTL2, cap[i++]);
 
 
 
 
 
 
1770}
1771
 
1772static int pci_save_pcix_state(struct pci_dev *dev)
1773{
1774	int pos;
1775	struct pci_cap_saved_state *save_state;
1776
1777	pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
1778	if (!pos)
1779		return 0;
1780
1781	save_state = pci_find_saved_cap(dev, PCI_CAP_ID_PCIX);
1782	if (!save_state) {
1783		pci_err(dev, "buffer not found in %s\n", __func__);
1784		return -ENOMEM;
1785	}
1786
1787	pci_read_config_word(dev, pos + PCI_X_CMD,
1788			     (u16 *)save_state->cap.data);
1789
1790	return 0;
1791}
1792
1793static void pci_restore_pcix_state(struct pci_dev *dev)
1794{
1795	int i = 0, pos;
1796	struct pci_cap_saved_state *save_state;
1797	u16 *cap;
1798
1799	save_state = pci_find_saved_cap(dev, PCI_CAP_ID_PCIX);
1800	pos = pci_find_capability(dev, PCI_CAP_ID_PCIX);
1801	if (!save_state || !pos)
1802		return;
1803	cap = (u16 *)&save_state->cap.data[0];
1804
1805	pci_write_config_word(dev, pos + PCI_X_CMD, cap[i++]);
1806}
1807
 
1808/**
1809 * pci_save_state - save the PCI configuration space of a device before
1810 *		    suspending
1811 * @dev: PCI device that we're dealing with
1812 */
1813int pci_save_state(struct pci_dev *dev)
 
1814{
1815	int i;
1816	/* XXX: 100% dword access ok here? */
1817	for (i = 0; i < 16; i++) {
1818		pci_read_config_dword(dev, i * 4, &dev->saved_config_space[i]);
1819		pci_dbg(dev, "save config %#04x: %#010x\n",
1820			i * 4, dev->saved_config_space[i]);
1821	}
1822	dev->state_saved = true;
1823
1824	i = pci_save_pcie_state(dev);
1825	if (i != 0)
1826		return i;
1827
1828	i = pci_save_pcix_state(dev);
1829	if (i != 0)
1830		return i;
1831
1832	pci_save_dpc_state(dev);
1833	pci_save_aer_state(dev);
1834	pci_save_ptm_state(dev);
1835	pci_save_tph_state(dev);
1836	return pci_save_vc_state(dev);
1837}
1838EXPORT_SYMBOL(pci_save_state);
1839
1840static void pci_restore_config_dword(struct pci_dev *pdev, int offset,
1841				     u32 saved_val, int retry, bool force)
1842{
1843	u32 val;
1844
1845	pci_read_config_dword(pdev, offset, &val);
1846	if (!force && val == saved_val)
1847		return;
1848
1849	for (;;) {
1850		pci_dbg(pdev, "restore config %#04x: %#010x -> %#010x\n",
1851			offset, val, saved_val);
1852		pci_write_config_dword(pdev, offset, saved_val);
1853		if (retry-- <= 0)
1854			return;
1855
1856		pci_read_config_dword(pdev, offset, &val);
1857		if (val == saved_val)
1858			return;
1859
1860		mdelay(1);
1861	}
1862}
1863
1864static void pci_restore_config_space_range(struct pci_dev *pdev,
1865					   int start, int end, int retry,
1866					   bool force)
1867{
1868	int index;
1869
1870	for (index = end; index >= start; index--)
1871		pci_restore_config_dword(pdev, 4 * index,
1872					 pdev->saved_config_space[index],
1873					 retry, force);
1874}
1875
1876static void pci_restore_config_space(struct pci_dev *pdev)
1877{
1878	if (pdev->hdr_type == PCI_HEADER_TYPE_NORMAL) {
1879		pci_restore_config_space_range(pdev, 10, 15, 0, false);
1880		/* Restore BARs before the command register. */
1881		pci_restore_config_space_range(pdev, 4, 9, 10, false);
1882		pci_restore_config_space_range(pdev, 0, 3, 0, false);
1883	} else if (pdev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
1884		pci_restore_config_space_range(pdev, 12, 15, 0, false);
1885
1886		/*
1887		 * Force rewriting of prefetch registers to avoid S3 resume
1888		 * issues on Intel PCI bridges that occur when these
1889		 * registers are not explicitly written.
1890		 */
1891		pci_restore_config_space_range(pdev, 9, 11, 0, true);
1892		pci_restore_config_space_range(pdev, 0, 8, 0, false);
1893	} else {
1894		pci_restore_config_space_range(pdev, 0, 15, 0, false);
1895	}
1896}
1897
1898static void pci_restore_rebar_state(struct pci_dev *pdev)
1899{
1900	unsigned int pos, nbars, i;
1901	u32 ctrl;
1902
1903	pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_REBAR);
1904	if (!pos)
1905		return;
1906
1907	pci_read_config_dword(pdev, pos + PCI_REBAR_CTRL, &ctrl);
1908	nbars = FIELD_GET(PCI_REBAR_CTRL_NBAR_MASK, ctrl);
1909
1910	for (i = 0; i < nbars; i++, pos += 8) {
1911		struct resource *res;
1912		int bar_idx, size;
1913
1914		pci_read_config_dword(pdev, pos + PCI_REBAR_CTRL, &ctrl);
1915		bar_idx = ctrl & PCI_REBAR_CTRL_BAR_IDX;
1916		res = pdev->resource + bar_idx;
1917		size = pci_rebar_bytes_to_size(resource_size(res));
1918		ctrl &= ~PCI_REBAR_CTRL_BAR_SIZE;
1919		ctrl |= FIELD_PREP(PCI_REBAR_CTRL_BAR_SIZE, size);
1920		pci_write_config_dword(pdev, pos + PCI_REBAR_CTRL, ctrl);
1921	}
1922}
1923
1924/**
1925 * pci_restore_state - Restore the saved state of a PCI device
1926 * @dev: PCI device that we're dealing with
1927 */
1928void pci_restore_state(struct pci_dev *dev)
1929{
 
 
 
1930	if (!dev->state_saved)
1931		return;
1932
 
1933	pci_restore_pcie_state(dev);
1934	pci_restore_pasid_state(dev);
1935	pci_restore_pri_state(dev);
1936	pci_restore_ats_state(dev);
1937	pci_restore_vc_state(dev);
1938	pci_restore_rebar_state(dev);
1939	pci_restore_dpc_state(dev);
1940	pci_restore_ptm_state(dev);
1941	pci_restore_tph_state(dev);
1942
1943	pci_aer_clear_status(dev);
1944	pci_restore_aer_state(dev);
1945
1946	pci_restore_config_space(dev);
1947
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1948	pci_restore_pcix_state(dev);
1949	pci_restore_msi_state(dev);
1950
1951	/* Restore ACS and IOV configuration state */
1952	pci_enable_acs(dev);
1953	pci_restore_iov_state(dev);
1954
1955	dev->state_saved = false;
1956}
1957EXPORT_SYMBOL(pci_restore_state);
1958
1959struct pci_saved_state {
1960	u32 config_space[16];
1961	struct pci_cap_saved_data cap[];
1962};
1963
1964/**
1965 * pci_store_saved_state - Allocate and return an opaque struct containing
1966 *			   the device saved state.
1967 * @dev: PCI device that we're dealing with
1968 *
1969 * Return NULL if no state or error.
1970 */
1971struct pci_saved_state *pci_store_saved_state(struct pci_dev *dev)
1972{
1973	struct pci_saved_state *state;
1974	struct pci_cap_saved_state *tmp;
1975	struct pci_cap_saved_data *cap;
 
1976	size_t size;
1977
1978	if (!dev->state_saved)
1979		return NULL;
1980
1981	size = sizeof(*state) + sizeof(struct pci_cap_saved_data);
1982
1983	hlist_for_each_entry(tmp, &dev->saved_cap_space, next)
1984		size += sizeof(struct pci_cap_saved_data) + tmp->cap.size;
1985
1986	state = kzalloc(size, GFP_KERNEL);
1987	if (!state)
1988		return NULL;
1989
1990	memcpy(state->config_space, dev->saved_config_space,
1991	       sizeof(state->config_space));
1992
1993	cap = state->cap;
1994	hlist_for_each_entry(tmp, &dev->saved_cap_space, next) {
1995		size_t len = sizeof(struct pci_cap_saved_data) + tmp->cap.size;
1996		memcpy(cap, &tmp->cap, len);
1997		cap = (struct pci_cap_saved_data *)((u8 *)cap + len);
1998	}
1999	/* Empty cap_save terminates list */
2000
2001	return state;
2002}
2003EXPORT_SYMBOL_GPL(pci_store_saved_state);
2004
2005/**
2006 * pci_load_saved_state - Reload the provided save state into struct pci_dev.
2007 * @dev: PCI device that we're dealing with
2008 * @state: Saved state returned from pci_store_saved_state()
2009 */
2010int pci_load_saved_state(struct pci_dev *dev,
2011			 struct pci_saved_state *state)
2012{
2013	struct pci_cap_saved_data *cap;
2014
2015	dev->state_saved = false;
2016
2017	if (!state)
2018		return 0;
2019
2020	memcpy(dev->saved_config_space, state->config_space,
2021	       sizeof(state->config_space));
2022
2023	cap = state->cap;
2024	while (cap->size) {
2025		struct pci_cap_saved_state *tmp;
2026
2027		tmp = _pci_find_saved_cap(dev, cap->cap_nr, cap->cap_extended);
2028		if (!tmp || tmp->cap.size != cap->size)
2029			return -EINVAL;
2030
2031		memcpy(tmp->cap.data, cap->data, tmp->cap.size);
2032		cap = (struct pci_cap_saved_data *)((u8 *)cap +
2033		       sizeof(struct pci_cap_saved_data) + cap->size);
2034	}
2035
2036	dev->state_saved = true;
2037	return 0;
2038}
2039EXPORT_SYMBOL_GPL(pci_load_saved_state);
2040
2041/**
2042 * pci_load_and_free_saved_state - Reload the save state pointed to by state,
2043 *				   and free the memory allocated for it.
2044 * @dev: PCI device that we're dealing with
2045 * @state: Pointer to saved state returned from pci_store_saved_state()
2046 */
2047int pci_load_and_free_saved_state(struct pci_dev *dev,
2048				  struct pci_saved_state **state)
2049{
2050	int ret = pci_load_saved_state(dev, *state);
2051	kfree(*state);
2052	*state = NULL;
2053	return ret;
2054}
2055EXPORT_SYMBOL_GPL(pci_load_and_free_saved_state);
2056
2057int __weak pcibios_enable_device(struct pci_dev *dev, int bars)
2058{
2059	return pci_enable_resources(dev, bars);
2060}
2061
2062static int do_pci_enable_device(struct pci_dev *dev, int bars)
2063{
2064	int err;
2065	struct pci_dev *bridge;
2066	u16 cmd;
2067	u8 pin;
2068
2069	err = pci_set_power_state(dev, PCI_D0);
2070	if (err < 0 && err != -EIO)
2071		return err;
2072
2073	bridge = pci_upstream_bridge(dev);
2074	if (bridge)
2075		pcie_aspm_powersave_config_link(bridge);
2076
2077	err = pcibios_enable_device(dev, bars);
2078	if (err < 0)
2079		return err;
2080	pci_fixup_device(pci_fixup_enable, dev);
2081
2082	if (dev->msi_enabled || dev->msix_enabled)
2083		return 0;
2084
2085	pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
2086	if (pin) {
2087		pci_read_config_word(dev, PCI_COMMAND, &cmd);
2088		if (cmd & PCI_COMMAND_INTX_DISABLE)
2089			pci_write_config_word(dev, PCI_COMMAND,
2090					      cmd & ~PCI_COMMAND_INTX_DISABLE);
2091	}
2092
2093	return 0;
2094}
2095
2096/**
2097 * pci_reenable_device - Resume abandoned device
2098 * @dev: PCI device to be resumed
2099 *
2100 * NOTE: This function is a backend of pci_default_resume() and is not supposed
2101 * to be called by normal code, write proper resume handler and use it instead.
2102 */
2103int pci_reenable_device(struct pci_dev *dev)
2104{
2105	if (pci_is_enabled(dev))
2106		return do_pci_enable_device(dev, (1 << PCI_NUM_RESOURCES) - 1);
2107	return 0;
2108}
2109EXPORT_SYMBOL(pci_reenable_device);
2110
2111static void pci_enable_bridge(struct pci_dev *dev)
 
2112{
2113	struct pci_dev *bridge;
2114	int retval;
2115
2116	bridge = pci_upstream_bridge(dev);
2117	if (bridge)
2118		pci_enable_bridge(bridge);
2119
2120	if (pci_is_enabled(dev)) {
2121		if (!dev->is_busmaster)
2122			pci_set_master(dev);
2123		return;
2124	}
2125
2126	retval = pci_enable_device(dev);
2127	if (retval)
2128		pci_err(dev, "Error enabling bridge (%d), continuing\n",
2129			retval);
2130	pci_set_master(dev);
2131}
2132
2133static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags)
2134{
2135	struct pci_dev *bridge;
2136	int err;
2137	int i, bars = 0;
2138
2139	/*
2140	 * Power state could be unknown at this point, either due to a fresh
2141	 * boot or a device removal call.  So get the current power state
2142	 * so that things like MSI message writing will behave as expected
2143	 * (e.g. if the device really is in D0 at enable time).
2144	 */
2145	pci_update_current_state(dev, dev->current_state);
 
 
 
 
2146
2147	if (atomic_inc_return(&dev->enable_cnt) > 1)
2148		return 0;		/* already enabled */
2149
2150	bridge = pci_upstream_bridge(dev);
2151	if (bridge)
2152		pci_enable_bridge(bridge);
2153
2154	/* only skip sriov related */
2155	for (i = 0; i <= PCI_ROM_RESOURCE; i++)
2156		if (dev->resource[i].flags & flags)
2157			bars |= (1 << i);
2158	for (i = PCI_BRIDGE_RESOURCES; i < DEVICE_COUNT_RESOURCE; i++)
2159		if (dev->resource[i].flags & flags)
2160			bars |= (1 << i);
2161
2162	err = do_pci_enable_device(dev, bars);
2163	if (err < 0)
2164		atomic_dec(&dev->enable_cnt);
2165	return err;
2166}
2167
2168/**
 
 
 
 
 
 
 
 
 
 
 
 
 
2169 * pci_enable_device_mem - Initialize a device for use with Memory space
2170 * @dev: PCI device to be initialized
2171 *
2172 * Initialize device before it's used by a driver. Ask low-level code
2173 * to enable Memory resources. Wake up the device if it was suspended.
2174 * Beware, this function can fail.
2175 */
2176int pci_enable_device_mem(struct pci_dev *dev)
2177{
2178	return pci_enable_device_flags(dev, IORESOURCE_MEM);
2179}
2180EXPORT_SYMBOL(pci_enable_device_mem);
2181
2182/**
2183 * pci_enable_device - Initialize device before it's used by a driver.
2184 * @dev: PCI device to be initialized
2185 *
2186 * Initialize device before it's used by a driver. Ask low-level code
2187 * to enable I/O and memory. Wake up the device if it was suspended.
2188 * Beware, this function can fail.
2189 *
2190 * Note we don't actually enable the device many times if we call
2191 * this function repeatedly (we just increment the count).
2192 */
2193int pci_enable_device(struct pci_dev *dev)
2194{
2195	return pci_enable_device_flags(dev, IORESOURCE_MEM | IORESOURCE_IO);
2196}
2197EXPORT_SYMBOL(pci_enable_device);
2198
2199/*
2200 * pcibios_device_add - provide arch specific hooks when adding device dev
2201 * @dev: the PCI device being added
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2202 *
2203 * Permits the platform to provide architecture specific functionality when
2204 * devices are added. This is the default implementation. Architecture
2205 * implementations can override this.
2206 */
2207int __weak pcibios_device_add(struct pci_dev *dev)
2208{
2209	return 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2210}
2211
2212/**
2213 * pcibios_release_device - provide arch specific hooks when releasing
2214 *			    device dev
2215 * @dev: the PCI device being released
2216 *
2217 * Permits the platform to provide architecture specific functionality when
2218 * devices are released. This is the default implementation. Architecture
2219 * implementations can override this.
2220 */
2221void __weak pcibios_release_device(struct pci_dev *dev) {}
 
 
 
 
 
 
 
 
2222
2223/**
2224 * pcibios_disable_device - disable arch specific PCI resources for device dev
2225 * @dev: the PCI device to disable
2226 *
2227 * Disables architecture specific PCI resources for the device. This
2228 * is the default implementation. Architecture implementations can
2229 * override this.
2230 */
2231void __weak pcibios_disable_device(struct pci_dev *dev) {}
2232
2233static void do_pci_disable_device(struct pci_dev *dev)
2234{
2235	u16 pci_command;
2236
2237	pci_read_config_word(dev, PCI_COMMAND, &pci_command);
2238	if (pci_command & PCI_COMMAND_MASTER) {
2239		pci_command &= ~PCI_COMMAND_MASTER;
2240		pci_write_config_word(dev, PCI_COMMAND, pci_command);
2241	}
2242
2243	pcibios_disable_device(dev);
2244}
2245
2246/**
2247 * pci_disable_enabled_device - Disable device without updating enable_cnt
2248 * @dev: PCI device to disable
2249 *
2250 * NOTE: This function is a backend of PCI power management routines and is
2251 * not supposed to be called drivers.
2252 */
2253void pci_disable_enabled_device(struct pci_dev *dev)
2254{
2255	if (pci_is_enabled(dev))
2256		do_pci_disable_device(dev);
2257}
2258
2259/**
2260 * pci_disable_device - Disable PCI device after use
2261 * @dev: PCI device to be disabled
2262 *
2263 * Signal to the system that the PCI device is not in use by the system
2264 * anymore.  This only involves disabling PCI bus-mastering, if active.
2265 *
2266 * Note we don't actually disable the device until all callers of
2267 * pci_enable_device() have called pci_disable_device().
2268 */
2269void pci_disable_device(struct pci_dev *dev)
 
2270{
2271	dev_WARN_ONCE(&dev->dev, atomic_read(&dev->enable_cnt) <= 0,
2272		      "disabling already-disabled device");
 
 
 
2273
2274	if (atomic_dec_return(&dev->enable_cnt) != 0)
2275		return;
2276
2277	do_pci_disable_device(dev);
2278
2279	dev->is_busmaster = 0;
2280}
2281EXPORT_SYMBOL(pci_disable_device);
2282
2283/**
2284 * pcibios_set_pcie_reset_state - set reset state for device dev
2285 * @dev: the PCIe device reset
2286 * @state: Reset state to enter into
2287 *
2288 * Set the PCIe reset state for the device. This is the default
 
2289 * implementation. Architecture implementations can override this.
2290 */
2291int __weak pcibios_set_pcie_reset_state(struct pci_dev *dev,
2292					enum pcie_reset_state state)
2293{
2294	return -EINVAL;
2295}
2296
2297/**
2298 * pci_set_pcie_reset_state - set reset state for device dev
2299 * @dev: the PCIe device reset
2300 * @state: Reset state to enter into
2301 *
 
2302 * Sets the PCI reset state for the device.
2303 */
2304int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state)
2305{
2306	return pcibios_set_pcie_reset_state(dev, state);
2307}
2308EXPORT_SYMBOL_GPL(pci_set_pcie_reset_state);
2309
2310#ifdef CONFIG_PCIEAER
2311void pcie_clear_device_status(struct pci_dev *dev)
2312{
2313	u16 sta;
2314
2315	pcie_capability_read_word(dev, PCI_EXP_DEVSTA, &sta);
2316	pcie_capability_write_word(dev, PCI_EXP_DEVSTA, sta);
2317}
2318#endif
2319
2320/**
2321 * pcie_clear_root_pme_status - Clear root port PME interrupt status.
2322 * @dev: PCIe root port or event collector.
2323 */
2324void pcie_clear_root_pme_status(struct pci_dev *dev)
2325{
2326	pcie_capability_set_dword(dev, PCI_EXP_RTSTA, PCI_EXP_RTSTA_PME);
2327}
2328
2329/**
2330 * pci_check_pme_status - Check if given device has generated PME.
2331 * @dev: Device to check.
2332 *
2333 * Check the PME status of the device and if set, clear it and clear PME enable
2334 * (if set).  Return 'true' if PME status and PME enable were both set or
2335 * 'false' otherwise.
2336 */
2337bool pci_check_pme_status(struct pci_dev *dev)
2338{
2339	int pmcsr_pos;
2340	u16 pmcsr;
2341	bool ret = false;
2342
2343	if (!dev->pm_cap)
2344		return false;
2345
2346	pmcsr_pos = dev->pm_cap + PCI_PM_CTRL;
2347	pci_read_config_word(dev, pmcsr_pos, &pmcsr);
2348	if (!(pmcsr & PCI_PM_CTRL_PME_STATUS))
2349		return false;
2350
2351	/* Clear PME status. */
2352	pmcsr |= PCI_PM_CTRL_PME_STATUS;
2353	if (pmcsr & PCI_PM_CTRL_PME_ENABLE) {
2354		/* Disable PME to avoid interrupt flood. */
2355		pmcsr &= ~PCI_PM_CTRL_PME_ENABLE;
2356		ret = true;
2357	}
2358
2359	pci_write_config_word(dev, pmcsr_pos, pmcsr);
2360
2361	return ret;
2362}
2363
2364/**
2365 * pci_pme_wakeup - Wake up a PCI device if its PME Status bit is set.
2366 * @dev: Device to handle.
2367 * @pme_poll_reset: Whether or not to reset the device's pme_poll flag.
2368 *
2369 * Check if @dev has generated PME and queue a resume request for it in that
2370 * case.
2371 */
2372static int pci_pme_wakeup(struct pci_dev *dev, void *pme_poll_reset)
2373{
2374	if (pme_poll_reset && dev->pme_poll)
2375		dev->pme_poll = false;
2376
2377	if (pci_check_pme_status(dev)) {
2378		pci_wakeup_event(dev);
2379		pm_request_resume(&dev->dev);
2380	}
2381	return 0;
2382}
2383
2384/**
2385 * pci_pme_wakeup_bus - Walk given bus and wake up devices on it, if necessary.
2386 * @bus: Top bus of the subtree to walk.
2387 */
2388void pci_pme_wakeup_bus(struct pci_bus *bus)
2389{
2390	if (bus)
2391		pci_walk_bus(bus, pci_pme_wakeup, (void *)true);
2392}
2393
2394
2395/**
2396 * pci_pme_capable - check the capability of PCI device to generate PME#
2397 * @dev: PCI device to handle.
2398 * @state: PCI state from which device will issue PME#.
2399 */
2400bool pci_pme_capable(struct pci_dev *dev, pci_power_t state)
2401{
2402	if (!dev->pm_cap)
2403		return false;
2404
2405	return !!(dev->pme_support & (1 << state));
2406}
2407EXPORT_SYMBOL(pci_pme_capable);
2408
2409static void pci_pme_list_scan(struct work_struct *work)
2410{
2411	struct pci_pme_device *pme_dev, *n;
2412
2413	mutex_lock(&pci_pme_list_mutex);
2414	list_for_each_entry_safe(pme_dev, n, &pci_pme_list, list) {
2415		struct pci_dev *pdev = pme_dev->dev;
2416
2417		if (pdev->pme_poll) {
2418			struct pci_dev *bridge = pdev->bus->self;
2419			struct device *dev = &pdev->dev;
2420			struct device *bdev = bridge ? &bridge->dev : NULL;
2421			int bref = 0;
2422
2423			/*
2424			 * If we have a bridge, it should be in an active/D0
2425			 * state or the configuration space of subordinate
2426			 * devices may not be accessible or stable over the
2427			 * course of the call.
2428			 */
2429			if (bdev) {
2430				bref = pm_runtime_get_if_active(bdev);
2431				if (!bref)
2432					continue;
2433
2434				if (bridge->current_state != PCI_D0)
2435					goto put_bridge;
2436			}
2437
2438			/*
2439			 * The device itself should be suspended but config
2440			 * space must be accessible, therefore it cannot be in
2441			 * D3cold.
2442			 */
2443			if (pm_runtime_suspended(dev) &&
2444			    pdev->current_state != PCI_D3cold)
2445				pci_pme_wakeup(pdev, NULL);
2446
2447put_bridge:
2448			if (bref > 0)
2449				pm_runtime_put(bdev);
2450		} else {
2451			list_del(&pme_dev->list);
2452			kfree(pme_dev);
2453		}
2454	}
2455	if (!list_empty(&pci_pme_list))
2456		queue_delayed_work(system_freezable_wq, &pci_pme_work,
2457				   msecs_to_jiffies(PME_TIMEOUT));
2458	mutex_unlock(&pci_pme_list_mutex);
2459}
2460
2461static void __pci_pme_active(struct pci_dev *dev, bool enable)
2462{
2463	u16 pmcsr;
2464
2465	if (!dev->pme_support)
2466		return;
2467
2468	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
2469	/* Clear PME_Status by writing 1 to it and enable PME# */
2470	pmcsr |= PCI_PM_CTRL_PME_STATUS | PCI_PM_CTRL_PME_ENABLE;
2471	if (!enable)
2472		pmcsr &= ~PCI_PM_CTRL_PME_ENABLE;
2473
2474	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pmcsr);
2475}
2476
2477/**
2478 * pci_pme_restore - Restore PME configuration after config space restore.
2479 * @dev: PCI device to update.
 
2480 */
2481void pci_pme_restore(struct pci_dev *dev)
 
2482{
2483	u16 pmcsr;
2484
2485	if (!dev->pme_support)
2486		return;
2487
2488	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
2489	if (dev->wakeup_prepared) {
2490		pmcsr |= PCI_PM_CTRL_PME_ENABLE;
2491		pmcsr &= ~PCI_PM_CTRL_PME_STATUS;
2492	} else {
2493		pmcsr &= ~PCI_PM_CTRL_PME_ENABLE;
2494		pmcsr |= PCI_PM_CTRL_PME_STATUS;
2495	}
2496	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, pmcsr);
2497}
2498
2499/**
2500 * pci_pme_active - enable or disable PCI device's PME# function
2501 * @dev: PCI device to handle.
2502 * @enable: 'true' to enable PME# generation; 'false' to disable it.
2503 *
2504 * The caller must verify that the device is capable of generating PME# before
2505 * calling this function with @enable equal to 'true'.
2506 */
2507void pci_pme_active(struct pci_dev *dev, bool enable)
2508{
2509	__pci_pme_active(dev, enable);
2510
2511	/*
2512	 * PCI (as opposed to PCIe) PME requires that the device have
2513	 * its PME# line hooked up correctly. Not all hardware vendors
2514	 * do this, so the PME never gets delivered and the device
2515	 * remains asleep. The easiest way around this is to
2516	 * periodically walk the list of suspended devices and check
2517	 * whether any have their PME flag set. The assumption is that
2518	 * we'll wake up often enough anyway that this won't be a huge
2519	 * hit, and the power savings from the devices will still be a
2520	 * win.
2521	 *
2522	 * Although PCIe uses in-band PME message instead of PME# line
2523	 * to report PME, PME does not work for some PCIe devices in
2524	 * reality.  For example, there are devices that set their PME
2525	 * status bits, but don't really bother to send a PME message;
2526	 * there are PCI Express Root Ports that don't bother to
2527	 * trigger interrupts when they receive PME messages from the
2528	 * devices below.  So PME poll is used for PCIe devices too.
2529	 */
 
2530
2531	if (dev->pme_poll) {
2532		struct pci_pme_device *pme_dev;
2533		if (enable) {
2534			pme_dev = kmalloc(sizeof(struct pci_pme_device),
2535					  GFP_KERNEL);
2536			if (!pme_dev) {
2537				pci_warn(dev, "can't enable PME#\n");
2538				return;
2539			}
2540			pme_dev->dev = dev;
2541			mutex_lock(&pci_pme_list_mutex);
2542			list_add(&pme_dev->list, &pci_pme_list);
2543			if (list_is_singular(&pci_pme_list))
2544				queue_delayed_work(system_freezable_wq,
2545						   &pci_pme_work,
2546						   msecs_to_jiffies(PME_TIMEOUT));
2547			mutex_unlock(&pci_pme_list_mutex);
2548		} else {
2549			mutex_lock(&pci_pme_list_mutex);
2550			list_for_each_entry(pme_dev, &pci_pme_list, list) {
2551				if (pme_dev->dev == dev) {
2552					list_del(&pme_dev->list);
2553					kfree(pme_dev);
2554					break;
2555				}
2556			}
2557			mutex_unlock(&pci_pme_list_mutex);
2558		}
2559	}
2560
2561	pci_dbg(dev, "PME# %s\n", enable ? "enabled" : "disabled");
 
 
2562}
2563EXPORT_SYMBOL(pci_pme_active);
2564
2565/**
2566 * __pci_enable_wake - enable PCI device as wakeup event source
2567 * @dev: PCI device affected
2568 * @state: PCI state from which device will issue wakeup events
 
2569 * @enable: True to enable event generation; false to disable
2570 *
2571 * This enables the device as a wakeup event source, or disables it.
2572 * When such events involves platform-specific hooks, those hooks are
2573 * called automatically by this routine.
2574 *
2575 * Devices with legacy power management (no standard PCI PM capabilities)
2576 * always require such platform hooks.
2577 *
2578 * RETURN VALUE:
2579 * 0 is returned on success
2580 * -EINVAL is returned if device is not supposed to wake up the system
2581 * Error code depending on the platform is returned if both the platform and
2582 * the native mechanism fail to enable the generation of wake-up events
2583 */
2584static int __pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable)
 
2585{
2586	int ret = 0;
2587
2588	/*
2589	 * Bridges that are not power-manageable directly only signal
2590	 * wakeup on behalf of subordinate devices which is set up
2591	 * elsewhere, so skip them. However, bridges that are
2592	 * power-manageable may signal wakeup for themselves (for example,
2593	 * on a hotplug event) and they need to be covered here.
2594	 */
2595	if (!pci_power_manageable(dev))
2596		return 0;
2597
2598	/* Don't do the same thing twice in a row for one device. */
2599	if (!!enable == !!dev->wakeup_prepared)
2600		return 0;
2601
2602	/*
2603	 * According to "PCI System Architecture" 4th ed. by Tom Shanley & Don
2604	 * Anderson we should be doing PME# wake enable followed by ACPI wake
2605	 * enable.  To disable wake-up we call the platform first, for symmetry.
2606	 */
2607
2608	if (enable) {
2609		int error;
2610
2611		/*
2612		 * Enable PME signaling if the device can signal PME from
2613		 * D3cold regardless of whether or not it can signal PME from
2614		 * the current target state, because that will allow it to
2615		 * signal PME when the hierarchy above it goes into D3cold and
2616		 * the device itself ends up in D3cold as a result of that.
2617		 */
2618		if (pci_pme_capable(dev, state) || pci_pme_capable(dev, PCI_D3cold))
2619			pci_pme_active(dev, true);
2620		else
2621			ret = 1;
2622		error = platform_pci_set_wakeup(dev, true);
 
2623		if (ret)
2624			ret = error;
2625		if (!ret)
2626			dev->wakeup_prepared = true;
2627	} else {
2628		platform_pci_set_wakeup(dev, false);
 
 
 
2629		pci_pme_active(dev, false);
2630		dev->wakeup_prepared = false;
2631	}
2632
2633	return ret;
2634}
2635
2636/**
2637 * pci_enable_wake - change wakeup settings for a PCI device
2638 * @pci_dev: Target device
2639 * @state: PCI state from which device will issue wakeup events
2640 * @enable: Whether or not to enable event generation
2641 *
2642 * If @enable is set, check device_may_wakeup() for the device before calling
2643 * __pci_enable_wake() for it.
2644 */
2645int pci_enable_wake(struct pci_dev *pci_dev, pci_power_t state, bool enable)
2646{
2647	if (enable && !device_may_wakeup(&pci_dev->dev))
2648		return -EINVAL;
2649
2650	return __pci_enable_wake(pci_dev, state, enable);
2651}
2652EXPORT_SYMBOL(pci_enable_wake);
2653
2654/**
2655 * pci_wake_from_d3 - enable/disable device to wake up from D3_hot or D3_cold
2656 * @dev: PCI device to prepare
2657 * @enable: True to enable wake-up event generation; false to disable
2658 *
2659 * Many drivers want the device to wake up the system from D3_hot or D3_cold
2660 * and this function allows them to set that up cleanly - pci_enable_wake()
2661 * should not be called twice in a row to enable wake-up due to PCI PM vs ACPI
2662 * ordering constraints.
2663 *
2664 * This function only returns error code if the device is not allowed to wake
2665 * up the system from sleep or it is not capable of generating PME# from both
2666 * D3_hot and D3_cold and the platform is unable to enable wake-up power for it.
2667 */
2668int pci_wake_from_d3(struct pci_dev *dev, bool enable)
2669{
2670	return pci_pme_capable(dev, PCI_D3cold) ?
2671			pci_enable_wake(dev, PCI_D3cold, enable) :
2672			pci_enable_wake(dev, PCI_D3hot, enable);
2673}
2674EXPORT_SYMBOL(pci_wake_from_d3);
2675
2676/**
2677 * pci_target_state - find an appropriate low power state for a given PCI dev
2678 * @dev: PCI device
2679 * @wakeup: Whether or not wakeup functionality will be enabled for the device.
2680 *
2681 * Use underlying platform code to find a supported low power state for @dev.
2682 * If the platform can't manage @dev, return the deepest state from which it
2683 * can generate wake events, based on any available PME info.
2684 */
2685static pci_power_t pci_target_state(struct pci_dev *dev, bool wakeup)
2686{
 
 
2687	if (platform_pci_power_manageable(dev)) {
2688		/*
2689		 * Call the platform to find the target state for the device.
 
2690		 */
2691		pci_power_t state = platform_pci_choose_state(dev);
2692
2693		switch (state) {
2694		case PCI_POWER_ERROR:
2695		case PCI_UNKNOWN:
2696			return PCI_D3hot;
2697
2698		case PCI_D1:
2699		case PCI_D2:
2700			if (pci_no_d1d2(dev))
2701				return PCI_D3hot;
 
 
2702		}
2703
2704		return state;
2705	}
2706
2707	/*
2708	 * If the device is in D3cold even though it's not power-manageable by
2709	 * the platform, it may have been powered down by non-standard means.
2710	 * Best to let it slumber.
2711	 */
2712	if (dev->current_state == PCI_D3cold)
2713		return PCI_D3cold;
2714	else if (!dev->pm_cap)
2715		return PCI_D0;
2716
2717	if (wakeup && dev->pme_support) {
2718		pci_power_t state = PCI_D3hot;
2719
2720		/*
2721		 * Find the deepest state from which the device can generate
2722		 * PME#.
 
2723		 */
2724		while (state && !(dev->pme_support & (1 << state)))
2725			state--;
2726
2727		if (state)
2728			return state;
2729		else if (dev->pme_support & 1)
2730			return PCI_D0;
2731	}
2732
2733	return PCI_D3hot;
2734}
2735
2736/**
2737 * pci_prepare_to_sleep - prepare PCI device for system-wide transition
2738 *			  into a sleep state
2739 * @dev: Device to handle.
2740 *
2741 * Choose the power state appropriate for the device depending on whether
2742 * it can wake up the system and/or is power manageable by the platform
2743 * (PCI_D3hot is the default) and put the device into that state.
2744 */
2745int pci_prepare_to_sleep(struct pci_dev *dev)
2746{
2747	bool wakeup = device_may_wakeup(&dev->dev);
2748	pci_power_t target_state = pci_target_state(dev, wakeup);
2749	int error;
2750
2751	if (target_state == PCI_POWER_ERROR)
2752		return -EIO;
2753
2754	pci_enable_wake(dev, target_state, wakeup);
2755
2756	error = pci_set_power_state(dev, target_state);
2757
2758	if (error)
2759		pci_enable_wake(dev, target_state, false);
2760
2761	return error;
2762}
2763EXPORT_SYMBOL(pci_prepare_to_sleep);
2764
2765/**
2766 * pci_back_from_sleep - turn PCI device on during system-wide transition
2767 *			 into working state
2768 * @dev: Device to handle.
2769 *
2770 * Disable device's system wake-up capability and put it into D0.
2771 */
2772int pci_back_from_sleep(struct pci_dev *dev)
2773{
2774	int ret = pci_set_power_state(dev, PCI_D0);
2775
2776	if (ret)
2777		return ret;
2778
2779	pci_enable_wake(dev, PCI_D0, false);
2780	return 0;
2781}
2782EXPORT_SYMBOL(pci_back_from_sleep);
2783
2784/**
2785 * pci_finish_runtime_suspend - Carry out PCI-specific part of runtime suspend.
2786 * @dev: PCI device being suspended.
2787 *
2788 * Prepare @dev to generate wake-up events at run time and put it into a low
2789 * power state.
2790 */
2791int pci_finish_runtime_suspend(struct pci_dev *dev)
2792{
2793	pci_power_t target_state;
2794	int error;
2795
2796	target_state = pci_target_state(dev, device_can_wakeup(&dev->dev));
2797	if (target_state == PCI_POWER_ERROR)
2798		return -EIO;
2799
2800	__pci_enable_wake(dev, target_state, pci_dev_run_wake(dev));
2801
2802	error = pci_set_power_state(dev, target_state);
2803
2804	if (error)
2805		pci_enable_wake(dev, target_state, false);
2806
2807	return error;
2808}
2809
2810/**
2811 * pci_dev_run_wake - Check if device can generate run-time wake-up events.
2812 * @dev: Device to check.
2813 *
2814 * Return true if the device itself is capable of generating wake-up events
2815 * (through the platform or using the native PCIe PME) or if the device supports
2816 * PME and one of its upstream bridges can generate wake-up events.
2817 */
2818bool pci_dev_run_wake(struct pci_dev *dev)
2819{
2820	struct pci_bus *bus = dev->bus;
2821
 
 
 
2822	if (!dev->pme_support)
2823		return false;
2824
2825	/* PME-capable in principle, but not from the target power state */
2826	if (!pci_pme_capable(dev, pci_target_state(dev, true)))
2827		return false;
2828
2829	if (device_can_wakeup(&dev->dev))
2830		return true;
2831
2832	while (bus->parent) {
2833		struct pci_dev *bridge = bus->self;
2834
2835		if (device_can_wakeup(&bridge->dev))
2836			return true;
2837
2838		bus = bus->parent;
2839	}
2840
2841	/* We have reached the root bus. */
2842	if (bus->bridge)
2843		return device_can_wakeup(bus->bridge);
2844
2845	return false;
2846}
2847EXPORT_SYMBOL_GPL(pci_dev_run_wake);
2848
2849/**
2850 * pci_dev_need_resume - Check if it is necessary to resume the device.
2851 * @pci_dev: Device to check.
2852 *
2853 * Return 'true' if the device is not runtime-suspended or it has to be
2854 * reconfigured due to wakeup settings difference between system and runtime
2855 * suspend, or the current power state of it is not suitable for the upcoming
2856 * (system-wide) transition.
2857 */
2858bool pci_dev_need_resume(struct pci_dev *pci_dev)
2859{
2860	struct device *dev = &pci_dev->dev;
2861	pci_power_t target_state;
2862
2863	if (!pm_runtime_suspended(dev) || platform_pci_need_resume(pci_dev))
2864		return true;
2865
2866	target_state = pci_target_state(pci_dev, device_may_wakeup(dev));
2867
2868	/*
2869	 * If the earlier platform check has not triggered, D3cold is just power
2870	 * removal on top of D3hot, so no need to resume the device in that
2871	 * case.
2872	 */
2873	return target_state != pci_dev->current_state &&
2874		target_state != PCI_D3cold &&
2875		pci_dev->current_state != PCI_D3hot;
2876}
2877
2878/**
2879 * pci_dev_adjust_pme - Adjust PME setting for a suspended device.
2880 * @pci_dev: Device to check.
2881 *
2882 * If the device is suspended and it is not configured for system wakeup,
2883 * disable PME for it to prevent it from waking up the system unnecessarily.
2884 *
2885 * Note that if the device's power state is D3cold and the platform check in
2886 * pci_dev_need_resume() has not triggered, the device's configuration need not
2887 * be changed.
2888 */
2889void pci_dev_adjust_pme(struct pci_dev *pci_dev)
2890{
2891	struct device *dev = &pci_dev->dev;
2892
2893	spin_lock_irq(&dev->power.lock);
2894
2895	if (pm_runtime_suspended(dev) && !device_may_wakeup(dev) &&
2896	    pci_dev->current_state < PCI_D3cold)
2897		__pci_pme_active(pci_dev, false);
2898
2899	spin_unlock_irq(&dev->power.lock);
2900}
2901
2902/**
2903 * pci_dev_complete_resume - Finalize resume from system sleep for a device.
2904 * @pci_dev: Device to handle.
2905 *
2906 * If the device is runtime suspended and wakeup-capable, enable PME for it as
2907 * it might have been disabled during the prepare phase of system suspend if
2908 * the device was not configured for system wakeup.
2909 */
2910void pci_dev_complete_resume(struct pci_dev *pci_dev)
2911{
2912	struct device *dev = &pci_dev->dev;
2913
2914	if (!pci_dev_run_wake(pci_dev))
2915		return;
2916
2917	spin_lock_irq(&dev->power.lock);
2918
2919	if (pm_runtime_suspended(dev) && pci_dev->current_state < PCI_D3cold)
2920		__pci_pme_active(pci_dev, true);
2921
2922	spin_unlock_irq(&dev->power.lock);
2923}
2924
2925/**
2926 * pci_choose_state - Choose the power state of a PCI device.
2927 * @dev: Target PCI device.
2928 * @state: Target state for the whole system.
2929 *
2930 * Returns PCI power state suitable for @dev and @state.
2931 */
2932pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state)
2933{
2934	if (state.event == PM_EVENT_ON)
2935		return PCI_D0;
2936
2937	return pci_target_state(dev, false);
2938}
2939EXPORT_SYMBOL(pci_choose_state);
2940
2941void pci_config_pm_runtime_get(struct pci_dev *pdev)
2942{
2943	struct device *dev = &pdev->dev;
2944	struct device *parent = dev->parent;
2945
2946	if (parent)
2947		pm_runtime_get_sync(parent);
2948	pm_runtime_get_noresume(dev);
2949	/*
2950	 * pdev->current_state is set to PCI_D3cold during suspending,
2951	 * so wait until suspending completes
2952	 */
2953	pm_runtime_barrier(dev);
2954	/*
2955	 * Only need to resume devices in D3cold, because config
2956	 * registers are still accessible for devices suspended but
2957	 * not in D3cold.
2958	 */
2959	if (pdev->current_state == PCI_D3cold)
2960		pm_runtime_resume(dev);
2961}
2962
2963void pci_config_pm_runtime_put(struct pci_dev *pdev)
2964{
2965	struct device *dev = &pdev->dev;
2966	struct device *parent = dev->parent;
2967
2968	pm_runtime_put(dev);
2969	if (parent)
2970		pm_runtime_put_sync(parent);
2971}
2972
2973static const struct dmi_system_id bridge_d3_blacklist[] = {
2974#ifdef CONFIG_X86
2975	{
2976		/*
2977		 * Gigabyte X299 root port is not marked as hotplug capable
2978		 * which allows Linux to power manage it.  However, this
2979		 * confuses the BIOS SMI handler so don't power manage root
2980		 * ports on that system.
2981		 */
2982		.ident = "X299 DESIGNARE EX-CF",
2983		.matches = {
2984			DMI_MATCH(DMI_BOARD_VENDOR, "Gigabyte Technology Co., Ltd."),
2985			DMI_MATCH(DMI_BOARD_NAME, "X299 DESIGNARE EX-CF"),
2986		},
2987	},
2988	{
2989		/*
2990		 * Downstream device is not accessible after putting a root port
2991		 * into D3cold and back into D0 on Elo Continental Z2 board
2992		 */
2993		.ident = "Elo Continental Z2",
2994		.matches = {
2995			DMI_MATCH(DMI_BOARD_VENDOR, "Elo Touch Solutions"),
2996			DMI_MATCH(DMI_BOARD_NAME, "Geminilake"),
2997			DMI_MATCH(DMI_BOARD_VERSION, "Continental Z2"),
2998		},
2999	},
3000	{
3001		/*
3002		 * Changing power state of root port dGPU is connected fails
3003		 * https://gitlab.freedesktop.org/drm/amd/-/issues/3229
3004		 */
3005		.ident = "Hewlett-Packard HP Pavilion 17 Notebook PC/1972",
3006		.matches = {
3007			DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
3008			DMI_MATCH(DMI_BOARD_NAME, "1972"),
3009			DMI_MATCH(DMI_BOARD_VERSION, "95.33"),
3010		},
3011	},
3012#endif
3013	{ }
3014};
3015
3016/**
3017 * pci_bridge_d3_possible - Is it possible to put the bridge into D3
3018 * @bridge: Bridge to check
3019 *
3020 * This function checks if it is possible to move the bridge to D3.
3021 * Currently we only allow D3 for recent enough PCIe ports and Thunderbolt.
3022 */
3023bool pci_bridge_d3_possible(struct pci_dev *bridge)
3024{
3025	if (!pci_is_pcie(bridge))
3026		return false;
3027
3028	switch (pci_pcie_type(bridge)) {
3029	case PCI_EXP_TYPE_ROOT_PORT:
3030	case PCI_EXP_TYPE_UPSTREAM:
3031	case PCI_EXP_TYPE_DOWNSTREAM:
3032		if (pci_bridge_d3_disable)
3033			return false;
3034
3035		/*
3036		 * Hotplug ports handled by firmware in System Management Mode
3037		 * may not be put into D3 by the OS (Thunderbolt on non-Macs).
3038		 */
3039		if (bridge->is_hotplug_bridge && !pciehp_is_native(bridge))
3040			return false;
3041
3042		if (pci_bridge_d3_force)
3043			return true;
3044
3045		/* Even the oldest 2010 Thunderbolt controller supports D3. */
3046		if (bridge->is_thunderbolt)
3047			return true;
3048
3049		/* Platform might know better if the bridge supports D3 */
3050		if (platform_pci_bridge_d3(bridge))
3051			return true;
3052
3053		/*
3054		 * Hotplug ports handled natively by the OS were not validated
3055		 * by vendors for runtime D3 at least until 2018 because there
3056		 * was no OS support.
3057		 */
3058		if (bridge->is_hotplug_bridge)
3059			return false;
3060
3061		if (dmi_check_system(bridge_d3_blacklist))
3062			return false;
3063
3064		/*
3065		 * It should be safe to put PCIe ports from 2015 or newer
3066		 * to D3.
3067		 */
3068		if (dmi_get_bios_year() >= 2015)
3069			return true;
3070		break;
3071	}
3072
3073	return false;
3074}
3075
3076static int pci_dev_check_d3cold(struct pci_dev *dev, void *data)
3077{
3078	bool *d3cold_ok = data;
3079
3080	if (/* The device needs to be allowed to go D3cold ... */
3081	    dev->no_d3cold || !dev->d3cold_allowed ||
3082
3083	    /* ... and if it is wakeup capable to do so from D3cold. */
3084	    (device_may_wakeup(&dev->dev) &&
3085	     !pci_pme_capable(dev, PCI_D3cold)) ||
3086
3087	    /* If it is a bridge it must be allowed to go to D3. */
3088	    !pci_power_manageable(dev))
3089
3090		*d3cold_ok = false;
3091
3092	return !*d3cold_ok;
3093}
3094
3095/*
3096 * pci_bridge_d3_update - Update bridge D3 capabilities
3097 * @dev: PCI device which is changed
3098 *
3099 * Update upstream bridge PM capabilities accordingly depending on if the
3100 * device PM configuration was changed or the device is being removed.  The
3101 * change is also propagated upstream.
3102 */
3103void pci_bridge_d3_update(struct pci_dev *dev)
3104{
3105	bool remove = !device_is_registered(&dev->dev);
3106	struct pci_dev *bridge;
3107	bool d3cold_ok = true;
3108
3109	bridge = pci_upstream_bridge(dev);
3110	if (!bridge || !pci_bridge_d3_possible(bridge))
3111		return;
3112
3113	/*
3114	 * If D3 is currently allowed for the bridge, removing one of its
3115	 * children won't change that.
3116	 */
3117	if (remove && bridge->bridge_d3)
3118		return;
3119
3120	/*
3121	 * If D3 is currently allowed for the bridge and a child is added or
3122	 * changed, disallowance of D3 can only be caused by that child, so
3123	 * we only need to check that single device, not any of its siblings.
3124	 *
3125	 * If D3 is currently not allowed for the bridge, checking the device
3126	 * first may allow us to skip checking its siblings.
3127	 */
3128	if (!remove)
3129		pci_dev_check_d3cold(dev, &d3cold_ok);
3130
3131	/*
3132	 * If D3 is currently not allowed for the bridge, this may be caused
3133	 * either by the device being changed/removed or any of its siblings,
3134	 * so we need to go through all children to find out if one of them
3135	 * continues to block D3.
3136	 */
3137	if (d3cold_ok && !bridge->bridge_d3)
3138		pci_walk_bus(bridge->subordinate, pci_dev_check_d3cold,
3139			     &d3cold_ok);
3140
3141	if (bridge->bridge_d3 != d3cold_ok) {
3142		bridge->bridge_d3 = d3cold_ok;
3143		/* Propagate change to upstream bridges */
3144		pci_bridge_d3_update(bridge);
3145	}
3146}
3147
3148/**
3149 * pci_d3cold_enable - Enable D3cold for device
3150 * @dev: PCI device to handle
3151 *
3152 * This function can be used in drivers to enable D3cold from the device
3153 * they handle.  It also updates upstream PCI bridge PM capabilities
3154 * accordingly.
3155 */
3156void pci_d3cold_enable(struct pci_dev *dev)
3157{
3158	if (dev->no_d3cold) {
3159		dev->no_d3cold = false;
3160		pci_bridge_d3_update(dev);
3161	}
3162}
3163EXPORT_SYMBOL_GPL(pci_d3cold_enable);
3164
3165/**
3166 * pci_d3cold_disable - Disable D3cold for device
3167 * @dev: PCI device to handle
3168 *
3169 * This function can be used in drivers to disable D3cold from the device
3170 * they handle.  It also updates upstream PCI bridge PM capabilities
3171 * accordingly.
3172 */
3173void pci_d3cold_disable(struct pci_dev *dev)
3174{
3175	if (!dev->no_d3cold) {
3176		dev->no_d3cold = true;
3177		pci_bridge_d3_update(dev);
3178	}
3179}
3180EXPORT_SYMBOL_GPL(pci_d3cold_disable);
3181
3182/**
3183 * pci_pm_init - Initialize PM functions of given PCI device
3184 * @dev: PCI device to handle.
3185 */
3186void pci_pm_init(struct pci_dev *dev)
3187{
3188	int pm;
3189	u16 status;
3190	u16 pmc;
3191
3192	pm_runtime_forbid(&dev->dev);
3193	pm_runtime_set_active(&dev->dev);
3194	pm_runtime_enable(&dev->dev);
3195	device_enable_async_suspend(&dev->dev);
3196	dev->wakeup_prepared = false;
3197
3198	dev->pm_cap = 0;
3199	dev->pme_support = 0;
3200
3201	/* find PCI PM capability in list */
3202	pm = pci_find_capability(dev, PCI_CAP_ID_PM);
3203	if (!pm)
3204		return;
3205	/* Check device's ability to generate PME# */
3206	pci_read_config_word(dev, pm + PCI_PM_PMC, &pmc);
3207
3208	if ((pmc & PCI_PM_CAP_VER_MASK) > 3) {
3209		pci_err(dev, "unsupported PM cap regs version (%u)\n",
3210			pmc & PCI_PM_CAP_VER_MASK);
3211		return;
3212	}
3213
3214	dev->pm_cap = pm;
3215	dev->d3hot_delay = PCI_PM_D3HOT_WAIT;
3216	dev->d3cold_delay = PCI_PM_D3COLD_WAIT;
3217	dev->bridge_d3 = pci_bridge_d3_possible(dev);
3218	dev->d3cold_allowed = true;
3219
3220	dev->d1_support = false;
3221	dev->d2_support = false;
3222	if (!pci_no_d1d2(dev)) {
3223		if (pmc & PCI_PM_CAP_D1)
3224			dev->d1_support = true;
3225		if (pmc & PCI_PM_CAP_D2)
3226			dev->d2_support = true;
3227
3228		if (dev->d1_support || dev->d2_support)
3229			pci_info(dev, "supports%s%s\n",
3230				   dev->d1_support ? " D1" : "",
3231				   dev->d2_support ? " D2" : "");
3232	}
3233
3234	pmc &= PCI_PM_CAP_PME_MASK;
3235	if (pmc) {
3236		pci_info(dev, "PME# supported from%s%s%s%s%s\n",
 
3237			 (pmc & PCI_PM_CAP_PME_D0) ? " D0" : "",
3238			 (pmc & PCI_PM_CAP_PME_D1) ? " D1" : "",
3239			 (pmc & PCI_PM_CAP_PME_D2) ? " D2" : "",
3240			 (pmc & PCI_PM_CAP_PME_D3hot) ? " D3hot" : "",
3241			 (pmc & PCI_PM_CAP_PME_D3cold) ? " D3cold" : "");
3242		dev->pme_support = FIELD_GET(PCI_PM_CAP_PME_MASK, pmc);
3243		dev->pme_poll = true;
3244		/*
3245		 * Make device's PM flags reflect the wake-up capability, but
3246		 * let the user space enable it to wake up the system as needed.
3247		 */
3248		device_set_wakeup_capable(&dev->dev, true);
3249		/* Disable the PME# generation functionality */
3250		pci_pme_active(dev, false);
 
 
3251	}
3252
3253	pci_read_config_word(dev, PCI_STATUS, &status);
3254	if (status & PCI_STATUS_IMM_READY)
3255		dev->imm_ready = 1;
3256}
3257
3258static unsigned long pci_ea_flags(struct pci_dev *dev, u8 prop)
3259{
3260	unsigned long flags = IORESOURCE_PCI_FIXED | IORESOURCE_PCI_EA_BEI;
3261
3262	switch (prop) {
3263	case PCI_EA_P_MEM:
3264	case PCI_EA_P_VF_MEM:
3265		flags |= IORESOURCE_MEM;
3266		break;
3267	case PCI_EA_P_MEM_PREFETCH:
3268	case PCI_EA_P_VF_MEM_PREFETCH:
3269		flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH;
3270		break;
3271	case PCI_EA_P_IO:
3272		flags |= IORESOURCE_IO;
3273		break;
3274	default:
3275		return 0;
3276	}
3277
3278	return flags;
3279}
3280
3281static struct resource *pci_ea_get_resource(struct pci_dev *dev, u8 bei,
3282					    u8 prop)
3283{
3284	if (bei <= PCI_EA_BEI_BAR5 && prop <= PCI_EA_P_IO)
3285		return &dev->resource[bei];
3286#ifdef CONFIG_PCI_IOV
3287	else if (bei >= PCI_EA_BEI_VF_BAR0 && bei <= PCI_EA_BEI_VF_BAR5 &&
3288		 (prop == PCI_EA_P_VF_MEM || prop == PCI_EA_P_VF_MEM_PREFETCH))
3289		return &dev->resource[PCI_IOV_RESOURCES +
3290				      bei - PCI_EA_BEI_VF_BAR0];
3291#endif
3292	else if (bei == PCI_EA_BEI_ROM)
3293		return &dev->resource[PCI_ROM_RESOURCE];
3294	else
3295		return NULL;
3296}
3297
3298/* Read an Enhanced Allocation (EA) entry */
3299static int pci_ea_read(struct pci_dev *dev, int offset)
3300{
3301	struct resource *res;
3302	const char *res_name;
3303	int ent_size, ent_offset = offset;
3304	resource_size_t start, end;
3305	unsigned long flags;
3306	u32 dw0, bei, base, max_offset;
3307	u8 prop;
3308	bool support_64 = (sizeof(resource_size_t) >= 8);
3309
3310	pci_read_config_dword(dev, ent_offset, &dw0);
3311	ent_offset += 4;
3312
3313	/* Entry size field indicates DWORDs after 1st */
3314	ent_size = (FIELD_GET(PCI_EA_ES, dw0) + 1) << 2;
3315
3316	if (!(dw0 & PCI_EA_ENABLE)) /* Entry not enabled */
3317		goto out;
3318
3319	bei = FIELD_GET(PCI_EA_BEI, dw0);
3320	prop = FIELD_GET(PCI_EA_PP, dw0);
3321
3322	/*
3323	 * If the Property is in the reserved range, try the Secondary
3324	 * Property instead.
3325	 */
3326	if (prop > PCI_EA_P_BRIDGE_IO && prop < PCI_EA_P_MEM_RESERVED)
3327		prop = FIELD_GET(PCI_EA_SP, dw0);
3328	if (prop > PCI_EA_P_BRIDGE_IO)
3329		goto out;
3330
3331	res = pci_ea_get_resource(dev, bei, prop);
3332	res_name = pci_resource_name(dev, bei);
3333	if (!res) {
3334		pci_err(dev, "Unsupported EA entry BEI: %u\n", bei);
3335		goto out;
3336	}
3337
3338	flags = pci_ea_flags(dev, prop);
3339	if (!flags) {
3340		pci_err(dev, "Unsupported EA properties: %#x\n", prop);
3341		goto out;
3342	}
3343
3344	/* Read Base */
3345	pci_read_config_dword(dev, ent_offset, &base);
3346	start = (base & PCI_EA_FIELD_MASK);
3347	ent_offset += 4;
3348
3349	/* Read MaxOffset */
3350	pci_read_config_dword(dev, ent_offset, &max_offset);
3351	ent_offset += 4;
3352
3353	/* Read Base MSBs (if 64-bit entry) */
3354	if (base & PCI_EA_IS_64) {
3355		u32 base_upper;
3356
3357		pci_read_config_dword(dev, ent_offset, &base_upper);
3358		ent_offset += 4;
3359
3360		flags |= IORESOURCE_MEM_64;
3361
3362		/* entry starts above 32-bit boundary, can't use */
3363		if (!support_64 && base_upper)
3364			goto out;
3365
3366		if (support_64)
3367			start |= ((u64)base_upper << 32);
3368	}
3369
3370	end = start + (max_offset | 0x03);
3371
3372	/* Read MaxOffset MSBs (if 64-bit entry) */
3373	if (max_offset & PCI_EA_IS_64) {
3374		u32 max_offset_upper;
3375
3376		pci_read_config_dword(dev, ent_offset, &max_offset_upper);
3377		ent_offset += 4;
3378
3379		flags |= IORESOURCE_MEM_64;
3380
3381		/* entry too big, can't use */
3382		if (!support_64 && max_offset_upper)
3383			goto out;
3384
3385		if (support_64)
3386			end += ((u64)max_offset_upper << 32);
3387	}
3388
3389	if (end < start) {
3390		pci_err(dev, "EA Entry crosses address boundary\n");
3391		goto out;
3392	}
3393
3394	if (ent_size != ent_offset - offset) {
3395		pci_err(dev, "EA Entry Size (%d) does not match length read (%d)\n",
3396			ent_size, ent_offset - offset);
3397		goto out;
3398	}
3399
3400	res->name = pci_name(dev);
3401	res->start = start;
3402	res->end = end;
3403	res->flags = flags;
3404
3405	if (bei <= PCI_EA_BEI_BAR5)
3406		pci_info(dev, "%s %pR: from Enhanced Allocation, properties %#02x\n",
3407			 res_name, res, prop);
3408	else if (bei == PCI_EA_BEI_ROM)
3409		pci_info(dev, "%s %pR: from Enhanced Allocation, properties %#02x\n",
3410			 res_name, res, prop);
3411	else if (bei >= PCI_EA_BEI_VF_BAR0 && bei <= PCI_EA_BEI_VF_BAR5)
3412		pci_info(dev, "%s %pR: from Enhanced Allocation, properties %#02x\n",
3413			 res_name, res, prop);
3414	else
3415		pci_info(dev, "BEI %d %pR: from Enhanced Allocation, properties %#02x\n",
3416			   bei, res, prop);
3417
3418out:
3419	return offset + ent_size;
3420}
3421
3422/* Enhanced Allocation Initialization */
3423void pci_ea_init(struct pci_dev *dev)
3424{
3425	int ea;
3426	u8 num_ent;
3427	int offset;
3428	int i;
3429
3430	/* find PCI EA capability in list */
3431	ea = pci_find_capability(dev, PCI_CAP_ID_EA);
3432	if (!ea)
3433		return;
3434
3435	/* determine the number of entries */
3436	pci_bus_read_config_byte(dev->bus, dev->devfn, ea + PCI_EA_NUM_ENT,
3437					&num_ent);
3438	num_ent &= PCI_EA_NUM_ENT_MASK;
3439
3440	offset = ea + PCI_EA_FIRST_ENT;
3441
3442	/* Skip DWORD 2 for type 1 functions */
3443	if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE)
3444		offset += 4;
3445
3446	/* parse each EA entry */
3447	for (i = 0; i < num_ent; ++i)
3448		offset = pci_ea_read(dev, offset);
3449}
3450
3451static void pci_add_saved_cap(struct pci_dev *pci_dev,
3452	struct pci_cap_saved_state *new_cap)
3453{
3454	hlist_add_head(&new_cap->next, &pci_dev->saved_cap_space);
3455}
3456
3457/**
3458 * _pci_add_cap_save_buffer - allocate buffer for saving given
3459 *			      capability registers
3460 * @dev: the PCI device
3461 * @cap: the capability to allocate the buffer for
3462 * @extended: Standard or Extended capability ID
3463 * @size: requested size of the buffer
3464 */
3465static int _pci_add_cap_save_buffer(struct pci_dev *dev, u16 cap,
3466				    bool extended, unsigned int size)
3467{
3468	int pos;
3469	struct pci_cap_saved_state *save_state;
3470
3471	if (extended)
3472		pos = pci_find_ext_capability(dev, cap);
3473	else
3474		pos = pci_find_capability(dev, cap);
3475
3476	if (!pos)
3477		return 0;
3478
3479	save_state = kzalloc(sizeof(*save_state) + size, GFP_KERNEL);
3480	if (!save_state)
3481		return -ENOMEM;
3482
3483	save_state->cap.cap_nr = cap;
3484	save_state->cap.cap_extended = extended;
3485	save_state->cap.size = size;
3486	pci_add_saved_cap(dev, save_state);
3487
3488	return 0;
3489}
3490
3491int pci_add_cap_save_buffer(struct pci_dev *dev, char cap, unsigned int size)
3492{
3493	return _pci_add_cap_save_buffer(dev, cap, false, size);
3494}
3495
3496int pci_add_ext_cap_save_buffer(struct pci_dev *dev, u16 cap, unsigned int size)
3497{
3498	return _pci_add_cap_save_buffer(dev, cap, true, size);
3499}
3500
3501/**
3502 * pci_allocate_cap_save_buffers - allocate buffers for saving capabilities
3503 * @dev: the PCI device
3504 */
3505void pci_allocate_cap_save_buffers(struct pci_dev *dev)
3506{
3507	int error;
3508
3509	error = pci_add_cap_save_buffer(dev, PCI_CAP_ID_EXP,
3510					PCI_EXP_SAVE_REGS * sizeof(u16));
3511	if (error)
3512		pci_err(dev, "unable to preallocate PCI Express save buffer\n");
 
3513
3514	error = pci_add_cap_save_buffer(dev, PCI_CAP_ID_PCIX, sizeof(u16));
3515	if (error)
3516		pci_err(dev, "unable to preallocate PCI-X save buffer\n");
3517
3518	error = pci_add_ext_cap_save_buffer(dev, PCI_EXT_CAP_ID_LTR,
3519					    2 * sizeof(u16));
3520	if (error)
3521		pci_err(dev, "unable to allocate suspend buffer for LTR\n");
3522
3523	pci_allocate_vc_save_buffers(dev);
3524}
3525
3526void pci_free_cap_save_buffers(struct pci_dev *dev)
3527{
3528	struct pci_cap_saved_state *tmp;
3529	struct hlist_node *n;
3530
3531	hlist_for_each_entry_safe(tmp, n, &dev->saved_cap_space, next)
3532		kfree(tmp);
3533}
3534
3535/**
3536 * pci_configure_ari - enable or disable ARI forwarding
3537 * @dev: the PCI device
3538 *
3539 * If @dev and its upstream bridge both support ARI, enable ARI in the
3540 * bridge.  Otherwise, disable ARI in the bridge.
3541 */
3542void pci_configure_ari(struct pci_dev *dev)
3543{
 
3544	u32 cap;
 
3545	struct pci_dev *bridge;
3546
3547	if (pcie_ari_disabled || !pci_is_pcie(dev) || dev->devfn)
 
 
 
 
3548		return;
3549
3550	bridge = dev->bus->self;
3551	if (!bridge)
3552		return;
3553
3554	pcie_capability_read_dword(bridge, PCI_EXP_DEVCAP2, &cap);
 
 
 
 
 
 
 
 
 
3555	if (!(cap & PCI_EXP_DEVCAP2_ARI))
3556		return;
3557
3558	if (pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ARI)) {
3559		pcie_capability_set_word(bridge, PCI_EXP_DEVCTL2,
3560					 PCI_EXP_DEVCTL2_ARI);
3561		bridge->ari_enabled = 1;
3562	} else {
3563		pcie_capability_clear_word(bridge, PCI_EXP_DEVCTL2,
3564					   PCI_EXP_DEVCTL2_ARI);
3565		bridge->ari_enabled = 0;
3566	}
3567}
3568
3569static bool pci_acs_flags_enabled(struct pci_dev *pdev, u16 acs_flags)
 
 
 
 
 
 
 
 
 
3570{
3571	int pos;
3572	u16 cap, ctrl;
3573
3574	pos = pdev->acs_cap;
3575	if (!pos)
3576		return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3577
3578	/*
3579	 * Except for egress control, capabilities are either required
3580	 * or only required if controllable.  Features missing from the
3581	 * capability field can therefore be assumed as hard-wired enabled.
3582	 */
3583	pci_read_config_word(pdev, pos + PCI_ACS_CAP, &cap);
3584	acs_flags &= (cap | PCI_ACS_EC);
3585
3586	pci_read_config_word(pdev, pos + PCI_ACS_CTRL, &ctrl);
3587	return (ctrl & acs_flags) == acs_flags;
 
 
 
 
3588}
 
3589
3590/**
3591 * pci_acs_enabled - test ACS against required flags for a given device
3592 * @pdev: device to test
3593 * @acs_flags: required PCI ACS flags
3594 *
3595 * Return true if the device supports the provided flags.  Automatically
3596 * filters out flags that are not implemented on multifunction devices.
 
 
 
 
 
 
 
 
3597 *
3598 * Note that this interface checks the effective ACS capabilities of the
3599 * device rather than the actual capabilities.  For instance, most single
3600 * function endpoints are not required to support ACS because they have no
3601 * opportunity for peer-to-peer access.  We therefore return 'true'
3602 * regardless of whether the device exposes an ACS capability.  This makes
3603 * it much easier for callers of this function to ignore the actual type
3604 * or topology of the device when testing ACS support.
3605 */
3606bool pci_acs_enabled(struct pci_dev *pdev, u16 acs_flags)
3607{
 
 
 
3608	int ret;
3609
3610	ret = pci_dev_specific_acs_enabled(pdev, acs_flags);
3611	if (ret >= 0)
3612		return ret > 0;
3613
3614	/*
3615	 * Conventional PCI and PCI-X devices never support ACS, either
3616	 * effectively or actually.  The shared bus topology implies that
3617	 * any device on the bus can receive or snoop DMA.
3618	 */
3619	if (!pci_is_pcie(pdev))
3620		return false;
 
 
 
 
 
 
 
3621
3622	switch (pci_pcie_type(pdev)) {
3623	/*
3624	 * PCI/X-to-PCIe bridges are not specifically mentioned by the spec,
3625	 * but since their primary interface is PCI/X, we conservatively
3626	 * handle them as we would a non-PCIe device.
3627	 */
3628	case PCI_EXP_TYPE_PCIE_BRIDGE:
3629	/*
3630	 * PCIe 3.0, 6.12.1 excludes ACS on these devices.  "ACS is never
3631	 * applicable... must never implement an ACS Extended Capability...".
3632	 * This seems arbitrary, but we take a conservative interpretation
3633	 * of this statement.
3634	 */
3635	case PCI_EXP_TYPE_PCI_BRIDGE:
3636	case PCI_EXP_TYPE_RC_EC:
3637		return false;
3638	/*
3639	 * PCIe 3.0, 6.12.1.1 specifies that downstream and root ports should
3640	 * implement ACS in order to indicate their peer-to-peer capabilities,
3641	 * regardless of whether they are single- or multi-function devices.
3642	 */
3643	case PCI_EXP_TYPE_DOWNSTREAM:
3644	case PCI_EXP_TYPE_ROOT_PORT:
3645		return pci_acs_flags_enabled(pdev, acs_flags);
3646	/*
3647	 * PCIe 3.0, 6.12.1.2 specifies ACS capabilities that should be
3648	 * implemented by the remaining PCIe types to indicate peer-to-peer
3649	 * capabilities, but only when they are part of a multifunction
3650	 * device.  The footnote for section 6.12 indicates the specific
3651	 * PCIe types included here.
3652	 */
3653	case PCI_EXP_TYPE_ENDPOINT:
3654	case PCI_EXP_TYPE_UPSTREAM:
3655	case PCI_EXP_TYPE_LEG_END:
3656	case PCI_EXP_TYPE_RC_END:
3657		if (!pdev->multifunction)
3658			break;
3659
3660		return pci_acs_flags_enabled(pdev, acs_flags);
 
 
3661	}
 
3662
3663	/*
3664	 * PCIe 3.0, 6.12.1.3 specifies no ACS capabilities are applicable
3665	 * to single function devices with the exception of downstream ports.
3666	 */
3667	return true;
3668}
 
3669
3670/**
3671 * pci_acs_path_enabled - test ACS flags from start to end in a hierarchy
3672 * @start: starting downstream device
3673 * @end: ending upstream device or NULL to search to the root bus
3674 * @acs_flags: required flags
3675 *
3676 * Walk up a device tree from start to end testing PCI ACS support.  If
3677 * any step along the way does not support the required flags, return false.
3678 */
3679bool pci_acs_path_enabled(struct pci_dev *start,
3680			  struct pci_dev *end, u16 acs_flags)
3681{
3682	struct pci_dev *pdev, *parent = start;
 
3683
3684	do {
3685		pdev = parent;
3686
3687		if (!pci_acs_enabled(pdev, acs_flags))
3688			return false;
 
3689
3690		if (pci_is_root_bus(pdev->bus))
3691			return (end == NULL);
3692
3693		parent = pdev->bus->self;
3694	} while (pdev != end);
3695
3696	return true;
3697}
 
3698
3699/**
3700 * pci_acs_init - Initialize ACS if hardware supports it
3701 * @dev: the PCI device
 
 
 
3702 */
3703void pci_acs_init(struct pci_dev *dev)
3704{
3705	dev->acs_cap = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS);
 
 
 
 
 
 
 
 
 
 
3706
3707	/*
3708	 * Attempt to enable ACS regardless of capability because some Root
3709	 * Ports (e.g. those quirked with *_intel_pch_acs_*) do not have
3710	 * the standard ACS capability but still support ACS via those
3711	 * quirks.
3712	 */
3713	pci_enable_acs(dev);
3714}
 
3715
3716/**
3717 * pci_rebar_find_pos - find position of resize ctrl reg for BAR
3718 * @pdev: PCI device
3719 * @bar: BAR to find
3720 *
3721 * Helper to find the position of the ctrl register for a BAR.
3722 * Returns -ENOTSUPP if resizable BARs are not supported at all.
3723 * Returns -ENOENT if no ctrl register for the BAR could be found.
 
 
3724 */
3725static int pci_rebar_find_pos(struct pci_dev *pdev, int bar)
3726{
3727	unsigned int pos, nbars, i;
3728	u32 ctrl;
 
3729
3730	pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_REBAR);
 
 
 
3731	if (!pos)
3732		return -ENOTSUPP;
3733
3734	pci_read_config_dword(pdev, pos + PCI_REBAR_CTRL, &ctrl);
3735	nbars = FIELD_GET(PCI_REBAR_CTRL_NBAR_MASK, ctrl);
 
3736
3737	for (i = 0; i < nbars; i++, pos += 8) {
3738		int bar_idx;
 
 
 
 
3739
3740		pci_read_config_dword(pdev, pos + PCI_REBAR_CTRL, &ctrl);
3741		bar_idx = FIELD_GET(PCI_REBAR_CTRL_BAR_IDX, ctrl);
3742		if (bar_idx == bar)
3743			return pos;
3744	}
3745
3746	return -ENOENT;
3747}
 
3748
3749/**
3750 * pci_rebar_get_possible_sizes - get possible sizes for BAR
3751 * @pdev: PCI device
3752 * @bar: BAR to query
3753 *
3754 * Get the possible sizes of a resizable BAR as bitmask defined in the spec
3755 * (bit 0=1MB, bit 19=512GB). Returns 0 if BAR isn't resizable.
3756 */
3757u32 pci_rebar_get_possible_sizes(struct pci_dev *pdev, int bar)
3758{
3759	int pos;
3760	u32 cap;
 
 
 
 
 
 
 
3761
3762	pos = pci_rebar_find_pos(pdev, bar);
3763	if (pos < 0)
3764		return 0;
3765
3766	pci_read_config_dword(pdev, pos + PCI_REBAR_CAP, &cap);
3767	cap = FIELD_GET(PCI_REBAR_CAP_SIZES, cap);
 
 
 
3768
3769	/* Sapphire RX 5600 XT Pulse has an invalid cap dword for BAR 0 */
3770	if (pdev->vendor == PCI_VENDOR_ID_ATI && pdev->device == 0x731f &&
3771	    bar == 0 && cap == 0x700)
3772		return 0x3f00;
3773
3774	return cap;
 
 
 
 
3775}
3776EXPORT_SYMBOL(pci_rebar_get_possible_sizes);
3777
3778/**
3779 * pci_rebar_get_current_size - get the current size of a BAR
3780 * @pdev: PCI device
3781 * @bar: BAR to set size to
 
3782 *
3783 * Read the size of a BAR from the resizable BAR config.
3784 * Returns size if found or negative error code.
3785 */
3786int pci_rebar_get_current_size(struct pci_dev *pdev, int bar)
3787{
3788	int pos;
3789	u32 ctrl;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3790
3791	pos = pci_rebar_find_pos(pdev, bar);
3792	if (pos < 0)
3793		return pos;
 
3794
3795	pci_read_config_dword(pdev, pos + PCI_REBAR_CTRL, &ctrl);
3796	return FIELD_GET(PCI_REBAR_CTRL_BAR_SIZE, ctrl);
3797}
 
 
 
3798
3799/**
3800 * pci_rebar_set_size - set a new size for a BAR
3801 * @pdev: PCI device
3802 * @bar: BAR to set size to
3803 * @size: new size as defined in the spec (0=1MB, 19=512GB)
3804 *
3805 * Set the new size of a BAR as defined in the spec.
3806 * Returns zero if resizing was successful, error code otherwise.
3807 */
3808int pci_rebar_set_size(struct pci_dev *pdev, int bar, int size)
3809{
3810	int pos;
3811	u32 ctrl;
3812
3813	pos = pci_rebar_find_pos(pdev, bar);
3814	if (pos < 0)
3815		return pos;
3816
3817	pci_read_config_dword(pdev, pos + PCI_REBAR_CTRL, &ctrl);
3818	ctrl &= ~PCI_REBAR_CTRL_BAR_SIZE;
3819	ctrl |= FIELD_PREP(PCI_REBAR_CTRL_BAR_SIZE, size);
3820	pci_write_config_dword(pdev, pos + PCI_REBAR_CTRL, ctrl);
3821	return 0;
3822}
3823
3824/**
3825 * pci_enable_atomic_ops_to_root - enable AtomicOp requests to root port
3826 * @dev: the PCI device
3827 * @cap_mask: mask of desired AtomicOp sizes, including one or more of:
3828 *	PCI_EXP_DEVCAP2_ATOMIC_COMP32
3829 *	PCI_EXP_DEVCAP2_ATOMIC_COMP64
3830 *	PCI_EXP_DEVCAP2_ATOMIC_COMP128
3831 *
3832 * Return 0 if all upstream bridges support AtomicOp routing, egress
3833 * blocking is disabled on all upstream ports, and the root port supports
3834 * the requested completion capabilities (32-bit, 64-bit and/or 128-bit
3835 * AtomicOp completion), or negative otherwise.
3836 */
3837int pci_enable_atomic_ops_to_root(struct pci_dev *dev, u32 cap_mask)
3838{
3839	struct pci_bus *bus = dev->bus;
3840	struct pci_dev *bridge;
3841	u32 cap, ctl2;
3842
3843	/*
3844	 * Per PCIe r5.0, sec 9.3.5.10, the AtomicOp Requester Enable bit
3845	 * in Device Control 2 is reserved in VFs and the PF value applies
3846	 * to all associated VFs.
3847	 */
3848	if (dev->is_virtfn)
3849		return -EINVAL;
3850
3851	if (!pci_is_pcie(dev))
3852		return -EINVAL;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3853
3854	/*
3855	 * Per PCIe r4.0, sec 6.15, endpoints and root ports may be
3856	 * AtomicOp requesters.  For now, we only support endpoints as
3857	 * requesters and root ports as completers.  No endpoints as
3858	 * completers, and no peer-to-peer.
3859	 */
3860
3861	switch (pci_pcie_type(dev)) {
3862	case PCI_EXP_TYPE_ENDPOINT:
3863	case PCI_EXP_TYPE_LEG_END:
3864	case PCI_EXP_TYPE_RC_END:
3865		break;
3866	default:
3867		return -EINVAL;
3868	}
3869
3870	while (bus->parent) {
3871		bridge = bus->self;
 
 
 
 
 
 
 
 
 
 
 
 
3872
3873		pcie_capability_read_dword(bridge, PCI_EXP_DEVCAP2, &cap);
 
 
 
3874
3875		switch (pci_pcie_type(bridge)) {
3876		/* Ensure switch ports support AtomicOp routing */
3877		case PCI_EXP_TYPE_UPSTREAM:
3878		case PCI_EXP_TYPE_DOWNSTREAM:
3879			if (!(cap & PCI_EXP_DEVCAP2_ATOMIC_ROUTE))
3880				return -EINVAL;
3881			break;
3882
3883		/* Ensure root port supports all the sizes we care about */
3884		case PCI_EXP_TYPE_ROOT_PORT:
3885			if ((cap & cap_mask) != cap_mask)
3886				return -EINVAL;
3887			break;
3888		}
3889
3890		/* Ensure upstream ports don't block AtomicOps on egress */
3891		if (pci_pcie_type(bridge) == PCI_EXP_TYPE_UPSTREAM) {
3892			pcie_capability_read_dword(bridge, PCI_EXP_DEVCTL2,
3893						   &ctl2);
3894			if (ctl2 & PCI_EXP_DEVCTL2_ATOMIC_EGRESS_BLOCK)
3895				return -EINVAL;
3896		}
3897
3898		bus = bus->parent;
 
 
3899	}
 
 
 
3900
3901	pcie_capability_set_word(dev, PCI_EXP_DEVCTL2,
3902				 PCI_EXP_DEVCTL2_ATOMIC_REQ);
3903	return 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3904}
3905EXPORT_SYMBOL(pci_enable_atomic_ops_to_root);
3906
3907/**
3908 * pci_release_region - Release a PCI bar
3909 * @pdev: PCI device whose resources were previously reserved by
3910 *	  pci_request_region()
3911 * @bar: BAR to release
3912 *
3913 * Releases the PCI I/O and memory resources previously reserved by a
3914 * successful call to pci_request_region().  Call this function only
3915 * after all use of the PCI regions has ceased.
3916 */
3917void pci_release_region(struct pci_dev *pdev, int bar)
3918{
3919	/*
3920	 * This is done for backwards compatibility, because the old PCI devres
3921	 * API had a mode in which the function became managed if it had been
3922	 * enabled with pcim_enable_device() instead of pci_enable_device().
3923	 */
3924	if (pci_is_managed(pdev)) {
3925		pcim_release_region(pdev, bar);
3926		return;
3927	}
3928
3929	if (pci_resource_len(pdev, bar) == 0)
3930		return;
3931	if (pci_resource_flags(pdev, bar) & IORESOURCE_IO)
3932		release_region(pci_resource_start(pdev, bar),
3933				pci_resource_len(pdev, bar));
3934	else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM)
3935		release_mem_region(pci_resource_start(pdev, bar),
3936				pci_resource_len(pdev, bar));
 
 
 
 
3937}
3938EXPORT_SYMBOL(pci_release_region);
3939
3940/**
3941 * __pci_request_region - Reserved PCI I/O and memory resource
3942 * @pdev: PCI device whose resources are to be reserved
3943 * @bar: BAR to be reserved
3944 * @res_name: Name to be associated with resource.
3945 * @exclusive: whether the region access is exclusive or not
3946 *
3947 * Returns: 0 on success, negative error code on failure.
3948 *
3949 * Mark the PCI region associated with PCI device @pdev BAR @bar as
3950 * being reserved by owner @res_name.  Do not access any
3951 * address inside the PCI regions unless this call returns
3952 * successfully.
3953 *
3954 * If @exclusive is set, then the region is marked so that userspace
3955 * is explicitly not allowed to map the resource via /dev/mem or
3956 * sysfs MMIO access.
3957 *
3958 * Returns 0 on success, or %EBUSY on error.  A warning
3959 * message is also printed on failure.
3960 */
3961static int __pci_request_region(struct pci_dev *pdev, int bar,
3962				const char *res_name, int exclusive)
3963{
3964	if (pci_is_managed(pdev)) {
3965		if (exclusive == IORESOURCE_EXCLUSIVE)
3966			return pcim_request_region_exclusive(pdev, bar, res_name);
3967
3968		return pcim_request_region(pdev, bar, res_name);
3969	}
3970
3971	if (pci_resource_len(pdev, bar) == 0)
3972		return 0;
3973
3974	if (pci_resource_flags(pdev, bar) & IORESOURCE_IO) {
3975		if (!request_region(pci_resource_start(pdev, bar),
3976			    pci_resource_len(pdev, bar), res_name))
3977			goto err_out;
3978	} else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM) {
 
3979		if (!__request_mem_region(pci_resource_start(pdev, bar),
3980					pci_resource_len(pdev, bar), res_name,
3981					exclusive))
3982			goto err_out;
3983	}
3984
 
 
 
 
3985	return 0;
3986
3987err_out:
3988	pci_warn(pdev, "BAR %d: can't reserve %pR\n", bar,
3989		 &pdev->resource[bar]);
3990	return -EBUSY;
3991}
3992
3993/**
3994 * pci_request_region - Reserve PCI I/O and memory resource
3995 * @pdev: PCI device whose resources are to be reserved
3996 * @bar: BAR to be reserved
3997 * @res_name: Name to be associated with resource
 
 
 
 
 
3998 *
3999 * Returns: 0 on success, negative error code on failure.
4000 *
4001 * Mark the PCI region associated with PCI device @pdev BAR @bar as
4002 * being reserved by owner @res_name.  Do not access any
4003 * address inside the PCI regions unless this call returns
4004 * successfully.
4005 *
4006 * Returns 0 on success, or %EBUSY on error.  A warning
4007 * message is also printed on failure.
4008 *
4009 * NOTE:
4010 * This is a "hybrid" function: It's normally unmanaged, but becomes managed
4011 * when pcim_enable_device() has been called in advance. This hybrid feature is
4012 * DEPRECATED! If you want managed cleanup, use the pcim_* functions instead.
4013 */
4014int pci_request_region(struct pci_dev *pdev, int bar, const char *res_name)
4015{
4016	return __pci_request_region(pdev, bar, res_name, 0);
4017}
4018EXPORT_SYMBOL(pci_request_region);
4019
4020/**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4021 * pci_release_selected_regions - Release selected PCI I/O and memory resources
4022 * @pdev: PCI device whose resources were previously reserved
4023 * @bars: Bitmask of BARs to be released
4024 *
4025 * Release selected PCI I/O and memory resources previously reserved.
4026 * Call this function only after all use of the PCI regions has ceased.
4027 */
4028void pci_release_selected_regions(struct pci_dev *pdev, int bars)
4029{
4030	int i;
4031
4032	for (i = 0; i < PCI_STD_NUM_BARS; i++)
4033		if (bars & (1 << i))
4034			pci_release_region(pdev, i);
4035}
4036EXPORT_SYMBOL(pci_release_selected_regions);
4037
4038static int __pci_request_selected_regions(struct pci_dev *pdev, int bars,
4039					  const char *res_name, int excl)
4040{
4041	int i;
4042
4043	for (i = 0; i < PCI_STD_NUM_BARS; i++)
4044		if (bars & (1 << i))
4045			if (__pci_request_region(pdev, i, res_name, excl))
4046				goto err_out;
4047	return 0;
4048
4049err_out:
4050	while (--i >= 0)
4051		if (bars & (1 << i))
4052			pci_release_region(pdev, i);
4053
4054	return -EBUSY;
4055}
4056
4057
4058/**
4059 * pci_request_selected_regions - Reserve selected PCI I/O and memory resources
4060 * @pdev: PCI device whose resources are to be reserved
4061 * @bars: Bitmask of BARs to be requested
4062 * @res_name: Name to be associated with resource
4063 *
4064 * Returns: 0 on success, negative error code on failure.
4065 *
4066 * NOTE:
4067 * This is a "hybrid" function: It's normally unmanaged, but becomes managed
4068 * when pcim_enable_device() has been called in advance. This hybrid feature is
4069 * DEPRECATED! If you want managed cleanup, use the pcim_* functions instead.
4070 */
4071int pci_request_selected_regions(struct pci_dev *pdev, int bars,
4072				 const char *res_name)
4073{
4074	return __pci_request_selected_regions(pdev, bars, res_name, 0);
4075}
4076EXPORT_SYMBOL(pci_request_selected_regions);
4077
4078/**
4079 * pci_request_selected_regions_exclusive - Request regions exclusively
4080 * @pdev: PCI device to request regions from
4081 * @bars: bit mask of BARs to request
4082 * @res_name: name to be associated with the requests
4083 *
4084 * Returns: 0 on success, negative error code on failure.
4085 *
4086 * NOTE:
4087 * This is a "hybrid" function: It's normally unmanaged, but becomes managed
4088 * when pcim_enable_device() has been called in advance. This hybrid feature is
4089 * DEPRECATED! If you want managed cleanup, use the pcim_* functions instead.
4090 */
4091int pci_request_selected_regions_exclusive(struct pci_dev *pdev, int bars,
4092					   const char *res_name)
4093{
4094	return __pci_request_selected_regions(pdev, bars, res_name,
4095			IORESOURCE_EXCLUSIVE);
4096}
4097EXPORT_SYMBOL(pci_request_selected_regions_exclusive);
4098
4099/**
4100 * pci_release_regions - Release reserved PCI I/O and memory resources
4101 * @pdev: PCI device whose resources were previously reserved by
4102 *	  pci_request_regions()
4103 *
4104 * Releases all PCI I/O and memory resources previously reserved by a
4105 * successful call to pci_request_regions().  Call this function only
4106 * after all use of the PCI regions has ceased.
4107 */
 
4108void pci_release_regions(struct pci_dev *pdev)
4109{
4110	pci_release_selected_regions(pdev, (1 << PCI_STD_NUM_BARS) - 1);
4111}
4112EXPORT_SYMBOL(pci_release_regions);
4113
4114/**
4115 * pci_request_regions - Reserve PCI I/O and memory resources
4116 * @pdev: PCI device whose resources are to be reserved
4117 * @res_name: Name to be associated with resource.
 
 
 
 
 
4118 *
4119 * Mark all PCI regions associated with PCI device @pdev as
4120 * being reserved by owner @res_name.  Do not access any
4121 * address inside the PCI regions unless this call returns
4122 * successfully.
4123 *
4124 * Returns 0 on success, or %EBUSY on error.  A warning
4125 * message is also printed on failure.
4126 *
4127 * NOTE:
4128 * This is a "hybrid" function: It's normally unmanaged, but becomes managed
4129 * when pcim_enable_device() has been called in advance. This hybrid feature is
4130 * DEPRECATED! If you want managed cleanup, use the pcim_* functions instead.
4131 */
4132int pci_request_regions(struct pci_dev *pdev, const char *res_name)
4133{
4134	return pci_request_selected_regions(pdev,
4135			((1 << PCI_STD_NUM_BARS) - 1), res_name);
4136}
4137EXPORT_SYMBOL(pci_request_regions);
4138
4139/**
4140 * pci_request_regions_exclusive - Reserve PCI I/O and memory resources
4141 * @pdev: PCI device whose resources are to be reserved
4142 * @res_name: Name to be associated with resource.
4143 *
4144 * Returns: 0 on success, negative error code on failure.
 
 
 
4145 *
4146 * Mark all PCI regions associated with PCI device @pdev as being reserved
4147 * by owner @res_name.  Do not access any address inside the PCI regions
4148 * unless this call returns successfully.
4149 *
4150 * pci_request_regions_exclusive() will mark the region so that /dev/mem
4151 * and the sysfs MMIO access will not be allowed.
4152 *
4153 * Returns 0 on success, or %EBUSY on error.  A warning message is also
4154 * printed on failure.
4155 *
4156 * NOTE:
4157 * This is a "hybrid" function: It's normally unmanaged, but becomes managed
4158 * when pcim_enable_device() has been called in advance. This hybrid feature is
4159 * DEPRECATED! If you want managed cleanup, use the pcim_* functions instead.
4160 */
4161int pci_request_regions_exclusive(struct pci_dev *pdev, const char *res_name)
4162{
4163	return pci_request_selected_regions_exclusive(pdev,
4164				((1 << PCI_STD_NUM_BARS) - 1), res_name);
4165}
4166EXPORT_SYMBOL(pci_request_regions_exclusive);
4167
4168/*
4169 * Record the PCI IO range (expressed as CPU physical address + size).
4170 * Return a negative value if an error has occurred, zero otherwise
4171 */
4172int pci_register_io_range(const struct fwnode_handle *fwnode, phys_addr_t addr,
4173			resource_size_t	size)
4174{
4175	int ret = 0;
4176#ifdef PCI_IOBASE
4177	struct logic_pio_hwaddr *range;
4178
4179	if (!size || addr + size < addr)
4180		return -EINVAL;
4181
4182	range = kzalloc(sizeof(*range), GFP_ATOMIC);
4183	if (!range)
4184		return -ENOMEM;
4185
4186	range->fwnode = fwnode;
4187	range->size = size;
4188	range->hw_start = addr;
4189	range->flags = LOGIC_PIO_CPU_MMIO;
4190
4191	ret = logic_pio_register_range(range);
4192	if (ret)
4193		kfree(range);
4194
4195	/* Ignore duplicates due to deferred probing */
4196	if (ret == -EEXIST)
4197		ret = 0;
4198#endif
4199
4200	return ret;
4201}
4202
4203phys_addr_t pci_pio_to_address(unsigned long pio)
4204{
4205#ifdef PCI_IOBASE
4206	if (pio < MMIO_UPPER_LIMIT)
4207		return logic_pio_to_hwaddr(pio);
4208#endif
4209
4210	return (phys_addr_t) OF_BAD_ADDR;
4211}
4212EXPORT_SYMBOL_GPL(pci_pio_to_address);
4213
4214unsigned long __weak pci_address_to_pio(phys_addr_t address)
4215{
4216#ifdef PCI_IOBASE
4217	return logic_pio_trans_cpuaddr(address);
4218#else
4219	if (address > IO_SPACE_LIMIT)
4220		return (unsigned long)-1;
4221
4222	return (unsigned long) address;
4223#endif
4224}
4225
4226/**
4227 * pci_remap_iospace - Remap the memory mapped I/O space
4228 * @res: Resource describing the I/O space
4229 * @phys_addr: physical address of range to be mapped
4230 *
4231 * Remap the memory mapped I/O space described by the @res and the CPU
4232 * physical address @phys_addr into virtual address space.  Only
4233 * architectures that have memory mapped IO functions defined (and the
4234 * PCI_IOBASE value defined) should call this function.
4235 */
4236#ifndef pci_remap_iospace
4237int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr)
4238{
4239#if defined(PCI_IOBASE) && defined(CONFIG_MMU)
4240	unsigned long vaddr = (unsigned long)PCI_IOBASE + res->start;
4241
4242	if (!(res->flags & IORESOURCE_IO))
4243		return -EINVAL;
4244
4245	if (res->end > IO_SPACE_LIMIT)
4246		return -EINVAL;
4247
4248	return vmap_page_range(vaddr, vaddr + resource_size(res), phys_addr,
4249			       pgprot_device(PAGE_KERNEL));
4250#else
4251	/*
4252	 * This architecture does not have memory mapped I/O space,
4253	 * so this function should never be called
4254	 */
4255	WARN_ONCE(1, "This architecture does not support memory mapped I/O\n");
4256	return -ENODEV;
4257#endif
4258}
4259EXPORT_SYMBOL(pci_remap_iospace);
4260#endif
4261
4262/**
4263 * pci_unmap_iospace - Unmap the memory mapped I/O space
4264 * @res: resource to be unmapped
4265 *
4266 * Unmap the CPU virtual address @res from virtual address space.  Only
4267 * architectures that have memory mapped IO functions defined (and the
4268 * PCI_IOBASE value defined) should call this function.
4269 */
4270void pci_unmap_iospace(struct resource *res)
4271{
4272#if defined(PCI_IOBASE) && defined(CONFIG_MMU)
4273	unsigned long vaddr = (unsigned long)PCI_IOBASE + res->start;
4274
4275	vunmap_range(vaddr, vaddr + resource_size(res));
4276#endif
4277}
4278EXPORT_SYMBOL(pci_unmap_iospace);
4279
4280static void __pci_set_master(struct pci_dev *dev, bool enable)
4281{
4282	u16 old_cmd, cmd;
4283
4284	pci_read_config_word(dev, PCI_COMMAND, &old_cmd);
4285	if (enable)
4286		cmd = old_cmd | PCI_COMMAND_MASTER;
4287	else
4288		cmd = old_cmd & ~PCI_COMMAND_MASTER;
4289	if (cmd != old_cmd) {
4290		pci_dbg(dev, "%s bus mastering\n",
4291			enable ? "enabling" : "disabling");
4292		pci_write_config_word(dev, PCI_COMMAND, cmd);
4293	}
4294	dev->is_busmaster = enable;
4295}
4296
4297/**
4298 * pcibios_setup - process "pci=" kernel boot arguments
4299 * @str: string used to pass in "pci=" kernel boot arguments
4300 *
4301 * Process kernel boot arguments.  This is the default implementation.
4302 * Architecture specific implementations can override this as necessary.
4303 */
4304char * __weak __init pcibios_setup(char *str)
4305{
4306	return str;
4307}
4308
4309/**
4310 * pcibios_set_master - enable PCI bus-mastering for device dev
4311 * @dev: the PCI device to enable
4312 *
4313 * Enables PCI bus-mastering for the device.  This is the default
4314 * implementation.  Architecture specific implementations can override
4315 * this if necessary.
4316 */
4317void __weak pcibios_set_master(struct pci_dev *dev)
4318{
4319	u8 lat;
4320
4321	/* The latency timer doesn't apply to PCIe (either Type 0 or Type 1) */
4322	if (pci_is_pcie(dev))
4323		return;
4324
4325	pci_read_config_byte(dev, PCI_LATENCY_TIMER, &lat);
4326	if (lat < 16)
4327		lat = (64 <= pcibios_max_latency) ? 64 : pcibios_max_latency;
4328	else if (lat > pcibios_max_latency)
4329		lat = pcibios_max_latency;
4330	else
4331		return;
4332
4333	pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat);
4334}
4335
4336/**
4337 * pci_set_master - enables bus-mastering for device dev
4338 * @dev: the PCI device to enable
4339 *
4340 * Enables bus-mastering on the device and calls pcibios_set_master()
4341 * to do the needed arch specific settings.
4342 */
4343void pci_set_master(struct pci_dev *dev)
4344{
4345	__pci_set_master(dev, true);
4346	pcibios_set_master(dev);
4347}
4348EXPORT_SYMBOL(pci_set_master);
4349
4350/**
4351 * pci_clear_master - disables bus-mastering for device dev
4352 * @dev: the PCI device to disable
4353 */
4354void pci_clear_master(struct pci_dev *dev)
4355{
4356	__pci_set_master(dev, false);
4357}
4358EXPORT_SYMBOL(pci_clear_master);
4359
4360/**
4361 * pci_set_cacheline_size - ensure the CACHE_LINE_SIZE register is programmed
4362 * @dev: the PCI device for which MWI is to be enabled
4363 *
4364 * Helper function for pci_set_mwi.
4365 * Originally copied from drivers/net/acenic.c.
4366 * Copyright 1998-2001 by Jes Sorensen, <jes@trained-monkey.org>.
4367 *
4368 * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
4369 */
4370int pci_set_cacheline_size(struct pci_dev *dev)
4371{
4372	u8 cacheline_size;
4373
4374	if (!pci_cache_line_size)
4375		return -EINVAL;
4376
4377	/* Validate current setting: the PCI_CACHE_LINE_SIZE must be
4378	   equal to or multiple of the right value. */
4379	pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cacheline_size);
4380	if (cacheline_size >= pci_cache_line_size &&
4381	    (cacheline_size % pci_cache_line_size) == 0)
4382		return 0;
4383
4384	/* Write the correct value. */
4385	pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE, pci_cache_line_size);
4386	/* Read it back. */
4387	pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cacheline_size);
4388	if (cacheline_size == pci_cache_line_size)
4389		return 0;
4390
4391	pci_dbg(dev, "cache line size of %d is not supported\n",
4392		   pci_cache_line_size << 2);
4393
4394	return -EINVAL;
4395}
4396EXPORT_SYMBOL_GPL(pci_set_cacheline_size);
4397
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4398/**
4399 * pci_set_mwi - enables memory-write-invalidate PCI transaction
4400 * @dev: the PCI device for which MWI is enabled
4401 *
4402 * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND.
4403 *
4404 * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
4405 */
4406int pci_set_mwi(struct pci_dev *dev)
 
4407{
4408#ifdef PCI_DISABLE_MWI
4409	return 0;
4410#else
4411	int rc;
4412	u16 cmd;
4413
4414	rc = pci_set_cacheline_size(dev);
4415	if (rc)
4416		return rc;
4417
4418	pci_read_config_word(dev, PCI_COMMAND, &cmd);
4419	if (!(cmd & PCI_COMMAND_INVALIDATE)) {
4420		pci_dbg(dev, "enabling Mem-Wr-Inval\n");
4421		cmd |= PCI_COMMAND_INVALIDATE;
4422		pci_write_config_word(dev, PCI_COMMAND, cmd);
4423	}
 
4424	return 0;
4425#endif
4426}
4427EXPORT_SYMBOL(pci_set_mwi);
4428
4429/**
4430 * pci_try_set_mwi - enables memory-write-invalidate PCI transaction
4431 * @dev: the PCI device for which MWI is enabled
4432 *
4433 * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND.
4434 * Callers are not required to check the return value.
4435 *
4436 * RETURNS: An appropriate -ERRNO error value on error, or zero for success.
4437 */
4438int pci_try_set_mwi(struct pci_dev *dev)
4439{
4440#ifdef PCI_DISABLE_MWI
4441	return 0;
4442#else
4443	return pci_set_mwi(dev);
4444#endif
4445}
4446EXPORT_SYMBOL(pci_try_set_mwi);
4447
4448/**
4449 * pci_clear_mwi - disables Memory-Write-Invalidate for device dev
4450 * @dev: the PCI device to disable
4451 *
4452 * Disables PCI Memory-Write-Invalidate transaction on the device
4453 */
4454void pci_clear_mwi(struct pci_dev *dev)
 
4455{
4456#ifndef PCI_DISABLE_MWI
4457	u16 cmd;
4458
4459	pci_read_config_word(dev, PCI_COMMAND, &cmd);
4460	if (cmd & PCI_COMMAND_INVALIDATE) {
4461		cmd &= ~PCI_COMMAND_INVALIDATE;
4462		pci_write_config_word(dev, PCI_COMMAND, cmd);
4463	}
4464#endif
4465}
4466EXPORT_SYMBOL(pci_clear_mwi);
4467
4468/**
4469 * pci_disable_parity - disable parity checking for device
4470 * @dev: the PCI device to operate on
4471 *
4472 * Disable parity checking for device @dev
4473 */
4474void pci_disable_parity(struct pci_dev *dev)
4475{
4476	u16 cmd;
4477
4478	pci_read_config_word(dev, PCI_COMMAND, &cmd);
4479	if (cmd & PCI_COMMAND_PARITY) {
4480		cmd &= ~PCI_COMMAND_PARITY;
4481		pci_write_config_word(dev, PCI_COMMAND, cmd);
4482	}
4483}
 
4484
4485/**
4486 * pci_intx - enables/disables PCI INTx for device dev
4487 * @pdev: the PCI device to operate on
4488 * @enable: boolean: whether to enable or disable PCI INTx
4489 *
4490 * Enables/disables PCI INTx for device @pdev
4491 */
4492void pci_intx(struct pci_dev *pdev, int enable)
 
4493{
4494	u16 pci_command, new;
4495
4496	pci_read_config_word(pdev, PCI_COMMAND, &pci_command);
4497
4498	if (enable)
4499		new = pci_command & ~PCI_COMMAND_INTX_DISABLE;
4500	else
4501		new = pci_command | PCI_COMMAND_INTX_DISABLE;
 
 
 
 
4502
4503	if (new == pci_command)
4504		return;
4505
4506	pci_write_config_word(pdev, PCI_COMMAND, new);
 
 
 
 
 
4507}
4508EXPORT_SYMBOL_GPL(pci_intx);
4509
4510/**
4511 * pci_wait_for_pending_transaction - wait for pending transaction
4512 * @dev: the PCI device to operate on
4513 *
4514 * Return 0 if transaction is pending 1 otherwise.
 
 
4515 */
4516int pci_wait_for_pending_transaction(struct pci_dev *dev)
4517{
4518	if (!pci_is_pcie(dev))
4519		return 1;
4520
4521	return pci_wait_for_pending(dev, pci_pcie_cap(dev) + PCI_EXP_DEVSTA,
4522				    PCI_EXP_DEVSTA_TRPND);
 
 
 
 
 
 
 
 
 
 
4523}
4524EXPORT_SYMBOL(pci_wait_for_pending_transaction);
4525
4526/**
4527 * pcie_flr - initiate a PCIe function level reset
4528 * @dev: device to reset
4529 *
4530 * Initiate a function level reset unconditionally on @dev without
4531 * checking any flags and DEVCAP
4532 */
4533int pcie_flr(struct pci_dev *dev)
4534{
4535	if (!pci_wait_for_pending_transaction(dev))
4536		pci_err(dev, "timed out waiting for pending transaction; performing function level reset anyway\n");
 
4537
4538	pcie_capability_set_word(dev, PCI_EXP_DEVCTL, PCI_EXP_DEVCTL_BCR_FLR);
4539
4540	if (dev->imm_ready)
4541		return 0;
4542
4543	/*
4544	 * Per PCIe r4.0, sec 6.6.2, a device must complete an FLR within
4545	 * 100ms, but may silently discard requests while the FLR is in
4546	 * progress.  Wait 100ms before trying to access the device.
4547	 */
4548	msleep(100);
4549
4550	return pci_dev_wait(dev, "FLR", PCIE_RESET_READY_POLL_MS);
4551}
4552EXPORT_SYMBOL_GPL(pcie_flr);
4553
4554/**
4555 * pcie_reset_flr - initiate a PCIe function level reset
4556 * @dev: device to reset
4557 * @probe: if true, return 0 if device can be reset this way
4558 *
4559 * Initiate a function level reset on @dev.
4560 */
4561int pcie_reset_flr(struct pci_dev *dev, bool probe)
4562{
4563	if (dev->dev_flags & PCI_DEV_FLAGS_NO_FLR_RESET)
 
 
 
 
 
 
4564		return -ENOTTY;
4565
4566	if (!(dev->devcap & PCI_EXP_DEVCAP_FLR))
 
4567		return -ENOTTY;
4568
4569	if (probe)
4570		return 0;
4571
4572	return pcie_flr(dev);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4573}
4574EXPORT_SYMBOL_GPL(pcie_reset_flr);
4575
4576static int pci_af_flr(struct pci_dev *dev, bool probe)
4577{
 
4578	int pos;
4579	u8 cap;
 
4580
4581	pos = pci_find_capability(dev, PCI_CAP_ID_AF);
4582	if (!pos)
4583		return -ENOTTY;
4584
4585	if (dev->dev_flags & PCI_DEV_FLAGS_NO_FLR_RESET)
4586		return -ENOTTY;
4587
4588	pci_read_config_byte(dev, pos + PCI_AF_CAP, &cap);
4589	if (!(cap & PCI_AF_CAP_TP) || !(cap & PCI_AF_CAP_FLR))
4590		return -ENOTTY;
4591
4592	if (probe)
4593		return 0;
4594
4595	/*
4596	 * Wait for Transaction Pending bit to clear.  A word-aligned test
4597	 * is used, so we use the control offset rather than status and shift
4598	 * the test bit to match.
4599	 */
4600	if (!pci_wait_for_pending(dev, pos + PCI_AF_CTRL,
4601				 PCI_AF_STATUS_TP << 8))
4602		pci_err(dev, "timed out waiting for pending transaction; performing AF function level reset anyway\n");
4603
4604	pci_write_config_byte(dev, pos + PCI_AF_CTRL, PCI_AF_CTRL_FLR);
 
 
 
4605
4606	if (dev->imm_ready)
4607		return 0;
4608
4609	/*
4610	 * Per Advanced Capabilities for Conventional PCI ECN, 13 April 2006,
4611	 * updated 27 July 2006; a device must complete an FLR within
4612	 * 100ms, but may silently discard requests while the FLR is in
4613	 * progress.  Wait 100ms before trying to access the device.
4614	 */
4615	msleep(100);
4616
4617	return pci_dev_wait(dev, "AF_FLR", PCIE_RESET_READY_POLL_MS);
4618}
4619
4620/**
4621 * pci_pm_reset - Put device into PCI_D3 and back into PCI_D0.
4622 * @dev: Device to reset.
4623 * @probe: if true, return 0 if the device can be reset this way.
4624 *
4625 * If @dev supports native PCI PM and its PCI_PM_CTRL_NO_SOFT_RESET flag is
4626 * unset, it will be reinitialized internally when going from PCI_D3hot to
4627 * PCI_D0.  If that's the case and the device is not in a low-power state
4628 * already, force it into PCI_D3hot and back to PCI_D0, causing it to be reset.
4629 *
4630 * NOTE: This causes the caller to sleep for twice the device power transition
4631 * cooldown period, which for the D0->D3hot and D3hot->D0 transitions is 10 ms
4632 * by default (i.e. unless the @dev's d3hot_delay field has a different value).
4633 * Moreover, only devices in D0 can be reset by this function.
4634 */
4635static int pci_pm_reset(struct pci_dev *dev, bool probe)
4636{
4637	u16 csr;
4638
4639	if (!dev->pm_cap || dev->dev_flags & PCI_DEV_FLAGS_NO_PM_RESET)
4640		return -ENOTTY;
4641
4642	pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &csr);
4643	if (csr & PCI_PM_CTRL_NO_SOFT_RESET)
4644		return -ENOTTY;
4645
4646	if (probe)
4647		return 0;
4648
4649	if (dev->current_state != PCI_D0)
4650		return -EINVAL;
4651
4652	csr &= ~PCI_PM_CTRL_STATE_MASK;
4653	csr |= PCI_D3hot;
4654	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, csr);
4655	pci_dev_d3_sleep(dev);
4656
4657	csr &= ~PCI_PM_CTRL_STATE_MASK;
4658	csr |= PCI_D0;
4659	pci_write_config_word(dev, dev->pm_cap + PCI_PM_CTRL, csr);
4660	pci_dev_d3_sleep(dev);
4661
4662	return pci_dev_wait(dev, "PM D3hot->D0", PCIE_RESET_READY_POLL_MS);
4663}
4664
4665/**
4666 * pcie_wait_for_link_status - Wait for link status change
4667 * @pdev: Device whose link to wait for.
4668 * @use_lt: Use the LT bit if TRUE, or the DLLLA bit if FALSE.
4669 * @active: Waiting for active or inactive?
4670 *
4671 * Return 0 if successful, or -ETIMEDOUT if status has not changed within
4672 * PCIE_LINK_RETRAIN_TIMEOUT_MS milliseconds.
4673 */
4674static int pcie_wait_for_link_status(struct pci_dev *pdev,
4675				     bool use_lt, bool active)
4676{
4677	u16 lnksta_mask, lnksta_match;
4678	unsigned long end_jiffies;
4679	u16 lnksta;
4680
4681	lnksta_mask = use_lt ? PCI_EXP_LNKSTA_LT : PCI_EXP_LNKSTA_DLLLA;
4682	lnksta_match = active ? lnksta_mask : 0;
4683
4684	end_jiffies = jiffies + msecs_to_jiffies(PCIE_LINK_RETRAIN_TIMEOUT_MS);
4685	do {
4686		pcie_capability_read_word(pdev, PCI_EXP_LNKSTA, &lnksta);
4687		if ((lnksta & lnksta_mask) == lnksta_match)
4688			return 0;
4689		msleep(1);
4690	} while (time_before(jiffies, end_jiffies));
4691
4692	return -ETIMEDOUT;
4693}
4694
4695/**
4696 * pcie_retrain_link - Request a link retrain and wait for it to complete
4697 * @pdev: Device whose link to retrain.
4698 * @use_lt: Use the LT bit if TRUE, or the DLLLA bit if FALSE, for status.
4699 *
4700 * Retrain completion status is retrieved from the Link Status Register
4701 * according to @use_lt.  It is not verified whether the use of the DLLLA
4702 * bit is valid.
4703 *
4704 * Return 0 if successful, or -ETIMEDOUT if training has not completed
4705 * within PCIE_LINK_RETRAIN_TIMEOUT_MS milliseconds.
4706 */
4707int pcie_retrain_link(struct pci_dev *pdev, bool use_lt)
4708{
4709	int rc;
4710
4711	/*
4712	 * Ensure the updated LNKCTL parameters are used during link
4713	 * training by checking that there is no ongoing link training that
4714	 * may have started before link parameters were changed, so as to
4715	 * avoid LTSSM race as recommended in Implementation Note at the end
4716	 * of PCIe r6.1 sec 7.5.3.7.
4717	 */
4718	rc = pcie_wait_for_link_status(pdev, true, false);
4719	if (rc)
4720		return rc;
4721
4722	pcie_capability_set_word(pdev, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_RL);
4723	if (pdev->clear_retrain_link) {
4724		/*
4725		 * Due to an erratum in some devices the Retrain Link bit
4726		 * needs to be cleared again manually to allow the link
4727		 * training to succeed.
4728		 */
4729		pcie_capability_clear_word(pdev, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_RL);
4730	}
4731
4732	rc = pcie_wait_for_link_status(pdev, use_lt, !use_lt);
4733
4734	/*
4735	 * Clear LBMS after a manual retrain so that the bit can be used
4736	 * to track link speed or width changes made by hardware itself
4737	 * in attempt to correct unreliable link operation.
4738	 */
4739	pcie_reset_lbms_count(pdev);
4740	return rc;
4741}
4742
4743/**
4744 * pcie_wait_for_link_delay - Wait until link is active or inactive
4745 * @pdev: Bridge device
4746 * @active: waiting for active or inactive?
4747 * @delay: Delay to wait after link has become active (in ms)
4748 *
4749 * Use this to wait till link becomes active or inactive.
4750 */
4751static bool pcie_wait_for_link_delay(struct pci_dev *pdev, bool active,
4752				     int delay)
4753{
4754	int rc;
4755
4756	/*
4757	 * Some controllers might not implement link active reporting. In this
4758	 * case, we wait for 1000 ms + any delay requested by the caller.
4759	 */
4760	if (!pdev->link_active_reporting) {
4761		msleep(PCIE_LINK_RETRAIN_TIMEOUT_MS + delay);
4762		return true;
4763	}
4764
4765	/*
4766	 * PCIe r4.0 sec 6.6.1, a component must enter LTSSM Detect within 20ms,
4767	 * after which we should expect an link active if the reset was
4768	 * successful. If so, software must wait a minimum 100ms before sending
4769	 * configuration requests to devices downstream this port.
4770	 *
4771	 * If the link fails to activate, either the device was physically
4772	 * removed or the link is permanently failed.
4773	 */
4774	if (active)
4775		msleep(20);
4776	rc = pcie_wait_for_link_status(pdev, false, active);
4777	if (active) {
4778		if (rc)
4779			rc = pcie_failed_link_retrain(pdev);
4780		if (rc)
4781			return false;
4782
4783		msleep(delay);
4784		return true;
4785	}
4786
4787	if (rc)
4788		return false;
4789
4790	return true;
4791}
4792
4793/**
4794 * pcie_wait_for_link - Wait until link is active or inactive
4795 * @pdev: Bridge device
4796 * @active: waiting for active or inactive?
4797 *
4798 * Use this to wait till link becomes active or inactive.
4799 */
4800bool pcie_wait_for_link(struct pci_dev *pdev, bool active)
4801{
4802	return pcie_wait_for_link_delay(pdev, active, 100);
4803}
4804
4805/*
4806 * Find maximum D3cold delay required by all the devices on the bus.  The
4807 * spec says 100 ms, but firmware can lower it and we allow drivers to
4808 * increase it as well.
4809 *
4810 * Called with @pci_bus_sem locked for reading.
4811 */
4812static int pci_bus_max_d3cold_delay(const struct pci_bus *bus)
4813{
4814	const struct pci_dev *pdev;
4815	int min_delay = 100;
4816	int max_delay = 0;
4817
4818	list_for_each_entry(pdev, &bus->devices, bus_list) {
4819		if (pdev->d3cold_delay < min_delay)
4820			min_delay = pdev->d3cold_delay;
4821		if (pdev->d3cold_delay > max_delay)
4822			max_delay = pdev->d3cold_delay;
4823	}
4824
4825	return max(min_delay, max_delay);
4826}
4827
4828/**
4829 * pci_bridge_wait_for_secondary_bus - Wait for secondary bus to be accessible
4830 * @dev: PCI bridge
4831 * @reset_type: reset type in human-readable form
4832 *
4833 * Handle necessary delays before access to the devices on the secondary
4834 * side of the bridge are permitted after D3cold to D0 transition
4835 * or Conventional Reset.
4836 *
4837 * For PCIe this means the delays in PCIe 5.0 section 6.6.1. For
4838 * conventional PCI it means Tpvrh + Trhfa specified in PCI 3.0 section
4839 * 4.3.2.
4840 *
4841 * Return 0 on success or -ENOTTY if the first device on the secondary bus
4842 * failed to become accessible.
4843 */
4844int pci_bridge_wait_for_secondary_bus(struct pci_dev *dev, char *reset_type)
4845{
4846	struct pci_dev *child __free(pci_dev_put) = NULL;
4847	int delay;
4848
4849	if (pci_dev_is_disconnected(dev))
4850		return 0;
4851
4852	if (!pci_is_bridge(dev))
4853		return 0;
4854
4855	down_read(&pci_bus_sem);
4856
4857	/*
4858	 * We only deal with devices that are present currently on the bus.
4859	 * For any hot-added devices the access delay is handled in pciehp
4860	 * board_added(). In case of ACPI hotplug the firmware is expected
4861	 * to configure the devices before OS is notified.
4862	 */
4863	if (!dev->subordinate || list_empty(&dev->subordinate->devices)) {
4864		up_read(&pci_bus_sem);
4865		return 0;
4866	}
4867
4868	/* Take d3cold_delay requirements into account */
4869	delay = pci_bus_max_d3cold_delay(dev->subordinate);
4870	if (!delay) {
4871		up_read(&pci_bus_sem);
4872		return 0;
4873	}
4874
4875	child = pci_dev_get(list_first_entry(&dev->subordinate->devices,
4876					     struct pci_dev, bus_list));
4877	up_read(&pci_bus_sem);
4878
4879	/*
4880	 * Conventional PCI and PCI-X we need to wait Tpvrh + Trhfa before
4881	 * accessing the device after reset (that is 1000 ms + 100 ms).
4882	 */
4883	if (!pci_is_pcie(dev)) {
4884		pci_dbg(dev, "waiting %d ms for secondary bus\n", 1000 + delay);
4885		msleep(1000 + delay);
4886		return 0;
4887	}
4888
4889	/*
4890	 * For PCIe downstream and root ports that do not support speeds
4891	 * greater than 5 GT/s need to wait minimum 100 ms. For higher
4892	 * speeds (gen3) we need to wait first for the data link layer to
4893	 * become active.
4894	 *
4895	 * However, 100 ms is the minimum and the PCIe spec says the
4896	 * software must allow at least 1s before it can determine that the
4897	 * device that did not respond is a broken device. Also device can
4898	 * take longer than that to respond if it indicates so through Request
4899	 * Retry Status completions.
4900	 *
4901	 * Therefore we wait for 100 ms and check for the device presence
4902	 * until the timeout expires.
4903	 */
4904	if (!pcie_downstream_port(dev))
4905		return 0;
4906
4907	if (pcie_get_speed_cap(dev) <= PCIE_SPEED_5_0GT) {
4908		u16 status;
4909
4910		pci_dbg(dev, "waiting %d ms for downstream link\n", delay);
4911		msleep(delay);
4912
4913		if (!pci_dev_wait(child, reset_type, PCI_RESET_WAIT - delay))
4914			return 0;
4915
4916		/*
4917		 * If the port supports active link reporting we now check
4918		 * whether the link is active and if not bail out early with
4919		 * the assumption that the device is not present anymore.
4920		 */
4921		if (!dev->link_active_reporting)
4922			return -ENOTTY;
4923
4924		pcie_capability_read_word(dev, PCI_EXP_LNKSTA, &status);
4925		if (!(status & PCI_EXP_LNKSTA_DLLLA))
4926			return -ENOTTY;
4927
4928		return pci_dev_wait(child, reset_type,
4929				    PCIE_RESET_READY_POLL_MS - PCI_RESET_WAIT);
4930	}
4931
4932	pci_dbg(dev, "waiting %d ms for downstream link, after activation\n",
4933		delay);
4934	if (!pcie_wait_for_link_delay(dev, true, delay)) {
4935		/* Did not train, no need to wait any further */
4936		pci_info(dev, "Data Link Layer Link Active not set in 1000 msec\n");
4937		return -ENOTTY;
4938	}
4939
4940	return pci_dev_wait(child, reset_type,
4941			    PCIE_RESET_READY_POLL_MS - delay);
4942}
4943
4944void pci_reset_secondary_bus(struct pci_dev *dev)
4945{
4946	u16 ctrl;
4947
4948	pci_read_config_word(dev, PCI_BRIDGE_CONTROL, &ctrl);
4949	ctrl |= PCI_BRIDGE_CTL_BUS_RESET;
4950	pci_write_config_word(dev, PCI_BRIDGE_CONTROL, ctrl);
4951
4952	/*
4953	 * PCI spec v3.0 7.6.4.2 requires minimum Trst of 1ms.  Double
4954	 * this to 2ms to ensure that we meet the minimum requirement.
4955	 */
4956	msleep(2);
4957
4958	ctrl &= ~PCI_BRIDGE_CTL_BUS_RESET;
4959	pci_write_config_word(dev, PCI_BRIDGE_CONTROL, ctrl);
4960}
4961
4962void __weak pcibios_reset_secondary_bus(struct pci_dev *dev)
4963{
4964	pci_reset_secondary_bus(dev);
4965}
4966
4967/**
4968 * pci_bridge_secondary_bus_reset - Reset the secondary bus on a PCI bridge.
4969 * @dev: Bridge device
4970 *
4971 * Use the bridge control register to assert reset on the secondary bus.
4972 * Devices on the secondary bus are left in power-on state.
4973 */
4974int pci_bridge_secondary_bus_reset(struct pci_dev *dev)
4975{
4976	if (!dev->block_cfg_access)
4977		pci_warn_once(dev, "unlocked secondary bus reset via: %pS\n",
4978			      __builtin_return_address(0));
4979	pcibios_reset_secondary_bus(dev);
4980
4981	return pci_bridge_wait_for_secondary_bus(dev, "bus reset");
4982}
4983EXPORT_SYMBOL_GPL(pci_bridge_secondary_bus_reset);
4984
4985static int pci_parent_bus_reset(struct pci_dev *dev, bool probe)
4986{
4987	struct pci_dev *pdev;
4988
4989	if (pci_is_root_bus(dev->bus) || dev->subordinate ||
4990	    !dev->bus->self || dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET)
4991		return -ENOTTY;
4992
4993	list_for_each_entry(pdev, &dev->bus->devices, bus_list)
4994		if (pdev != dev)
4995			return -ENOTTY;
4996
4997	if (probe)
4998		return 0;
4999
5000	return pci_bridge_secondary_bus_reset(dev->bus->self);
5001}
 
 
5002
5003static int pci_reset_hotplug_slot(struct hotplug_slot *hotplug, bool probe)
5004{
5005	int rc = -ENOTTY;
5006
5007	if (!hotplug || !try_module_get(hotplug->owner))
5008		return rc;
5009
5010	if (hotplug->ops->reset_slot)
5011		rc = hotplug->ops->reset_slot(hotplug, probe);
5012
5013	module_put(hotplug->owner);
5014
5015	return rc;
5016}
5017
5018static int pci_dev_reset_slot_function(struct pci_dev *dev, bool probe)
5019{
5020	if (dev->multifunction || dev->subordinate || !dev->slot ||
5021	    dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET)
5022		return -ENOTTY;
5023
5024	return pci_reset_hotplug_slot(dev->slot->hotplug, probe);
5025}
5026
5027static u16 cxl_port_dvsec(struct pci_dev *dev)
5028{
5029	return pci_find_dvsec_capability(dev, PCI_VENDOR_ID_CXL,
5030					 PCI_DVSEC_CXL_PORT);
5031}
5032
5033static bool cxl_sbr_masked(struct pci_dev *dev)
5034{
5035	u16 dvsec, reg;
5036	int rc;
5037
5038	dvsec = cxl_port_dvsec(dev);
5039	if (!dvsec)
5040		return false;
5041
5042	rc = pci_read_config_word(dev, dvsec + PCI_DVSEC_CXL_PORT_CTL, &reg);
5043	if (rc || PCI_POSSIBLE_ERROR(reg))
5044		return false;
5045
5046	/*
5047	 * Per CXL spec r3.1, sec 8.1.5.2, when "Unmask SBR" is 0, the SBR
5048	 * bit in Bridge Control has no effect.  When 1, the Port generates
5049	 * hot reset when the SBR bit is set to 1.
5050	 */
5051	if (reg & PCI_DVSEC_CXL_PORT_CTL_UNMASK_SBR)
5052		return false;
5053
5054	return true;
5055}
5056
5057static int pci_reset_bus_function(struct pci_dev *dev, bool probe)
5058{
5059	struct pci_dev *bridge = pci_upstream_bridge(dev);
5060	int rc;
5061
5062	/*
5063	 * If "dev" is below a CXL port that has SBR control masked, SBR
5064	 * won't do anything, so return error.
5065	 */
5066	if (bridge && cxl_sbr_masked(bridge)) {
5067		if (probe)
5068			return 0;
5069
5070		return -ENOTTY;
5071	}
5072
5073	rc = pci_dev_reset_slot_function(dev, probe);
5074	if (rc != -ENOTTY)
5075		return rc;
5076	return pci_parent_bus_reset(dev, probe);
5077}
5078
5079static int cxl_reset_bus_function(struct pci_dev *dev, bool probe)
5080{
5081	struct pci_dev *bridge;
5082	u16 dvsec, reg, val;
5083	int rc;
5084
5085	bridge = pci_upstream_bridge(dev);
5086	if (!bridge)
5087		return -ENOTTY;
5088
5089	dvsec = cxl_port_dvsec(bridge);
5090	if (!dvsec)
5091		return -ENOTTY;
5092
5093	if (probe)
5094		return 0;
5095
5096	rc = pci_read_config_word(bridge, dvsec + PCI_DVSEC_CXL_PORT_CTL, &reg);
5097	if (rc)
5098		return -ENOTTY;
5099
5100	if (reg & PCI_DVSEC_CXL_PORT_CTL_UNMASK_SBR) {
5101		val = reg;
5102	} else {
5103		val = reg | PCI_DVSEC_CXL_PORT_CTL_UNMASK_SBR;
5104		pci_write_config_word(bridge, dvsec + PCI_DVSEC_CXL_PORT_CTL,
5105				      val);
5106	}
5107
5108	rc = pci_reset_bus_function(dev, probe);
5109
5110	if (reg != val)
5111		pci_write_config_word(bridge, dvsec + PCI_DVSEC_CXL_PORT_CTL,
5112				      reg);
5113
5114	return rc;
5115}
5116
5117void pci_dev_lock(struct pci_dev *dev)
5118{
5119	/* block PM suspend, driver probe, etc. */
5120	device_lock(&dev->dev);
5121	pci_cfg_access_lock(dev);
5122}
5123EXPORT_SYMBOL_GPL(pci_dev_lock);
5124
5125/* Return 1 on successful lock, 0 on contention */
5126int pci_dev_trylock(struct pci_dev *dev)
5127{
5128	if (device_trylock(&dev->dev)) {
5129		if (pci_cfg_access_trylock(dev))
5130			return 1;
5131		device_unlock(&dev->dev);
5132	}
5133
5134	return 0;
5135}
5136EXPORT_SYMBOL_GPL(pci_dev_trylock);
5137
5138void pci_dev_unlock(struct pci_dev *dev)
5139{
5140	pci_cfg_access_unlock(dev);
5141	device_unlock(&dev->dev);
5142}
5143EXPORT_SYMBOL_GPL(pci_dev_unlock);
5144
5145static void pci_dev_save_and_disable(struct pci_dev *dev)
5146{
5147	const struct pci_error_handlers *err_handler =
5148			dev->driver ? dev->driver->err_handler : NULL;
5149
5150	/*
5151	 * dev->driver->err_handler->reset_prepare() is protected against
5152	 * races with ->remove() by the device lock, which must be held by
5153	 * the caller.
5154	 */
5155	if (err_handler && err_handler->reset_prepare)
5156		err_handler->reset_prepare(dev);
5157	else if (dev->driver)
5158		pci_warn(dev, "resetting");
5159
5160	/*
5161	 * Wake-up device prior to save.  PM registers default to D0 after
5162	 * reset and a simple register restore doesn't reliably return
5163	 * to a non-D0 state anyway.
5164	 */
5165	pci_set_power_state(dev, PCI_D0);
5166
5167	pci_save_state(dev);
5168	/*
5169	 * Disable the device by clearing the Command register, except for
5170	 * INTx-disable which is set.  This not only disables MMIO and I/O port
5171	 * BARs, but also prevents the device from being Bus Master, preventing
5172	 * DMA from the device including MSI/MSI-X interrupts.  For PCI 2.3
5173	 * compliant devices, INTx-disable prevents legacy interrupts.
5174	 */
5175	pci_write_config_word(dev, PCI_COMMAND, PCI_COMMAND_INTX_DISABLE);
5176}
5177
5178static void pci_dev_restore(struct pci_dev *dev)
5179{
5180	const struct pci_error_handlers *err_handler =
5181			dev->driver ? dev->driver->err_handler : NULL;
5182
5183	pci_restore_state(dev);
5184
5185	/*
5186	 * dev->driver->err_handler->reset_done() is protected against
5187	 * races with ->remove() by the device lock, which must be held by
5188	 * the caller.
5189	 */
5190	if (err_handler && err_handler->reset_done)
5191		err_handler->reset_done(dev);
5192	else if (dev->driver)
5193		pci_warn(dev, "reset done");
5194}
5195
5196/* dev->reset_methods[] is a 0-terminated list of indices into this array */
5197static const struct pci_reset_fn_method pci_reset_fn_methods[] = {
5198	{ },
5199	{ pci_dev_specific_reset, .name = "device_specific" },
5200	{ pci_dev_acpi_reset, .name = "acpi" },
5201	{ pcie_reset_flr, .name = "flr" },
5202	{ pci_af_flr, .name = "af_flr" },
5203	{ pci_pm_reset, .name = "pm" },
5204	{ pci_reset_bus_function, .name = "bus" },
5205	{ cxl_reset_bus_function, .name = "cxl_bus" },
5206};
5207
5208static ssize_t reset_method_show(struct device *dev,
5209				 struct device_attribute *attr, char *buf)
5210{
5211	struct pci_dev *pdev = to_pci_dev(dev);
5212	ssize_t len = 0;
5213	int i, m;
5214
5215	for (i = 0; i < PCI_NUM_RESET_METHODS; i++) {
5216		m = pdev->reset_methods[i];
5217		if (!m)
5218			break;
5219
5220		len += sysfs_emit_at(buf, len, "%s%s", len ? " " : "",
5221				     pci_reset_fn_methods[m].name);
5222	}
5223
5224	if (len)
5225		len += sysfs_emit_at(buf, len, "\n");
5226
5227	return len;
5228}
5229
5230static int reset_method_lookup(const char *name)
5231{
5232	int m;
5233
5234	for (m = 1; m < PCI_NUM_RESET_METHODS; m++) {
5235		if (sysfs_streq(name, pci_reset_fn_methods[m].name))
5236			return m;
5237	}
5238
5239	return 0;	/* not found */
5240}
5241
5242static ssize_t reset_method_store(struct device *dev,
5243				  struct device_attribute *attr,
5244				  const char *buf, size_t count)
5245{
5246	struct pci_dev *pdev = to_pci_dev(dev);
5247	char *options, *tmp_options, *name;
5248	int m, n;
5249	u8 reset_methods[PCI_NUM_RESET_METHODS] = { 0 };
5250
5251	if (sysfs_streq(buf, "")) {
5252		pdev->reset_methods[0] = 0;
5253		pci_warn(pdev, "All device reset methods disabled by user");
5254		return count;
5255	}
5256
5257	if (sysfs_streq(buf, "default")) {
5258		pci_init_reset_methods(pdev);
5259		return count;
5260	}
5261
5262	options = kstrndup(buf, count, GFP_KERNEL);
5263	if (!options)
5264		return -ENOMEM;
5265
5266	n = 0;
5267	tmp_options = options;
5268	while ((name = strsep(&tmp_options, " ")) != NULL) {
5269		if (sysfs_streq(name, ""))
5270			continue;
5271
5272		name = strim(name);
5273
5274		m = reset_method_lookup(name);
5275		if (!m) {
5276			pci_err(pdev, "Invalid reset method '%s'", name);
5277			goto error;
5278		}
5279
5280		if (pci_reset_fn_methods[m].reset_fn(pdev, PCI_RESET_PROBE)) {
5281			pci_err(pdev, "Unsupported reset method '%s'", name);
5282			goto error;
5283		}
5284
5285		if (n == PCI_NUM_RESET_METHODS - 1) {
5286			pci_err(pdev, "Too many reset methods\n");
5287			goto error;
5288		}
5289
5290		reset_methods[n++] = m;
5291	}
5292
5293	reset_methods[n] = 0;
5294
5295	/* Warn if dev-specific supported but not highest priority */
5296	if (pci_reset_fn_methods[1].reset_fn(pdev, PCI_RESET_PROBE) == 0 &&
5297	    reset_methods[0] != 1)
5298		pci_warn(pdev, "Device-specific reset disabled/de-prioritized by user");
5299	memcpy(pdev->reset_methods, reset_methods, sizeof(pdev->reset_methods));
5300	kfree(options);
5301	return count;
5302
5303error:
5304	/* Leave previous methods unchanged */
5305	kfree(options);
5306	return -EINVAL;
5307}
5308static DEVICE_ATTR_RW(reset_method);
5309
5310static struct attribute *pci_dev_reset_method_attrs[] = {
5311	&dev_attr_reset_method.attr,
5312	NULL,
5313};
5314
5315static umode_t pci_dev_reset_method_attr_is_visible(struct kobject *kobj,
5316						    struct attribute *a, int n)
5317{
5318	struct pci_dev *pdev = to_pci_dev(kobj_to_dev(kobj));
5319
5320	if (!pci_reset_supported(pdev))
5321		return 0;
5322
5323	return a->mode;
5324}
5325
5326const struct attribute_group pci_dev_reset_method_attr_group = {
5327	.attrs = pci_dev_reset_method_attrs,
5328	.is_visible = pci_dev_reset_method_attr_is_visible,
5329};
5330
5331/**
5332 * __pci_reset_function_locked - reset a PCI device function while holding
5333 * the @dev mutex lock.
5334 * @dev: PCI device to reset
5335 *
5336 * Some devices allow an individual function to be reset without affecting
5337 * other functions in the same device.  The PCI device must be responsive
5338 * to PCI config space in order to use this function.
5339 *
5340 * The device function is presumed to be unused and the caller is holding
5341 * the device mutex lock when this function is called.
5342 *
5343 * Resetting the device will make the contents of PCI configuration space
5344 * random, so any caller of this must be prepared to reinitialise the
5345 * device including MSI, bus mastering, BARs, decoding IO and memory spaces,
5346 * etc.
5347 *
5348 * Returns 0 if the device function was successfully reset or negative if the
5349 * device doesn't support resetting a single function.
5350 */
5351int __pci_reset_function_locked(struct pci_dev *dev)
5352{
5353	int i, m, rc;
5354
5355	might_sleep();
5356
5357	/*
5358	 * A reset method returns -ENOTTY if it doesn't support this device and
5359	 * we should try the next method.
5360	 *
5361	 * If it returns 0 (success), we're finished.  If it returns any other
5362	 * error, we're also finished: this indicates that further reset
5363	 * mechanisms might be broken on the device.
5364	 */
5365	for (i = 0; i < PCI_NUM_RESET_METHODS; i++) {
5366		m = dev->reset_methods[i];
5367		if (!m)
5368			return -ENOTTY;
5369
5370		rc = pci_reset_fn_methods[m].reset_fn(dev, PCI_RESET_DO_RESET);
5371		if (!rc)
5372			return 0;
5373		if (rc != -ENOTTY)
5374			return rc;
5375	}
5376
5377	return -ENOTTY;
5378}
5379EXPORT_SYMBOL_GPL(__pci_reset_function_locked);
5380
5381/**
5382 * pci_init_reset_methods - check whether device can be safely reset
5383 * and store supported reset mechanisms.
5384 * @dev: PCI device to check for reset mechanisms
5385 *
5386 * Some devices allow an individual function to be reset without affecting
5387 * other functions in the same device.  The PCI device must be in D0-D3hot
5388 * state.
5389 *
5390 * Stores reset mechanisms supported by device in reset_methods byte array
5391 * which is a member of struct pci_dev.
5392 */
5393void pci_init_reset_methods(struct pci_dev *dev)
5394{
5395	int m, i, rc;
5396
5397	BUILD_BUG_ON(ARRAY_SIZE(pci_reset_fn_methods) != PCI_NUM_RESET_METHODS);
5398
5399	might_sleep();
5400
5401	i = 0;
5402	for (m = 1; m < PCI_NUM_RESET_METHODS; m++) {
5403		rc = pci_reset_fn_methods[m].reset_fn(dev, PCI_RESET_PROBE);
5404		if (!rc)
5405			dev->reset_methods[i++] = m;
5406		else if (rc != -ENOTTY)
5407			break;
5408	}
5409
5410	dev->reset_methods[i] = 0;
5411}
 
5412
5413/**
5414 * pci_reset_function - quiesce and reset a PCI device function
5415 * @dev: PCI device to reset
5416 *
5417 * Some devices allow an individual function to be reset without affecting
5418 * other functions in the same device.  The PCI device must be responsive
5419 * to PCI config space in order to use this function.
5420 *
5421 * This function does not just reset the PCI portion of a device, but
5422 * clears all the state associated with the device.  This function differs
5423 * from __pci_reset_function_locked() in that it saves and restores device state
5424 * over the reset and takes the PCI device lock.
5425 *
5426 * Returns 0 if the device function was successfully reset or negative if the
5427 * device doesn't support resetting a single function.
5428 */
5429int pci_reset_function(struct pci_dev *dev)
5430{
5431	struct pci_dev *bridge;
5432	int rc;
5433
5434	if (!pci_reset_supported(dev))
5435		return -ENOTTY;
5436
5437	/*
5438	 * If there's no upstream bridge, no locking is needed since there is
5439	 * no upstream bridge configuration to hold consistent.
5440	 */
5441	bridge = pci_upstream_bridge(dev);
5442	if (bridge)
5443		pci_dev_lock(bridge);
5444
5445	pci_dev_lock(dev);
5446	pci_dev_save_and_disable(dev);
5447
5448	rc = __pci_reset_function_locked(dev);
5449
5450	pci_dev_restore(dev);
5451	pci_dev_unlock(dev);
5452
5453	if (bridge)
5454		pci_dev_unlock(bridge);
5455
5456	return rc;
5457}
5458EXPORT_SYMBOL_GPL(pci_reset_function);
5459
5460/**
5461 * pci_reset_function_locked - quiesce and reset a PCI device function
5462 * @dev: PCI device to reset
5463 *
5464 * Some devices allow an individual function to be reset without affecting
5465 * other functions in the same device.  The PCI device must be responsive
5466 * to PCI config space in order to use this function.
5467 *
5468 * This function does not just reset the PCI portion of a device, but
5469 * clears all the state associated with the device.  This function differs
5470 * from __pci_reset_function_locked() in that it saves and restores device state
5471 * over the reset.  It also differs from pci_reset_function() in that it
5472 * requires the PCI device lock to be held.
5473 *
5474 * Returns 0 if the device function was successfully reset or negative if the
5475 * device doesn't support resetting a single function.
5476 */
5477int pci_reset_function_locked(struct pci_dev *dev)
5478{
5479	int rc;
5480
5481	if (!pci_reset_supported(dev))
5482		return -ENOTTY;
5483
5484	pci_dev_save_and_disable(dev);
5485
5486	rc = __pci_reset_function_locked(dev);
5487
5488	pci_dev_restore(dev);
5489
5490	return rc;
5491}
5492EXPORT_SYMBOL_GPL(pci_reset_function_locked);
5493
5494/**
5495 * pci_try_reset_function - quiesce and reset a PCI device function
5496 * @dev: PCI device to reset
5497 *
5498 * Same as above, except return -EAGAIN if unable to lock device.
5499 */
5500int pci_try_reset_function(struct pci_dev *dev)
5501{
5502	int rc;
5503
5504	if (!pci_reset_supported(dev))
5505		return -ENOTTY;
5506
5507	if (!pci_dev_trylock(dev))
5508		return -EAGAIN;
5509
5510	pci_dev_save_and_disable(dev);
5511	rc = __pci_reset_function_locked(dev);
5512	pci_dev_restore(dev);
5513	pci_dev_unlock(dev);
5514
5515	return rc;
5516}
5517EXPORT_SYMBOL_GPL(pci_try_reset_function);
5518
5519/* Do any devices on or below this bus prevent a bus reset? */
5520static bool pci_bus_resettable(struct pci_bus *bus)
5521{
5522	struct pci_dev *dev;
5523
5524
5525	if (bus->self && (bus->self->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET))
5526		return false;
5527
5528	list_for_each_entry(dev, &bus->devices, bus_list) {
5529		if (dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET ||
5530		    (dev->subordinate && !pci_bus_resettable(dev->subordinate)))
5531			return false;
5532	}
5533
5534	return true;
5535}
5536
5537/* Lock devices from the top of the tree down */
5538static void pci_bus_lock(struct pci_bus *bus)
5539{
5540	struct pci_dev *dev;
5541
5542	pci_dev_lock(bus->self);
5543	list_for_each_entry(dev, &bus->devices, bus_list) {
5544		if (dev->subordinate)
5545			pci_bus_lock(dev->subordinate);
5546		else
5547			pci_dev_lock(dev);
5548	}
5549}
5550
5551/* Unlock devices from the bottom of the tree up */
5552static void pci_bus_unlock(struct pci_bus *bus)
5553{
5554	struct pci_dev *dev;
5555
5556	list_for_each_entry(dev, &bus->devices, bus_list) {
5557		if (dev->subordinate)
5558			pci_bus_unlock(dev->subordinate);
5559		else
5560			pci_dev_unlock(dev);
5561	}
5562	pci_dev_unlock(bus->self);
5563}
5564
5565/* Return 1 on successful lock, 0 on contention */
5566static int pci_bus_trylock(struct pci_bus *bus)
5567{
5568	struct pci_dev *dev;
5569
5570	if (!pci_dev_trylock(bus->self))
5571		return 0;
5572
5573	list_for_each_entry(dev, &bus->devices, bus_list) {
5574		if (dev->subordinate) {
5575			if (!pci_bus_trylock(dev->subordinate))
5576				goto unlock;
5577		} else if (!pci_dev_trylock(dev))
5578			goto unlock;
5579	}
5580	return 1;
5581
5582unlock:
5583	list_for_each_entry_continue_reverse(dev, &bus->devices, bus_list) {
5584		if (dev->subordinate)
5585			pci_bus_unlock(dev->subordinate);
5586		else
5587			pci_dev_unlock(dev);
5588	}
5589	pci_dev_unlock(bus->self);
5590	return 0;
5591}
5592
5593/* Do any devices on or below this slot prevent a bus reset? */
5594static bool pci_slot_resettable(struct pci_slot *slot)
5595{
5596	struct pci_dev *dev;
5597
5598	if (slot->bus->self &&
5599	    (slot->bus->self->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET))
5600		return false;
5601
5602	list_for_each_entry(dev, &slot->bus->devices, bus_list) {
5603		if (!dev->slot || dev->slot != slot)
5604			continue;
5605		if (dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET ||
5606		    (dev->subordinate && !pci_bus_resettable(dev->subordinate)))
5607			return false;
5608	}
5609
5610	return true;
5611}
5612
5613/* Lock devices from the top of the tree down */
5614static void pci_slot_lock(struct pci_slot *slot)
5615{
5616	struct pci_dev *dev;
5617
5618	list_for_each_entry(dev, &slot->bus->devices, bus_list) {
5619		if (!dev->slot || dev->slot != slot)
5620			continue;
5621		if (dev->subordinate)
5622			pci_bus_lock(dev->subordinate);
5623		else
5624			pci_dev_lock(dev);
5625	}
5626}
5627
5628/* Unlock devices from the bottom of the tree up */
5629static void pci_slot_unlock(struct pci_slot *slot)
5630{
5631	struct pci_dev *dev;
5632
5633	list_for_each_entry(dev, &slot->bus->devices, bus_list) {
5634		if (!dev->slot || dev->slot != slot)
5635			continue;
5636		if (dev->subordinate)
5637			pci_bus_unlock(dev->subordinate);
5638		pci_dev_unlock(dev);
5639	}
5640}
5641
5642/* Return 1 on successful lock, 0 on contention */
5643static int pci_slot_trylock(struct pci_slot *slot)
5644{
5645	struct pci_dev *dev;
5646
5647	list_for_each_entry(dev, &slot->bus->devices, bus_list) {
5648		if (!dev->slot || dev->slot != slot)
5649			continue;
5650		if (dev->subordinate) {
5651			if (!pci_bus_trylock(dev->subordinate)) {
5652				pci_dev_unlock(dev);
5653				goto unlock;
5654			}
5655		} else if (!pci_dev_trylock(dev))
5656			goto unlock;
5657	}
5658	return 1;
5659
5660unlock:
5661	list_for_each_entry_continue_reverse(dev,
5662					     &slot->bus->devices, bus_list) {
5663		if (!dev->slot || dev->slot != slot)
5664			continue;
5665		if (dev->subordinate)
5666			pci_bus_unlock(dev->subordinate);
5667		else
5668			pci_dev_unlock(dev);
5669	}
5670	return 0;
5671}
5672
5673/*
5674 * Save and disable devices from the top of the tree down while holding
5675 * the @dev mutex lock for the entire tree.
5676 */
5677static void pci_bus_save_and_disable_locked(struct pci_bus *bus)
5678{
5679	struct pci_dev *dev;
5680
5681	list_for_each_entry(dev, &bus->devices, bus_list) {
5682		pci_dev_save_and_disable(dev);
5683		if (dev->subordinate)
5684			pci_bus_save_and_disable_locked(dev->subordinate);
5685	}
5686}
5687
5688/*
5689 * Restore devices from top of the tree down while holding @dev mutex lock
5690 * for the entire tree.  Parent bridges need to be restored before we can
5691 * get to subordinate devices.
5692 */
5693static void pci_bus_restore_locked(struct pci_bus *bus)
5694{
5695	struct pci_dev *dev;
5696
5697	list_for_each_entry(dev, &bus->devices, bus_list) {
5698		pci_dev_restore(dev);
5699		if (dev->subordinate) {
5700			pci_bridge_wait_for_secondary_bus(dev, "bus reset");
5701			pci_bus_restore_locked(dev->subordinate);
5702		}
5703	}
5704}
5705
5706/*
5707 * Save and disable devices from the top of the tree down while holding
5708 * the @dev mutex lock for the entire tree.
5709 */
5710static void pci_slot_save_and_disable_locked(struct pci_slot *slot)
5711{
5712	struct pci_dev *dev;
5713
5714	list_for_each_entry(dev, &slot->bus->devices, bus_list) {
5715		if (!dev->slot || dev->slot != slot)
5716			continue;
5717		pci_dev_save_and_disable(dev);
5718		if (dev->subordinate)
5719			pci_bus_save_and_disable_locked(dev->subordinate);
5720	}
5721}
5722
5723/*
5724 * Restore devices from top of the tree down while holding @dev mutex lock
5725 * for the entire tree.  Parent bridges need to be restored before we can
5726 * get to subordinate devices.
5727 */
5728static void pci_slot_restore_locked(struct pci_slot *slot)
5729{
5730	struct pci_dev *dev;
5731
5732	list_for_each_entry(dev, &slot->bus->devices, bus_list) {
5733		if (!dev->slot || dev->slot != slot)
5734			continue;
5735		pci_dev_restore(dev);
5736		if (dev->subordinate) {
5737			pci_bridge_wait_for_secondary_bus(dev, "slot reset");
5738			pci_bus_restore_locked(dev->subordinate);
5739		}
5740	}
5741}
5742
5743static int pci_slot_reset(struct pci_slot *slot, bool probe)
5744{
5745	int rc;
5746
5747	if (!slot || !pci_slot_resettable(slot))
5748		return -ENOTTY;
5749
5750	if (!probe)
5751		pci_slot_lock(slot);
5752
5753	might_sleep();
5754
5755	rc = pci_reset_hotplug_slot(slot->hotplug, probe);
5756
5757	if (!probe)
5758		pci_slot_unlock(slot);
5759
5760	return rc;
5761}
5762
5763/**
5764 * pci_probe_reset_slot - probe whether a PCI slot can be reset
5765 * @slot: PCI slot to probe
5766 *
5767 * Return 0 if slot can be reset, negative if a slot reset is not supported.
5768 */
5769int pci_probe_reset_slot(struct pci_slot *slot)
5770{
5771	return pci_slot_reset(slot, PCI_RESET_PROBE);
5772}
5773EXPORT_SYMBOL_GPL(pci_probe_reset_slot);
5774
5775/**
5776 * __pci_reset_slot - Try to reset a PCI slot
5777 * @slot: PCI slot to reset
5778 *
5779 * A PCI bus may host multiple slots, each slot may support a reset mechanism
5780 * independent of other slots.  For instance, some slots may support slot power
5781 * control.  In the case of a 1:1 bus to slot architecture, this function may
5782 * wrap the bus reset to avoid spurious slot related events such as hotplug.
5783 * Generally a slot reset should be attempted before a bus reset.  All of the
5784 * function of the slot and any subordinate buses behind the slot are reset
5785 * through this function.  PCI config space of all devices in the slot and
5786 * behind the slot is saved before and restored after reset.
5787 *
5788 * Same as above except return -EAGAIN if the slot cannot be locked
5789 */
5790static int __pci_reset_slot(struct pci_slot *slot)
5791{
5792	int rc;
5793
5794	rc = pci_slot_reset(slot, PCI_RESET_PROBE);
5795	if (rc)
5796		return rc;
5797
5798	if (pci_slot_trylock(slot)) {
5799		pci_slot_save_and_disable_locked(slot);
5800		might_sleep();
5801		rc = pci_reset_hotplug_slot(slot->hotplug, PCI_RESET_DO_RESET);
5802		pci_slot_restore_locked(slot);
5803		pci_slot_unlock(slot);
5804	} else
5805		rc = -EAGAIN;
5806
5807	return rc;
5808}
 
 
 
5809
5810static int pci_bus_reset(struct pci_bus *bus, bool probe)
5811{
5812	int ret;
5813
5814	if (!bus->self || !pci_bus_resettable(bus))
5815		return -ENOTTY;
5816
5817	if (probe)
5818		return 0;
5819
5820	pci_bus_lock(bus);
5821
5822	might_sleep();
5823
5824	ret = pci_bridge_secondary_bus_reset(bus->self);
5825
5826	pci_bus_unlock(bus);
5827
5828	return ret;
5829}
5830
5831/**
5832 * pci_bus_error_reset - reset the bridge's subordinate bus
5833 * @bridge: The parent device that connects to the bus to reset
5834 *
5835 * This function will first try to reset the slots on this bus if the method is
5836 * available. If slot reset fails or is not available, this will fall back to a
5837 * secondary bus reset.
5838 */
5839int pci_bus_error_reset(struct pci_dev *bridge)
5840{
5841	struct pci_bus *bus = bridge->subordinate;
5842	struct pci_slot *slot;
5843
5844	if (!bus)
5845		return -ENOTTY;
5846
5847	mutex_lock(&pci_slot_mutex);
5848	if (list_empty(&bus->slots))
5849		goto bus_reset;
5850
5851	list_for_each_entry(slot, &bus->slots, list)
5852		if (pci_probe_reset_slot(slot))
5853			goto bus_reset;
5854
5855	list_for_each_entry(slot, &bus->slots, list)
5856		if (pci_slot_reset(slot, PCI_RESET_DO_RESET))
5857			goto bus_reset;
5858
5859	mutex_unlock(&pci_slot_mutex);
5860	return 0;
5861bus_reset:
5862	mutex_unlock(&pci_slot_mutex);
5863	return pci_bus_reset(bridge->subordinate, PCI_RESET_DO_RESET);
5864}
5865
5866/**
5867 * pci_probe_reset_bus - probe whether a PCI bus can be reset
5868 * @bus: PCI bus to probe
5869 *
5870 * Return 0 if bus can be reset, negative if a bus reset is not supported.
5871 */
5872int pci_probe_reset_bus(struct pci_bus *bus)
5873{
5874	return pci_bus_reset(bus, PCI_RESET_PROBE);
5875}
5876EXPORT_SYMBOL_GPL(pci_probe_reset_bus);
5877
5878/**
5879 * __pci_reset_bus - Try to reset a PCI bus
5880 * @bus: top level PCI bus to reset
5881 *
5882 * Same as above except return -EAGAIN if the bus cannot be locked
5883 */
5884int __pci_reset_bus(struct pci_bus *bus)
5885{
5886	int rc;
5887
5888	rc = pci_bus_reset(bus, PCI_RESET_PROBE);
5889	if (rc)
5890		return rc;
5891
5892	if (pci_bus_trylock(bus)) {
5893		pci_bus_save_and_disable_locked(bus);
5894		might_sleep();
5895		rc = pci_bridge_secondary_bus_reset(bus->self);
5896		pci_bus_restore_locked(bus);
5897		pci_bus_unlock(bus);
5898	} else
5899		rc = -EAGAIN;
5900
5901	return rc;
5902}
5903
5904/**
5905 * pci_reset_bus - Try to reset a PCI bus
5906 * @pdev: top level PCI device to reset via slot/bus
5907 *
5908 * Same as above except return -EAGAIN if the bus cannot be locked
5909 */
5910int pci_reset_bus(struct pci_dev *pdev)
5911{
5912	return (!pci_probe_reset_slot(pdev->slot)) ?
5913	    __pci_reset_slot(pdev->slot) : __pci_reset_bus(pdev->bus);
5914}
5915EXPORT_SYMBOL_GPL(pci_reset_bus);
5916
5917/**
5918 * pcix_get_max_mmrbc - get PCI-X maximum designed memory read byte count
5919 * @dev: PCI device to query
5920 *
5921 * Returns mmrbc: maximum designed memory read count in bytes or
5922 * appropriate error value.
5923 */
5924int pcix_get_max_mmrbc(struct pci_dev *dev)
5925{
5926	int cap;
5927	u32 stat;
5928
5929	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
5930	if (!cap)
5931		return -EINVAL;
5932
5933	if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat))
5934		return -EINVAL;
5935
5936	return 512 << FIELD_GET(PCI_X_STATUS_MAX_READ, stat);
5937}
5938EXPORT_SYMBOL(pcix_get_max_mmrbc);
5939
5940/**
5941 * pcix_get_mmrbc - get PCI-X maximum memory read byte count
5942 * @dev: PCI device to query
5943 *
5944 * Returns mmrbc: maximum memory read count in bytes or appropriate error
5945 * value.
5946 */
5947int pcix_get_mmrbc(struct pci_dev *dev)
5948{
5949	int cap;
5950	u16 cmd;
5951
5952	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
5953	if (!cap)
5954		return -EINVAL;
5955
5956	if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd))
5957		return -EINVAL;
5958
5959	return 512 << FIELD_GET(PCI_X_CMD_MAX_READ, cmd);
5960}
5961EXPORT_SYMBOL(pcix_get_mmrbc);
5962
5963/**
5964 * pcix_set_mmrbc - set PCI-X maximum memory read byte count
5965 * @dev: PCI device to query
5966 * @mmrbc: maximum memory read count in bytes
5967 *    valid values are 512, 1024, 2048, 4096
5968 *
5969 * If possible sets maximum memory read byte count, some bridges have errata
5970 * that prevent this.
5971 */
5972int pcix_set_mmrbc(struct pci_dev *dev, int mmrbc)
5973{
5974	int cap;
5975	u32 stat, v, o;
5976	u16 cmd;
5977
5978	if (mmrbc < 512 || mmrbc > 4096 || !is_power_of_2(mmrbc))
5979		return -EINVAL;
5980
5981	v = ffs(mmrbc) - 10;
5982
5983	cap = pci_find_capability(dev, PCI_CAP_ID_PCIX);
5984	if (!cap)
5985		return -EINVAL;
5986
5987	if (pci_read_config_dword(dev, cap + PCI_X_STATUS, &stat))
5988		return -EINVAL;
5989
5990	if (v > FIELD_GET(PCI_X_STATUS_MAX_READ, stat))
5991		return -E2BIG;
5992
5993	if (pci_read_config_word(dev, cap + PCI_X_CMD, &cmd))
5994		return -EINVAL;
5995
5996	o = FIELD_GET(PCI_X_CMD_MAX_READ, cmd);
5997	if (o != v) {
5998		if (v > o && (dev->bus->bus_flags & PCI_BUS_FLAGS_NO_MMRBC))
 
5999			return -EIO;
6000
6001		cmd &= ~PCI_X_CMD_MAX_READ;
6002		cmd |= FIELD_PREP(PCI_X_CMD_MAX_READ, v);
6003		if (pci_write_config_word(dev, cap + PCI_X_CMD, cmd))
6004			return -EIO;
6005	}
6006	return 0;
6007}
6008EXPORT_SYMBOL(pcix_set_mmrbc);
6009
6010/**
6011 * pcie_get_readrq - get PCI Express read request size
6012 * @dev: PCI device to query
6013 *
6014 * Returns maximum memory read request in bytes or appropriate error value.
 
6015 */
6016int pcie_get_readrq(struct pci_dev *dev)
6017{
 
6018	u16 ctl;
6019
6020	pcie_capability_read_word(dev, PCI_EXP_DEVCTL, &ctl);
 
 
 
 
 
 
6021
6022	return 128 << FIELD_GET(PCI_EXP_DEVCTL_READRQ, ctl);
6023}
6024EXPORT_SYMBOL(pcie_get_readrq);
6025
6026/**
6027 * pcie_set_readrq - set PCI Express maximum memory read request
6028 * @dev: PCI device to query
6029 * @rq: maximum memory read count in bytes
6030 *    valid values are 128, 256, 512, 1024, 2048, 4096
6031 *
6032 * If possible sets maximum memory read request in bytes
6033 */
6034int pcie_set_readrq(struct pci_dev *dev, int rq)
6035{
6036	u16 v;
6037	int ret;
6038	struct pci_host_bridge *bridge = pci_find_host_bridge(dev->bus);
6039
6040	if (rq < 128 || rq > 4096 || !is_power_of_2(rq))
6041		return -EINVAL;
6042
6043	/*
6044	 * If using the "performance" PCIe config, we clamp the read rq
6045	 * size to the max packet size to keep the host bridge from
6046	 * generating requests larger than we can cope with.
6047	 */
6048	if (pcie_bus_config == PCIE_BUS_PERFORMANCE) {
6049		int mps = pcie_get_mps(dev);
6050
6051		if (mps < rq)
6052			rq = mps;
6053	}
6054
6055	v = FIELD_PREP(PCI_EXP_DEVCTL_READRQ, ffs(rq) - 8);
 
 
6056
6057	if (bridge->no_inc_mrrs) {
6058		int max_mrrs = pcie_get_readrq(dev);
6059
6060		if (rq > max_mrrs) {
6061			pci_info(dev, "can't set Max_Read_Request_Size to %d; max is %d\n", rq, max_mrrs);
6062			return -EINVAL;
6063		}
6064	}
6065
6066	ret = pcie_capability_clear_and_set_word(dev, PCI_EXP_DEVCTL,
6067						  PCI_EXP_DEVCTL_READRQ, v);
6068
6069	return pcibios_err_to_errno(ret);
6070}
6071EXPORT_SYMBOL(pcie_set_readrq);
6072
6073/**
6074 * pcie_get_mps - get PCI Express maximum payload size
6075 * @dev: PCI device to query
6076 *
6077 * Returns maximum payload size in bytes
 
6078 */
6079int pcie_get_mps(struct pci_dev *dev)
6080{
 
6081	u16 ctl;
6082
6083	pcie_capability_read_word(dev, PCI_EXP_DEVCTL, &ctl);
 
 
 
 
 
 
6084
6085	return 128 << FIELD_GET(PCI_EXP_DEVCTL_PAYLOAD, ctl);
6086}
6087EXPORT_SYMBOL(pcie_get_mps);
6088
6089/**
6090 * pcie_set_mps - set PCI Express maximum payload size
6091 * @dev: PCI device to query
6092 * @mps: maximum payload size in bytes
6093 *    valid values are 128, 256, 512, 1024, 2048, 4096
6094 *
6095 * If possible sets maximum payload size
6096 */
6097int pcie_set_mps(struct pci_dev *dev, int mps)
6098{
6099	u16 v;
6100	int ret;
6101
6102	if (mps < 128 || mps > 4096 || !is_power_of_2(mps))
6103		return -EINVAL;
6104
6105	v = ffs(mps) - 8;
6106	if (v > dev->pcie_mpss)
6107		return -EINVAL;
6108	v = FIELD_PREP(PCI_EXP_DEVCTL_PAYLOAD, v);
6109
6110	ret = pcie_capability_clear_and_set_word(dev, PCI_EXP_DEVCTL,
6111						  PCI_EXP_DEVCTL_PAYLOAD, v);
 
6112
6113	return pcibios_err_to_errno(ret);
6114}
6115EXPORT_SYMBOL(pcie_set_mps);
6116
6117static enum pci_bus_speed to_pcie_link_speed(u16 lnksta)
6118{
6119	return pcie_link_speed[FIELD_GET(PCI_EXP_LNKSTA_CLS, lnksta)];
6120}
6121
6122int pcie_link_speed_mbps(struct pci_dev *pdev)
6123{
6124	u16 lnksta;
6125	int err;
6126
6127	err = pcie_capability_read_word(pdev, PCI_EXP_LNKSTA, &lnksta);
6128	if (err)
6129		return err;
6130
6131	return pcie_dev_speed_mbps(to_pcie_link_speed(lnksta));
6132}
6133EXPORT_SYMBOL(pcie_link_speed_mbps);
6134
6135/**
6136 * pcie_bandwidth_available - determine minimum link settings of a PCIe
6137 *			      device and its bandwidth limitation
6138 * @dev: PCI device to query
6139 * @limiting_dev: storage for device causing the bandwidth limitation
6140 * @speed: storage for speed of limiting device
6141 * @width: storage for width of limiting device
6142 *
6143 * Walk up the PCI device chain and find the point where the minimum
6144 * bandwidth is available.  Return the bandwidth available there and (if
6145 * limiting_dev, speed, and width pointers are supplied) information about
6146 * that point.  The bandwidth returned is in Mb/s, i.e., megabits/second of
6147 * raw bandwidth.
6148 */
6149u32 pcie_bandwidth_available(struct pci_dev *dev, struct pci_dev **limiting_dev,
6150			     enum pci_bus_speed *speed,
6151			     enum pcie_link_width *width)
6152{
6153	u16 lnksta;
6154	enum pci_bus_speed next_speed;
6155	enum pcie_link_width next_width;
6156	u32 bw, next_bw;
6157
6158	if (speed)
6159		*speed = PCI_SPEED_UNKNOWN;
6160	if (width)
6161		*width = PCIE_LNK_WIDTH_UNKNOWN;
6162
6163	bw = 0;
6164
6165	while (dev) {
6166		pcie_capability_read_word(dev, PCI_EXP_LNKSTA, &lnksta);
6167
6168		next_speed = to_pcie_link_speed(lnksta);
6169		next_width = FIELD_GET(PCI_EXP_LNKSTA_NLW, lnksta);
6170
6171		next_bw = next_width * PCIE_SPEED2MBS_ENC(next_speed);
6172
6173		/* Check if current device limits the total bandwidth */
6174		if (!bw || next_bw <= bw) {
6175			bw = next_bw;
6176
6177			if (limiting_dev)
6178				*limiting_dev = dev;
6179			if (speed)
6180				*speed = next_speed;
6181			if (width)
6182				*width = next_width;
6183		}
6184
6185		dev = pci_upstream_bridge(dev);
 
 
 
6186	}
6187
6188	return bw;
6189}
6190EXPORT_SYMBOL(pcie_bandwidth_available);
6191
6192/**
6193 * pcie_get_supported_speeds - query Supported Link Speed Vector
6194 * @dev: PCI device to query
6195 *
6196 * Query @dev supported link speeds.
6197 *
6198 * Implementation Note in PCIe r6.0 sec 7.5.3.18 recommends determining
6199 * supported link speeds using the Supported Link Speeds Vector in the Link
6200 * Capabilities 2 Register (when available).
6201 *
6202 * Link Capabilities 2 was added in PCIe r3.0, sec 7.8.18.
6203 *
6204 * Without Link Capabilities 2, i.e., prior to PCIe r3.0, Supported Link
6205 * Speeds field in Link Capabilities is used and only 2.5 GT/s and 5.0 GT/s
6206 * speeds were defined.
6207 *
6208 * For @dev without Supported Link Speed Vector, the field is synthesized
6209 * from the Max Link Speed field in the Link Capabilities Register.
6210 *
6211 * Return: Supported Link Speeds Vector (+ reserved 0 at LSB).
6212 */
6213u8 pcie_get_supported_speeds(struct pci_dev *dev)
6214{
6215	u32 lnkcap2, lnkcap;
6216	u8 speeds;
6217
6218	/*
6219	 * Speeds retain the reserved 0 at LSB before PCIe Supported Link
6220	 * Speeds Vector to allow using SLS Vector bit defines directly.
6221	 */
6222	pcie_capability_read_dword(dev, PCI_EXP_LNKCAP2, &lnkcap2);
6223	speeds = lnkcap2 & PCI_EXP_LNKCAP2_SLS;
6224
6225	/* Ignore speeds higher than Max Link Speed */
6226	pcie_capability_read_dword(dev, PCI_EXP_LNKCAP, &lnkcap);
6227	speeds &= GENMASK(lnkcap & PCI_EXP_LNKCAP_SLS, 0);
6228
6229	/* PCIe r3.0-compliant */
6230	if (speeds)
6231		return speeds;
6232
6233	/* Synthesize from the Max Link Speed field */
6234	if ((lnkcap & PCI_EXP_LNKCAP_SLS) == PCI_EXP_LNKCAP_SLS_5_0GB)
6235		speeds = PCI_EXP_LNKCAP2_SLS_5_0GB | PCI_EXP_LNKCAP2_SLS_2_5GB;
6236	else if ((lnkcap & PCI_EXP_LNKCAP_SLS) == PCI_EXP_LNKCAP_SLS_2_5GB)
6237		speeds = PCI_EXP_LNKCAP2_SLS_2_5GB;
6238
6239	return speeds;
6240}
6241
6242/**
6243 * pcie_get_speed_cap - query for the PCI device's link speed capability
6244 * @dev: PCI device to query
6245 *
6246 * Query the PCI device speed capability.
6247 *
6248 * Return: the maximum link speed supported by the device.
6249 */
6250enum pci_bus_speed pcie_get_speed_cap(struct pci_dev *dev)
6251{
6252	return PCIE_LNKCAP2_SLS2SPEED(dev->supported_speeds);
6253}
6254EXPORT_SYMBOL(pcie_get_speed_cap);
6255
6256/**
6257 * pcie_get_width_cap - query for the PCI device's link width capability
6258 * @dev: PCI device to query
6259 *
6260 * Query the PCI device width capability.  Return the maximum link width
6261 * supported by the device.
6262 */
6263enum pcie_link_width pcie_get_width_cap(struct pci_dev *dev)
6264{
6265	u32 lnkcap;
6266
6267	pcie_capability_read_dword(dev, PCI_EXP_LNKCAP, &lnkcap);
6268	if (lnkcap)
6269		return FIELD_GET(PCI_EXP_LNKCAP_MLW, lnkcap);
6270
6271	return PCIE_LNK_WIDTH_UNKNOWN;
6272}
6273EXPORT_SYMBOL(pcie_get_width_cap);
6274
6275/**
6276 * pcie_bandwidth_capable - calculate a PCI device's link bandwidth capability
6277 * @dev: PCI device
6278 * @speed: storage for link speed
6279 * @width: storage for link width
6280 *
6281 * Calculate a PCI device's link bandwidth by querying for its link speed
6282 * and width, multiplying them, and applying encoding overhead.  The result
6283 * is in Mb/s, i.e., megabits/second of raw bandwidth.
6284 */
6285static u32 pcie_bandwidth_capable(struct pci_dev *dev,
6286				  enum pci_bus_speed *speed,
6287				  enum pcie_link_width *width)
6288{
6289	*speed = pcie_get_speed_cap(dev);
6290	*width = pcie_get_width_cap(dev);
6291
6292	if (*speed == PCI_SPEED_UNKNOWN || *width == PCIE_LNK_WIDTH_UNKNOWN)
6293		return 0;
6294
6295	return *width * PCIE_SPEED2MBS_ENC(*speed);
6296}
6297
6298/**
6299 * __pcie_print_link_status - Report the PCI device's link speed and width
6300 * @dev: PCI device to query
6301 * @verbose: Print info even when enough bandwidth is available
6302 *
6303 * If the available bandwidth at the device is less than the device is
6304 * capable of, report the device's maximum possible bandwidth and the
6305 * upstream link that limits its performance.  If @verbose, always print
6306 * the available bandwidth, even if the device isn't constrained.
6307 */
6308void __pcie_print_link_status(struct pci_dev *dev, bool verbose)
6309{
6310	enum pcie_link_width width, width_cap;
6311	enum pci_bus_speed speed, speed_cap;
6312	struct pci_dev *limiting_dev = NULL;
6313	u32 bw_avail, bw_cap;
6314
6315	bw_cap = pcie_bandwidth_capable(dev, &speed_cap, &width_cap);
6316	bw_avail = pcie_bandwidth_available(dev, &limiting_dev, &speed, &width);
6317
6318	if (bw_avail >= bw_cap && verbose)
6319		pci_info(dev, "%u.%03u Gb/s available PCIe bandwidth (%s x%d link)\n",
6320			 bw_cap / 1000, bw_cap % 1000,
6321			 pci_speed_string(speed_cap), width_cap);
6322	else if (bw_avail < bw_cap)
6323		pci_info(dev, "%u.%03u Gb/s available PCIe bandwidth, limited by %s x%d link at %s (capable of %u.%03u Gb/s with %s x%d link)\n",
6324			 bw_avail / 1000, bw_avail % 1000,
6325			 pci_speed_string(speed), width,
6326			 limiting_dev ? pci_name(limiting_dev) : "<unknown>",
6327			 bw_cap / 1000, bw_cap % 1000,
6328			 pci_speed_string(speed_cap), width_cap);
6329}
6330
6331/**
6332 * pcie_print_link_status - Report the PCI device's link speed and width
6333 * @dev: PCI device to query
6334 *
6335 * Report the available bandwidth at the device.
6336 */
6337void pcie_print_link_status(struct pci_dev *dev)
6338{
6339	__pcie_print_link_status(dev, true);
6340}
6341EXPORT_SYMBOL(pcie_print_link_status);
6342
6343/**
6344 * pci_select_bars - Make BAR mask from the type of resource
6345 * @dev: the PCI device for which BAR mask is made
6346 * @flags: resource type mask to be selected
6347 *
6348 * This helper routine makes bar mask from the type of resource.
6349 */
6350int pci_select_bars(struct pci_dev *dev, unsigned long flags)
6351{
6352	int i, bars = 0;
6353	for (i = 0; i < PCI_NUM_RESOURCES; i++)
6354		if (pci_resource_flags(dev, i) & flags)
6355			bars |= (1 << i);
6356	return bars;
6357}
6358EXPORT_SYMBOL(pci_select_bars);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6359
6360/* Some architectures require additional programming to enable VGA */
6361static arch_set_vga_state_t arch_set_vga_state;
6362
6363void __init pci_register_set_vga_state(arch_set_vga_state_t func)
6364{
6365	arch_set_vga_state = func;	/* NULL disables */
6366}
6367
6368static int pci_set_vga_state_arch(struct pci_dev *dev, bool decode,
6369				  unsigned int command_bits, u32 flags)
6370{
6371	if (arch_set_vga_state)
6372		return arch_set_vga_state(dev, decode, command_bits,
6373						flags);
6374	return 0;
6375}
6376
6377/**
6378 * pci_set_vga_state - set VGA decode state on device and parents if requested
6379 * @dev: the PCI device
6380 * @decode: true = enable decoding, false = disable decoding
6381 * @command_bits: PCI_COMMAND_IO and/or PCI_COMMAND_MEMORY
6382 * @flags: traverse ancestors and change bridges
6383 * CHANGE_BRIDGE_ONLY / CHANGE_BRIDGE
6384 */
6385int pci_set_vga_state(struct pci_dev *dev, bool decode,
6386		      unsigned int command_bits, u32 flags)
6387{
6388	struct pci_bus *bus;
6389	struct pci_dev *bridge;
6390	u16 cmd;
6391	int rc;
6392
6393	WARN_ON((flags & PCI_VGA_STATE_CHANGE_DECODES) && (command_bits & ~(PCI_COMMAND_IO|PCI_COMMAND_MEMORY)));
6394
6395	/* ARCH specific VGA enables */
6396	rc = pci_set_vga_state_arch(dev, decode, command_bits, flags);
6397	if (rc)
6398		return rc;
6399
6400	if (flags & PCI_VGA_STATE_CHANGE_DECODES) {
6401		pci_read_config_word(dev, PCI_COMMAND, &cmd);
6402		if (decode)
6403			cmd |= command_bits;
6404		else
6405			cmd &= ~command_bits;
6406		pci_write_config_word(dev, PCI_COMMAND, cmd);
6407	}
6408
6409	if (!(flags & PCI_VGA_STATE_CHANGE_BRIDGE))
6410		return 0;
6411
6412	bus = dev->bus;
6413	while (bus) {
6414		bridge = bus->self;
6415		if (bridge) {
6416			pci_read_config_word(bridge, PCI_BRIDGE_CONTROL,
6417					     &cmd);
6418			if (decode)
6419				cmd |= PCI_BRIDGE_CTL_VGA;
6420			else
6421				cmd &= ~PCI_BRIDGE_CTL_VGA;
6422			pci_write_config_word(bridge, PCI_BRIDGE_CONTROL,
6423					      cmd);
6424		}
6425		bus = bus->parent;
6426	}
6427	return 0;
6428}
6429
6430#ifdef CONFIG_ACPI
6431bool pci_pr3_present(struct pci_dev *pdev)
6432{
6433	struct acpi_device *adev;
6434
6435	if (acpi_disabled)
6436		return false;
6437
6438	adev = ACPI_COMPANION(&pdev->dev);
6439	if (!adev)
6440		return false;
6441
6442	return adev->power.flags.power_resources &&
6443		acpi_has_method(adev->handle, "_PR3");
6444}
6445EXPORT_SYMBOL_GPL(pci_pr3_present);
6446#endif
6447
6448/**
6449 * pci_add_dma_alias - Add a DMA devfn alias for a device
6450 * @dev: the PCI device for which alias is added
6451 * @devfn_from: alias slot and function
6452 * @nr_devfns: number of subsequent devfns to alias
6453 *
6454 * This helper encodes an 8-bit devfn as a bit number in dma_alias_mask
6455 * which is used to program permissible bus-devfn source addresses for DMA
6456 * requests in an IOMMU.  These aliases factor into IOMMU group creation
6457 * and are useful for devices generating DMA requests beyond or different
6458 * from their logical bus-devfn.  Examples include device quirks where the
6459 * device simply uses the wrong devfn, as well as non-transparent bridges
6460 * where the alias may be a proxy for devices in another domain.
6461 *
6462 * IOMMU group creation is performed during device discovery or addition,
6463 * prior to any potential DMA mapping and therefore prior to driver probing
6464 * (especially for userspace assigned devices where IOMMU group definition
6465 * cannot be left as a userspace activity).  DMA aliases should therefore
6466 * be configured via quirks, such as the PCI fixup header quirk.
6467 */
6468void pci_add_dma_alias(struct pci_dev *dev, u8 devfn_from,
6469		       unsigned int nr_devfns)
6470{
6471	int devfn_to;
6472
6473	nr_devfns = min(nr_devfns, (unsigned int)MAX_NR_DEVFNS - devfn_from);
6474	devfn_to = devfn_from + nr_devfns - 1;
6475
6476	if (!dev->dma_alias_mask)
6477		dev->dma_alias_mask = bitmap_zalloc(MAX_NR_DEVFNS, GFP_KERNEL);
6478	if (!dev->dma_alias_mask) {
6479		pci_warn(dev, "Unable to allocate DMA alias mask\n");
6480		return;
6481	}
6482
6483	bitmap_set(dev->dma_alias_mask, devfn_from, nr_devfns);
6484
6485	if (nr_devfns == 1)
6486		pci_info(dev, "Enabling fixed DMA alias to %02x.%d\n",
6487				PCI_SLOT(devfn_from), PCI_FUNC(devfn_from));
6488	else if (nr_devfns > 1)
6489		pci_info(dev, "Enabling fixed DMA alias for devfn range from %02x.%d to %02x.%d\n",
6490				PCI_SLOT(devfn_from), PCI_FUNC(devfn_from),
6491				PCI_SLOT(devfn_to), PCI_FUNC(devfn_to));
6492}
6493
6494bool pci_devs_are_dma_aliases(struct pci_dev *dev1, struct pci_dev *dev2)
6495{
6496	return (dev1->dma_alias_mask &&
6497		test_bit(dev2->devfn, dev1->dma_alias_mask)) ||
6498	       (dev2->dma_alias_mask &&
6499		test_bit(dev1->devfn, dev2->dma_alias_mask)) ||
6500	       pci_real_dma_dev(dev1) == dev2 ||
6501	       pci_real_dma_dev(dev2) == dev1;
6502}
6503
6504bool pci_device_is_present(struct pci_dev *pdev)
6505{
6506	u32 v;
6507
6508	/* Check PF if pdev is a VF, since VF Vendor/Device IDs are 0xffff */
6509	pdev = pci_physfn(pdev);
6510	if (pci_dev_is_disconnected(pdev))
6511		return false;
6512	return pci_bus_read_dev_vendor_id(pdev->bus, pdev->devfn, &v, 0);
6513}
6514EXPORT_SYMBOL_GPL(pci_device_is_present);
6515
6516void pci_ignore_hotplug(struct pci_dev *dev)
6517{
6518	struct pci_dev *bridge = dev->bus->self;
6519
6520	dev->ignore_hotplug = 1;
6521	/* Propagate the "ignore hotplug" setting to the parent bridge. */
6522	if (bridge)
6523		bridge->ignore_hotplug = 1;
6524}
6525EXPORT_SYMBOL_GPL(pci_ignore_hotplug);
6526
6527/**
6528 * pci_real_dma_dev - Get PCI DMA device for PCI device
6529 * @dev: the PCI device that may have a PCI DMA alias
6530 *
6531 * Permits the platform to provide architecture-specific functionality to
6532 * devices needing to alias DMA to another PCI device on another PCI bus. If
6533 * the PCI device is on the same bus, it is recommended to use
6534 * pci_add_dma_alias(). This is the default implementation. Architecture
6535 * implementations can override this.
6536 */
6537struct pci_dev __weak *pci_real_dma_dev(struct pci_dev *dev)
6538{
6539	return dev;
6540}
6541
6542resource_size_t __weak pcibios_default_alignment(void)
6543{
6544	return 0;
6545}
6546
6547/*
6548 * Arches that don't want to expose struct resource to userland as-is in
6549 * sysfs and /proc can implement their own pci_resource_to_user().
6550 */
6551void __weak pci_resource_to_user(const struct pci_dev *dev, int bar,
6552				 const struct resource *rsrc,
6553				 resource_size_t *start, resource_size_t *end)
6554{
6555	*start = rsrc->start;
6556	*end = rsrc->end;
6557}
6558
6559static char *resource_alignment_param;
6560static DEFINE_SPINLOCK(resource_alignment_lock);
6561
6562/**
6563 * pci_specified_resource_alignment - get resource alignment specified by user.
6564 * @dev: the PCI device to get
6565 * @resize: whether or not to change resources' size when reassigning alignment
6566 *
6567 * RETURNS: Resource alignment if it is specified.
6568 *          Zero if it is not specified.
6569 */
6570static resource_size_t pci_specified_resource_alignment(struct pci_dev *dev,
6571							bool *resize)
6572{
6573	int align_order, count;
6574	resource_size_t align = pcibios_default_alignment();
6575	const char *p;
6576	int ret;
6577
6578	spin_lock(&resource_alignment_lock);
6579	p = resource_alignment_param;
6580	if (!p || !*p)
6581		goto out;
6582	if (pci_has_flag(PCI_PROBE_ONLY)) {
6583		align = 0;
6584		pr_info_once("PCI: Ignoring requested alignments (PCI_PROBE_ONLY)\n");
6585		goto out;
6586	}
6587
6588	while (*p) {
6589		count = 0;
6590		if (sscanf(p, "%d%n", &align_order, &count) == 1 &&
6591		    p[count] == '@') {
6592			p += count + 1;
6593			if (align_order > 63) {
6594				pr_err("PCI: Invalid requested alignment (order %d)\n",
6595				       align_order);
6596				align_order = PAGE_SHIFT;
 
 
 
 
 
 
 
 
6597			}
6598		} else {
6599			align_order = PAGE_SHIFT;
6600		}
6601
6602		ret = pci_dev_str_match(dev, p, &p);
6603		if (ret == 1) {
6604			*resize = true;
6605			align = 1ULL << align_order;
6606			break;
6607		} else if (ret < 0) {
6608			pr_err("PCI: Can't parse resource_alignment parameter: %s\n",
6609			       p);
 
 
6610			break;
6611		}
6612
6613		if (*p != ';' && *p != ',') {
6614			/* End of param or invalid format */
6615			break;
6616		}
6617		p++;
6618	}
6619out:
6620	spin_unlock(&resource_alignment_lock);
6621	return align;
6622}
6623
6624static void pci_request_resource_alignment(struct pci_dev *dev, int bar,
6625					   resource_size_t align, bool resize)
6626{
6627	struct resource *r = &dev->resource[bar];
6628	const char *r_name = pci_resource_name(dev, bar);
6629	resource_size_t size;
6630
6631	if (!(r->flags & IORESOURCE_MEM))
6632		return;
6633
6634	if (r->flags & IORESOURCE_PCI_FIXED) {
6635		pci_info(dev, "%s %pR: ignoring requested alignment %#llx\n",
6636			 r_name, r, (unsigned long long)align);
6637		return;
6638	}
6639
6640	size = resource_size(r);
6641	if (size >= align)
6642		return;
6643
6644	/*
6645	 * Increase the alignment of the resource.  There are two ways we
6646	 * can do this:
6647	 *
6648	 * 1) Increase the size of the resource.  BARs are aligned on their
6649	 *    size, so when we reallocate space for this resource, we'll
6650	 *    allocate it with the larger alignment.  This also prevents
6651	 *    assignment of any other BARs inside the alignment region, so
6652	 *    if we're requesting page alignment, this means no other BARs
6653	 *    will share the page.
6654	 *
6655	 *    The disadvantage is that this makes the resource larger than
6656	 *    the hardware BAR, which may break drivers that compute things
6657	 *    based on the resource size, e.g., to find registers at a
6658	 *    fixed offset before the end of the BAR.
6659	 *
6660	 * 2) Retain the resource size, but use IORESOURCE_STARTALIGN and
6661	 *    set r->start to the desired alignment.  By itself this
6662	 *    doesn't prevent other BARs being put inside the alignment
6663	 *    region, but if we realign *every* resource of every device in
6664	 *    the system, none of them will share an alignment region.
6665	 *
6666	 * When the user has requested alignment for only some devices via
6667	 * the "pci=resource_alignment" argument, "resize" is true and we
6668	 * use the first method.  Otherwise we assume we're aligning all
6669	 * devices and we use the second.
6670	 */
6671
6672	pci_info(dev, "%s %pR: requesting alignment to %#llx\n",
6673		 r_name, r, (unsigned long long)align);
6674
6675	if (resize) {
6676		r->start = 0;
6677		r->end = align - 1;
6678	} else {
6679		r->flags &= ~IORESOURCE_SIZEALIGN;
6680		r->flags |= IORESOURCE_STARTALIGN;
6681		resource_set_range(r, align, size);
6682	}
6683	r->flags |= IORESOURCE_UNSET;
6684}
6685
6686/*
6687 * This function disables memory decoding and releases memory resources
6688 * of the device specified by kernel's boot parameter 'pci=resource_alignment='.
6689 * It also rounds up size to specified alignment.
6690 * Later on, the kernel will assign page-aligned memory resource back
6691 * to the device.
6692 */
6693void pci_reassigndev_resource_alignment(struct pci_dev *dev)
6694{
6695	int i;
6696	struct resource *r;
6697	resource_size_t align;
6698	u16 command;
6699	bool resize = false;
6700
6701	/*
6702	 * VF BARs are read-only zero according to SR-IOV spec r1.1, sec
6703	 * 3.4.1.11.  Their resources are allocated from the space
6704	 * described by the VF BARx register in the PF's SR-IOV capability.
6705	 * We can't influence their alignment here.
6706	 */
6707	if (dev->is_virtfn)
6708		return;
6709
6710	/* check if specified PCI is target device to reassign */
6711	align = pci_specified_resource_alignment(dev, &resize);
6712	if (!align)
6713		return;
6714
6715	if (dev->hdr_type == PCI_HEADER_TYPE_NORMAL &&
6716	    (dev->class >> 8) == PCI_CLASS_BRIDGE_HOST) {
6717		pci_warn(dev, "Can't reassign resources to host bridge\n");
6718		return;
6719	}
6720
6721	pci_read_config_word(dev, PCI_COMMAND, &command);
6722	command &= ~PCI_COMMAND_MEMORY;
6723	pci_write_config_word(dev, PCI_COMMAND, command);
6724
6725	for (i = 0; i <= PCI_ROM_RESOURCE; i++)
6726		pci_request_resource_alignment(dev, i, align, resize);
6727
6728	/*
6729	 * Need to disable bridge's resource window,
6730	 * to enable the kernel to reassign new resource
6731	 * window later on.
6732	 */
6733	if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE) {
6734		for (i = PCI_BRIDGE_RESOURCES; i < PCI_NUM_RESOURCES; i++) {
6735			r = &dev->resource[i];
6736			if (!(r->flags & IORESOURCE_MEM))
6737				continue;
6738			r->flags |= IORESOURCE_UNSET;
6739			r->end = resource_size(r) - 1;
6740			r->start = 0;
6741		}
6742		pci_disable_bridge_window(dev);
6743	}
6744}
6745
6746static ssize_t resource_alignment_show(const struct bus_type *bus, char *buf)
6747{
6748	size_t count = 0;
6749
6750	spin_lock(&resource_alignment_lock);
6751	if (resource_alignment_param)
6752		count = sysfs_emit(buf, "%s\n", resource_alignment_param);
6753	spin_unlock(&resource_alignment_lock);
6754
6755	return count;
6756}
6757
6758static ssize_t resource_alignment_store(const struct bus_type *bus,
6759					const char *buf, size_t count)
6760{
6761	char *param, *old, *end;
6762
6763	if (count >= (PAGE_SIZE - 1))
6764		return -EINVAL;
6765
6766	param = kstrndup(buf, count, GFP_KERNEL);
6767	if (!param)
6768		return -ENOMEM;
6769
6770	end = strchr(param, '\n');
6771	if (end)
6772		*end = '\0';
6773
6774	spin_lock(&resource_alignment_lock);
6775	old = resource_alignment_param;
6776	if (strlen(param)) {
6777		resource_alignment_param = param;
6778	} else {
6779		kfree(param);
6780		resource_alignment_param = NULL;
6781	}
6782	spin_unlock(&resource_alignment_lock);
 
 
6783
6784	kfree(old);
 
 
 
6785
6786	return count;
 
 
 
6787}
6788
6789static BUS_ATTR_RW(resource_alignment);
 
6790
6791static int __init pci_resource_alignment_sysfs_init(void)
6792{
6793	return bus_create_file(&pci_bus_type,
6794					&bus_attr_resource_alignment);
6795}
 
6796late_initcall(pci_resource_alignment_sysfs_init);
6797
6798static void pci_no_domains(void)
6799{
6800#ifdef CONFIG_PCI_DOMAINS
6801	pci_domains_supported = 0;
6802#endif
6803}
6804
6805#ifdef CONFIG_PCI_DOMAINS_GENERIC
6806static DEFINE_IDA(pci_domain_nr_static_ida);
6807static DEFINE_IDA(pci_domain_nr_dynamic_ida);
6808
6809static void of_pci_reserve_static_domain_nr(void)
6810{
6811	struct device_node *np;
6812	int domain_nr;
6813
6814	for_each_node_by_type(np, "pci") {
6815		domain_nr = of_get_pci_domain_nr(np);
6816		if (domain_nr < 0)
6817			continue;
6818		/*
6819		 * Permanently allocate domain_nr in dynamic_ida
6820		 * to prevent it from dynamic allocation.
6821		 */
6822		ida_alloc_range(&pci_domain_nr_dynamic_ida,
6823				domain_nr, domain_nr, GFP_KERNEL);
6824	}
6825}
6826
6827static int of_pci_bus_find_domain_nr(struct device *parent)
6828{
6829	static bool static_domains_reserved = false;
6830	int domain_nr;
6831
6832	/* On the first call scan device tree for static allocations. */
6833	if (!static_domains_reserved) {
6834		of_pci_reserve_static_domain_nr();
6835		static_domains_reserved = true;
6836	}
6837
6838	if (parent) {
6839		/*
6840		 * If domain is in DT, allocate it in static IDA.  This
6841		 * prevents duplicate static allocations in case of errors
6842		 * in DT.
6843		 */
6844		domain_nr = of_get_pci_domain_nr(parent->of_node);
6845		if (domain_nr >= 0)
6846			return ida_alloc_range(&pci_domain_nr_static_ida,
6847					       domain_nr, domain_nr,
6848					       GFP_KERNEL);
6849	}
6850
6851	/*
6852	 * If domain was not specified in DT, choose a free ID from dynamic
6853	 * allocations. All domain numbers from DT are permanently in
6854	 * dynamic allocations to prevent assigning them to other DT nodes
6855	 * without static domain.
6856	 */
6857	return ida_alloc(&pci_domain_nr_dynamic_ida, GFP_KERNEL);
6858}
6859
6860static void of_pci_bus_release_domain_nr(struct device *parent, int domain_nr)
6861{
6862	if (domain_nr < 0)
6863		return;
6864
6865	/* Release domain from IDA where it was allocated. */
6866	if (of_get_pci_domain_nr(parent->of_node) == domain_nr)
6867		ida_free(&pci_domain_nr_static_ida, domain_nr);
6868	else
6869		ida_free(&pci_domain_nr_dynamic_ida, domain_nr);
6870}
6871
6872int pci_bus_find_domain_nr(struct pci_bus *bus, struct device *parent)
6873{
6874	return acpi_disabled ? of_pci_bus_find_domain_nr(parent) :
6875			       acpi_pci_bus_find_domain_nr(bus);
6876}
6877
6878void pci_bus_release_domain_nr(struct device *parent, int domain_nr)
6879{
6880	if (!acpi_disabled)
6881		return;
6882	of_pci_bus_release_domain_nr(parent, domain_nr);
6883}
6884#endif
6885
6886/**
6887 * pci_ext_cfg_avail - can we access extended PCI config space?
 
6888 *
6889 * Returns 1 if we can access PCI extended config space (offsets
6890 * greater than 0xff). This is the default implementation. Architecture
6891 * implementations can override this.
6892 */
6893int __weak pci_ext_cfg_avail(void)
6894{
6895	return 1;
6896}
6897
6898void __weak pci_fixup_cardbus(struct pci_bus *bus)
6899{
6900}
6901EXPORT_SYMBOL(pci_fixup_cardbus);
6902
6903static int __init pci_setup(char *str)
6904{
6905	while (str) {
6906		char *k = strchr(str, ',');
6907		if (k)
6908			*k++ = 0;
6909		if (*str && (str = pcibios_setup(str)) && *str) {
6910			if (!strcmp(str, "nomsi")) {
6911				pci_no_msi();
6912			} else if (!strncmp(str, "noats", 5)) {
6913				pr_info("PCIe: ATS is disabled\n");
6914				pcie_ats_disabled = true;
6915			} else if (!strcmp(str, "noaer")) {
6916				pci_no_aer();
6917			} else if (!strcmp(str, "earlydump")) {
6918				pci_early_dump = true;
6919			} else if (!strncmp(str, "realloc=", 8)) {
6920				pci_realloc_get_opt(str + 8);
6921			} else if (!strncmp(str, "realloc", 7)) {
6922				pci_realloc_get_opt("on");
6923			} else if (!strcmp(str, "nodomains")) {
6924				pci_no_domains();
6925			} else if (!strncmp(str, "noari", 5)) {
6926				pcie_ari_disabled = true;
6927			} else if (!strncmp(str, "notph", 5)) {
6928				pci_no_tph();
6929			} else if (!strncmp(str, "cbiosize=", 9)) {
6930				pci_cardbus_io_size = memparse(str + 9, &str);
6931			} else if (!strncmp(str, "cbmemsize=", 10)) {
6932				pci_cardbus_mem_size = memparse(str + 10, &str);
6933			} else if (!strncmp(str, "resource_alignment=", 19)) {
6934				resource_alignment_param = str + 19;
 
6935			} else if (!strncmp(str, "ecrc=", 5)) {
6936				pcie_ecrc_get_policy(str + 5);
6937			} else if (!strncmp(str, "hpiosize=", 9)) {
6938				pci_hotplug_io_size = memparse(str + 9, &str);
6939			} else if (!strncmp(str, "hpmmiosize=", 11)) {
6940				pci_hotplug_mmio_size = memparse(str + 11, &str);
6941			} else if (!strncmp(str, "hpmmioprefsize=", 15)) {
6942				pci_hotplug_mmio_pref_size = memparse(str + 15, &str);
6943			} else if (!strncmp(str, "hpmemsize=", 10)) {
6944				pci_hotplug_mmio_size = memparse(str + 10, &str);
6945				pci_hotplug_mmio_pref_size = pci_hotplug_mmio_size;
6946			} else if (!strncmp(str, "hpbussize=", 10)) {
6947				pci_hotplug_bus_size =
6948					simple_strtoul(str + 10, &str, 0);
6949				if (pci_hotplug_bus_size > 0xff)
6950					pci_hotplug_bus_size = DEFAULT_HOTPLUG_BUS_SIZE;
6951			} else if (!strncmp(str, "pcie_bus_tune_off", 17)) {
6952				pcie_bus_config = PCIE_BUS_TUNE_OFF;
6953			} else if (!strncmp(str, "pcie_bus_safe", 13)) {
6954				pcie_bus_config = PCIE_BUS_SAFE;
6955			} else if (!strncmp(str, "pcie_bus_perf", 13)) {
6956				pcie_bus_config = PCIE_BUS_PERFORMANCE;
6957			} else if (!strncmp(str, "pcie_bus_peer2peer", 18)) {
6958				pcie_bus_config = PCIE_BUS_PEER2PEER;
6959			} else if (!strncmp(str, "pcie_scan_all", 13)) {
6960				pci_add_flags(PCI_SCAN_ALL_PCIE_DEVS);
6961			} else if (!strncmp(str, "disable_acs_redir=", 18)) {
6962				disable_acs_redir_param = str + 18;
6963			} else if (!strncmp(str, "config_acs=", 11)) {
6964				config_acs_param = str + 11;
6965			} else {
6966				pr_err("PCI: Unknown option `%s'\n", str);
 
6967			}
6968		}
6969		str = k;
6970	}
6971	return 0;
6972}
6973early_param("pci", pci_setup);
6974
6975/*
6976 * 'resource_alignment_param' and 'disable_acs_redir_param' are initialized
6977 * in pci_setup(), above, to point to data in the __initdata section which
6978 * will be freed after the init sequence is complete. We can't allocate memory
6979 * in pci_setup() because some architectures do not have any memory allocation
6980 * service available during an early_param() call. So we allocate memory and
6981 * copy the variable here before the init section is freed.
6982 *
6983 */
6984static int __init pci_realloc_setup_params(void)
6985{
6986	resource_alignment_param = kstrdup(resource_alignment_param,
6987					   GFP_KERNEL);
6988	disable_acs_redir_param = kstrdup(disable_acs_redir_param, GFP_KERNEL);
6989	config_acs_param = kstrdup(config_acs_param, GFP_KERNEL);
 
 
 
 
 
 
 
 
 
 
 
 
6990
6991	return 0;
6992}
6993pure_initcall(pci_realloc_setup_params);