diff options
Diffstat (limited to 'drivers/pci/iov.c')
| -rw-r--r-- | drivers/pci/iov.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c index 6bacb8995e96..677924ae0350 100644 --- a/drivers/pci/iov.c +++ b/drivers/pci/iov.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0 | ||
| 1 | /* | 2 | /* |
| 2 | * drivers/pci/iov.c | 3 | * drivers/pci/iov.c |
| 3 | * | 4 | * |
| @@ -259,19 +260,19 @@ static int sriov_enable(struct pci_dev *dev, int nr_virtfn) | |||
| 259 | nres++; | 260 | nres++; |
| 260 | } | 261 | } |
| 261 | if (nres != iov->nres) { | 262 | if (nres != iov->nres) { |
| 262 | dev_err(&dev->dev, "not enough MMIO resources for SR-IOV\n"); | 263 | pci_err(dev, "not enough MMIO resources for SR-IOV\n"); |
| 263 | return -ENOMEM; | 264 | return -ENOMEM; |
| 264 | } | 265 | } |
| 265 | 266 | ||
| 266 | bus = pci_iov_virtfn_bus(dev, nr_virtfn - 1); | 267 | bus = pci_iov_virtfn_bus(dev, nr_virtfn - 1); |
| 267 | if (bus > dev->bus->busn_res.end) { | 268 | if (bus > dev->bus->busn_res.end) { |
| 268 | dev_err(&dev->dev, "can't enable %d VFs (bus %02x out of range of %pR)\n", | 269 | pci_err(dev, "can't enable %d VFs (bus %02x out of range of %pR)\n", |
| 269 | nr_virtfn, bus, &dev->bus->busn_res); | 270 | nr_virtfn, bus, &dev->bus->busn_res); |
| 270 | return -ENOMEM; | 271 | return -ENOMEM; |
| 271 | } | 272 | } |
| 272 | 273 | ||
| 273 | if (pci_enable_resources(dev, bars)) { | 274 | if (pci_enable_resources(dev, bars)) { |
| 274 | dev_err(&dev->dev, "SR-IOV: IOV BARS not allocated\n"); | 275 | pci_err(dev, "SR-IOV: IOV BARS not allocated\n"); |
| 275 | return -ENOMEM; | 276 | return -ENOMEM; |
| 276 | } | 277 | } |
| 277 | 278 | ||
| @@ -298,7 +299,7 @@ static int sriov_enable(struct pci_dev *dev, int nr_virtfn) | |||
| 298 | 299 | ||
| 299 | rc = pcibios_sriov_enable(dev, initial); | 300 | rc = pcibios_sriov_enable(dev, initial); |
| 300 | if (rc) { | 301 | if (rc) { |
| 301 | dev_err(&dev->dev, "failure %d from pcibios_sriov_enable()\n", rc); | 302 | pci_err(dev, "failure %d from pcibios_sriov_enable()\n", rc); |
| 302 | goto err_pcibios; | 303 | goto err_pcibios; |
| 303 | } | 304 | } |
| 304 | 305 | ||
| @@ -432,7 +433,7 @@ found: | |||
| 432 | } | 433 | } |
| 433 | iov->barsz[i] = resource_size(res); | 434 | iov->barsz[i] = resource_size(res); |
| 434 | res->end = res->start + resource_size(res) * total - 1; | 435 | res->end = res->start + resource_size(res) * total - 1; |
| 435 | dev_info(&dev->dev, "VF(n) BAR%d space: %pR (contains BAR%d for %d VFs)\n", | 436 | pci_info(dev, "VF(n) BAR%d space: %pR (contains BAR%d for %d VFs)\n", |
| 436 | i, res, i, total); | 437 | i, res, i, total); |
| 437 | i += bar64; | 438 | i += bar64; |
| 438 | nres++; | 439 | nres++; |
| @@ -636,6 +637,17 @@ void pci_restore_iov_state(struct pci_dev *dev) | |||
| 636 | } | 637 | } |
| 637 | 638 | ||
| 638 | /** | 639 | /** |
| 640 | * pci_vf_drivers_autoprobe - set PF property drivers_autoprobe for VFs | ||
| 641 | * @dev: the PCI device | ||
| 642 | * @auto_probe: set VF drivers auto probe flag | ||
| 643 | */ | ||
| 644 | void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool auto_probe) | ||
| 645 | { | ||
| 646 | if (dev->is_physfn) | ||
| 647 | dev->sriov->drivers_autoprobe = auto_probe; | ||
| 648 | } | ||
| 649 | |||
| 650 | /** | ||
| 639 | * pci_iov_bus_range - find bus range used by Virtual Function | 651 | * pci_iov_bus_range - find bus range used by Virtual Function |
| 640 | * @bus: the PCI bus | 652 | * @bus: the PCI bus |
| 641 | * | 653 | * |
