block: rename blk_mq_alloc_rq_maps
[linux-2.6-microblaze.git] / drivers / pci / iov.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * PCI Express I/O Virtualization (IOV) support
4  *   Single Root IOV 1.0
5  *   Address Translation Service 1.0
6  *
7  * Copyright (C) 2009 Intel Corporation, Yu Zhao <yu.zhao@intel.com>
8  */
9
10 #include <linux/pci.h>
11 #include <linux/slab.h>
12 #include <linux/export.h>
13 #include <linux/string.h>
14 #include <linux/delay.h>
15 #include "pci.h"
16
17 #define VIRTFN_ID_LEN   16
18
19 int pci_iov_virtfn_bus(struct pci_dev *dev, int vf_id)
20 {
21         if (!dev->is_physfn)
22                 return -EINVAL;
23         return dev->bus->number + ((dev->devfn + dev->sriov->offset +
24                                     dev->sriov->stride * vf_id) >> 8);
25 }
26
27 int pci_iov_virtfn_devfn(struct pci_dev *dev, int vf_id)
28 {
29         if (!dev->is_physfn)
30                 return -EINVAL;
31         return (dev->devfn + dev->sriov->offset +
32                 dev->sriov->stride * vf_id) & 0xff;
33 }
34
35 /*
36  * Per SR-IOV spec sec 3.3.10 and 3.3.11, First VF Offset and VF Stride may
37  * change when NumVFs changes.
38  *
39  * Update iov->offset and iov->stride when NumVFs is written.
40  */
41 static inline void pci_iov_set_numvfs(struct pci_dev *dev, int nr_virtfn)
42 {
43         struct pci_sriov *iov = dev->sriov;
44
45         pci_write_config_word(dev, iov->pos + PCI_SRIOV_NUM_VF, nr_virtfn);
46         pci_read_config_word(dev, iov->pos + PCI_SRIOV_VF_OFFSET, &iov->offset);
47         pci_read_config_word(dev, iov->pos + PCI_SRIOV_VF_STRIDE, &iov->stride);
48 }
49
50 /*
51  * The PF consumes one bus number.  NumVFs, First VF Offset, and VF Stride
52  * determine how many additional bus numbers will be consumed by VFs.
53  *
54  * Iterate over all valid NumVFs, validate offset and stride, and calculate
55  * the maximum number of bus numbers that could ever be required.
56  */
57 static int compute_max_vf_buses(struct pci_dev *dev)
58 {
59         struct pci_sriov *iov = dev->sriov;
60         int nr_virtfn, busnr, rc = 0;
61
62         for (nr_virtfn = iov->total_VFs; nr_virtfn; nr_virtfn--) {
63                 pci_iov_set_numvfs(dev, nr_virtfn);
64                 if (!iov->offset || (nr_virtfn > 1 && !iov->stride)) {
65                         rc = -EIO;
66                         goto out;
67                 }
68
69                 busnr = pci_iov_virtfn_bus(dev, nr_virtfn - 1);
70                 if (busnr > iov->max_VF_buses)
71                         iov->max_VF_buses = busnr;
72         }
73
74 out:
75         pci_iov_set_numvfs(dev, 0);
76         return rc;
77 }
78
79 static struct pci_bus *virtfn_add_bus(struct pci_bus *bus, int busnr)
80 {
81         struct pci_bus *child;
82
83         if (bus->number == busnr)
84                 return bus;
85
86         child = pci_find_bus(pci_domain_nr(bus), busnr);
87         if (child)
88                 return child;
89
90         child = pci_add_new_bus(bus, NULL, busnr);
91         if (!child)
92                 return NULL;
93
94         pci_bus_insert_busn_res(child, busnr, busnr);
95
96         return child;
97 }
98
99 static void virtfn_remove_bus(struct pci_bus *physbus, struct pci_bus *virtbus)
100 {
101         if (physbus != virtbus && list_empty(&virtbus->devices))
102                 pci_remove_bus(virtbus);
103 }
104
105 resource_size_t pci_iov_resource_size(struct pci_dev *dev, int resno)
106 {
107         if (!dev->is_physfn)
108                 return 0;
109
110         return dev->sriov->barsz[resno - PCI_IOV_RESOURCES];
111 }
112
113 static void pci_read_vf_config_common(struct pci_dev *virtfn)
114 {
115         struct pci_dev *physfn = virtfn->physfn;
116
117         /*
118          * Some config registers are the same across all associated VFs.
119          * Read them once from VF0 so we can skip reading them from the
120          * other VFs.
121          *
122          * PCIe r4.0, sec 9.3.4.1, technically doesn't require all VFs to
123          * have the same Revision ID and Subsystem ID, but we assume they
124          * do.
125          */
126         pci_read_config_dword(virtfn, PCI_CLASS_REVISION,
127                               &physfn->sriov->class);
128         pci_read_config_byte(virtfn, PCI_HEADER_TYPE,
129                              &physfn->sriov->hdr_type);
130         pci_read_config_word(virtfn, PCI_SUBSYSTEM_VENDOR_ID,
131                              &physfn->sriov->subsystem_vendor);
132         pci_read_config_word(virtfn, PCI_SUBSYSTEM_ID,
133                              &physfn->sriov->subsystem_device);
134 }
135
136 int pci_iov_add_virtfn(struct pci_dev *dev, int id)
137 {
138         int i;
139         int rc = -ENOMEM;
140         u64 size;
141         char buf[VIRTFN_ID_LEN];
142         struct pci_dev *virtfn;
143         struct resource *res;
144         struct pci_sriov *iov = dev->sriov;
145         struct pci_bus *bus;
146
147         bus = virtfn_add_bus(dev->bus, pci_iov_virtfn_bus(dev, id));
148         if (!bus)
149                 goto failed;
150
151         virtfn = pci_alloc_dev(bus);
152         if (!virtfn)
153                 goto failed0;
154
155         virtfn->devfn = pci_iov_virtfn_devfn(dev, id);
156         virtfn->vendor = dev->vendor;
157         virtfn->device = iov->vf_device;
158         virtfn->is_virtfn = 1;
159         virtfn->physfn = pci_dev_get(dev);
160
161         if (id == 0)
162                 pci_read_vf_config_common(virtfn);
163
164         rc = pci_setup_device(virtfn);
165         if (rc)
166                 goto failed1;
167
168         virtfn->dev.parent = dev->dev.parent;
169         virtfn->multifunction = 0;
170
171         for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
172                 res = &dev->resource[i + PCI_IOV_RESOURCES];
173                 if (!res->parent)
174                         continue;
175                 virtfn->resource[i].name = pci_name(virtfn);
176                 virtfn->resource[i].flags = res->flags;
177                 size = pci_iov_resource_size(dev, i + PCI_IOV_RESOURCES);
178                 virtfn->resource[i].start = res->start + size * id;
179                 virtfn->resource[i].end = virtfn->resource[i].start + size - 1;
180                 rc = request_resource(res, &virtfn->resource[i]);
181                 BUG_ON(rc);
182         }
183
184         pci_device_add(virtfn, virtfn->bus);
185
186         sprintf(buf, "virtfn%u", id);
187         rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf);
188         if (rc)
189                 goto failed1;
190         rc = sysfs_create_link(&virtfn->dev.kobj, &dev->dev.kobj, "physfn");
191         if (rc)
192                 goto failed2;
193
194         kobject_uevent(&virtfn->dev.kobj, KOBJ_CHANGE);
195
196         pci_bus_add_device(virtfn);
197
198         return 0;
199
200 failed2:
201         sysfs_remove_link(&dev->dev.kobj, buf);
202 failed1:
203         pci_stop_and_remove_bus_device(virtfn);
204         pci_dev_put(dev);
205 failed0:
206         virtfn_remove_bus(dev->bus, bus);
207 failed:
208
209         return rc;
210 }
211
212 void pci_iov_remove_virtfn(struct pci_dev *dev, int id)
213 {
214         char buf[VIRTFN_ID_LEN];
215         struct pci_dev *virtfn;
216
217         virtfn = pci_get_domain_bus_and_slot(pci_domain_nr(dev->bus),
218                                              pci_iov_virtfn_bus(dev, id),
219                                              pci_iov_virtfn_devfn(dev, id));
220         if (!virtfn)
221                 return;
222
223         sprintf(buf, "virtfn%u", id);
224         sysfs_remove_link(&dev->dev.kobj, buf);
225         /*
226          * pci_stop_dev() could have been called for this virtfn already,
227          * so the directory for the virtfn may have been removed before.
228          * Double check to avoid spurious sysfs warnings.
229          */
230         if (virtfn->dev.kobj.sd)
231                 sysfs_remove_link(&virtfn->dev.kobj, "physfn");
232
233         pci_stop_and_remove_bus_device(virtfn);
234         virtfn_remove_bus(dev->bus, virtfn->bus);
235
236         /* balance pci_get_domain_bus_and_slot() */
237         pci_dev_put(virtfn);
238         pci_dev_put(dev);
239 }
240
241 static ssize_t sriov_totalvfs_show(struct device *dev,
242                                    struct device_attribute *attr,
243                                    char *buf)
244 {
245         struct pci_dev *pdev = to_pci_dev(dev);
246
247         return sprintf(buf, "%u\n", pci_sriov_get_totalvfs(pdev));
248 }
249
250 static ssize_t sriov_numvfs_show(struct device *dev,
251                                  struct device_attribute *attr,
252                                  char *buf)
253 {
254         struct pci_dev *pdev = to_pci_dev(dev);
255         u16 num_vfs;
256
257         /* Serialize vs sriov_numvfs_store() so readers see valid num_VFs */
258         device_lock(&pdev->dev);
259         num_vfs = pdev->sriov->num_VFs;
260         device_unlock(&pdev->dev);
261
262         return sprintf(buf, "%u\n", num_vfs);
263 }
264
265 /*
266  * num_vfs > 0; number of VFs to enable
267  * num_vfs = 0; disable all VFs
268  *
269  * Note: SRIOV spec does not allow partial VF
270  *       disable, so it's all or none.
271  */
272 static ssize_t sriov_numvfs_store(struct device *dev,
273                                   struct device_attribute *attr,
274                                   const char *buf, size_t count)
275 {
276         struct pci_dev *pdev = to_pci_dev(dev);
277         int ret;
278         u16 num_vfs;
279
280         ret = kstrtou16(buf, 0, &num_vfs);
281         if (ret < 0)
282                 return ret;
283
284         if (num_vfs > pci_sriov_get_totalvfs(pdev))
285                 return -ERANGE;
286
287         device_lock(&pdev->dev);
288
289         if (num_vfs == pdev->sriov->num_VFs)
290                 goto exit;
291
292         /* is PF driver loaded w/callback */
293         if (!pdev->driver || !pdev->driver->sriov_configure) {
294                 pci_info(pdev, "Driver does not support SRIOV configuration via sysfs\n");
295                 ret = -ENOENT;
296                 goto exit;
297         }
298
299         if (num_vfs == 0) {
300                 /* disable VFs */
301                 ret = pdev->driver->sriov_configure(pdev, 0);
302                 goto exit;
303         }
304
305         /* enable VFs */
306         if (pdev->sriov->num_VFs) {
307                 pci_warn(pdev, "%d VFs already enabled. Disable before enabling %d VFs\n",
308                          pdev->sriov->num_VFs, num_vfs);
309                 ret = -EBUSY;
310                 goto exit;
311         }
312
313         ret = pdev->driver->sriov_configure(pdev, num_vfs);
314         if (ret < 0)
315                 goto exit;
316
317         if (ret != num_vfs)
318                 pci_warn(pdev, "%d VFs requested; only %d enabled\n",
319                          num_vfs, ret);
320
321 exit:
322         device_unlock(&pdev->dev);
323
324         if (ret < 0)
325                 return ret;
326
327         return count;
328 }
329
330 static ssize_t sriov_offset_show(struct device *dev,
331                                  struct device_attribute *attr,
332                                  char *buf)
333 {
334         struct pci_dev *pdev = to_pci_dev(dev);
335
336         return sprintf(buf, "%u\n", pdev->sriov->offset);
337 }
338
339 static ssize_t sriov_stride_show(struct device *dev,
340                                  struct device_attribute *attr,
341                                  char *buf)
342 {
343         struct pci_dev *pdev = to_pci_dev(dev);
344
345         return sprintf(buf, "%u\n", pdev->sriov->stride);
346 }
347
348 static ssize_t sriov_vf_device_show(struct device *dev,
349                                     struct device_attribute *attr,
350                                     char *buf)
351 {
352         struct pci_dev *pdev = to_pci_dev(dev);
353
354         return sprintf(buf, "%x\n", pdev->sriov->vf_device);
355 }
356
357 static ssize_t sriov_drivers_autoprobe_show(struct device *dev,
358                                             struct device_attribute *attr,
359                                             char *buf)
360 {
361         struct pci_dev *pdev = to_pci_dev(dev);
362
363         return sprintf(buf, "%u\n", pdev->sriov->drivers_autoprobe);
364 }
365
366 static ssize_t sriov_drivers_autoprobe_store(struct device *dev,
367                                              struct device_attribute *attr,
368                                              const char *buf, size_t count)
369 {
370         struct pci_dev *pdev = to_pci_dev(dev);
371         bool drivers_autoprobe;
372
373         if (kstrtobool(buf, &drivers_autoprobe) < 0)
374                 return -EINVAL;
375
376         pdev->sriov->drivers_autoprobe = drivers_autoprobe;
377
378         return count;
379 }
380
381 static DEVICE_ATTR_RO(sriov_totalvfs);
382 static DEVICE_ATTR_RW(sriov_numvfs);
383 static DEVICE_ATTR_RO(sriov_offset);
384 static DEVICE_ATTR_RO(sriov_stride);
385 static DEVICE_ATTR_RO(sriov_vf_device);
386 static DEVICE_ATTR_RW(sriov_drivers_autoprobe);
387
388 static struct attribute *sriov_dev_attrs[] = {
389         &dev_attr_sriov_totalvfs.attr,
390         &dev_attr_sriov_numvfs.attr,
391         &dev_attr_sriov_offset.attr,
392         &dev_attr_sriov_stride.attr,
393         &dev_attr_sriov_vf_device.attr,
394         &dev_attr_sriov_drivers_autoprobe.attr,
395         NULL,
396 };
397
398 static umode_t sriov_attrs_are_visible(struct kobject *kobj,
399                                        struct attribute *a, int n)
400 {
401         struct device *dev = kobj_to_dev(kobj);
402
403         if (!dev_is_pf(dev))
404                 return 0;
405
406         return a->mode;
407 }
408
409 const struct attribute_group sriov_dev_attr_group = {
410         .attrs = sriov_dev_attrs,
411         .is_visible = sriov_attrs_are_visible,
412 };
413
414 int __weak pcibios_sriov_enable(struct pci_dev *pdev, u16 num_vfs)
415 {
416         return 0;
417 }
418
419 int __weak pcibios_sriov_disable(struct pci_dev *pdev)
420 {
421         return 0;
422 }
423
424 static int sriov_add_vfs(struct pci_dev *dev, u16 num_vfs)
425 {
426         unsigned int i;
427         int rc;
428
429         if (dev->no_vf_scan)
430                 return 0;
431
432         for (i = 0; i < num_vfs; i++) {
433                 rc = pci_iov_add_virtfn(dev, i);
434                 if (rc)
435                         goto failed;
436         }
437         return 0;
438 failed:
439         while (i--)
440                 pci_iov_remove_virtfn(dev, i);
441
442         return rc;
443 }
444
445 static int sriov_enable(struct pci_dev *dev, int nr_virtfn)
446 {
447         int rc;
448         int i;
449         int nres;
450         u16 initial;
451         struct resource *res;
452         struct pci_dev *pdev;
453         struct pci_sriov *iov = dev->sriov;
454         int bars = 0;
455         int bus;
456
457         if (!nr_virtfn)
458                 return 0;
459
460         if (iov->num_VFs)
461                 return -EINVAL;
462
463         pci_read_config_word(dev, iov->pos + PCI_SRIOV_INITIAL_VF, &initial);
464         if (initial > iov->total_VFs ||
465             (!(iov->cap & PCI_SRIOV_CAP_VFM) && (initial != iov->total_VFs)))
466                 return -EIO;
467
468         if (nr_virtfn < 0 || nr_virtfn > iov->total_VFs ||
469             (!(iov->cap & PCI_SRIOV_CAP_VFM) && (nr_virtfn > initial)))
470                 return -EINVAL;
471
472         nres = 0;
473         for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
474                 bars |= (1 << (i + PCI_IOV_RESOURCES));
475                 res = &dev->resource[i + PCI_IOV_RESOURCES];
476                 if (res->parent)
477                         nres++;
478         }
479         if (nres != iov->nres) {
480                 pci_err(dev, "not enough MMIO resources for SR-IOV\n");
481                 return -ENOMEM;
482         }
483
484         bus = pci_iov_virtfn_bus(dev, nr_virtfn - 1);
485         if (bus > dev->bus->busn_res.end) {
486                 pci_err(dev, "can't enable %d VFs (bus %02x out of range of %pR)\n",
487                         nr_virtfn, bus, &dev->bus->busn_res);
488                 return -ENOMEM;
489         }
490
491         if (pci_enable_resources(dev, bars)) {
492                 pci_err(dev, "SR-IOV: IOV BARS not allocated\n");
493                 return -ENOMEM;
494         }
495
496         if (iov->link != dev->devfn) {
497                 pdev = pci_get_slot(dev->bus, iov->link);
498                 if (!pdev)
499                         return -ENODEV;
500
501                 if (!pdev->is_physfn) {
502                         pci_dev_put(pdev);
503                         return -ENOSYS;
504                 }
505
506                 rc = sysfs_create_link(&dev->dev.kobj,
507                                         &pdev->dev.kobj, "dep_link");
508                 pci_dev_put(pdev);
509                 if (rc)
510                         return rc;
511         }
512
513         iov->initial_VFs = initial;
514         if (nr_virtfn < initial)
515                 initial = nr_virtfn;
516
517         rc = pcibios_sriov_enable(dev, initial);
518         if (rc) {
519                 pci_err(dev, "failure %d from pcibios_sriov_enable()\n", rc);
520                 goto err_pcibios;
521         }
522
523         pci_iov_set_numvfs(dev, nr_virtfn);
524         iov->ctrl |= PCI_SRIOV_CTRL_VFE | PCI_SRIOV_CTRL_MSE;
525         pci_cfg_access_lock(dev);
526         pci_write_config_word(dev, iov->pos + PCI_SRIOV_CTRL, iov->ctrl);
527         msleep(100);
528         pci_cfg_access_unlock(dev);
529
530         rc = sriov_add_vfs(dev, initial);
531         if (rc)
532                 goto err_pcibios;
533
534         kobject_uevent(&dev->dev.kobj, KOBJ_CHANGE);
535         iov->num_VFs = nr_virtfn;
536
537         return 0;
538
539 err_pcibios:
540         iov->ctrl &= ~(PCI_SRIOV_CTRL_VFE | PCI_SRIOV_CTRL_MSE);
541         pci_cfg_access_lock(dev);
542         pci_write_config_word(dev, iov->pos + PCI_SRIOV_CTRL, iov->ctrl);
543         ssleep(1);
544         pci_cfg_access_unlock(dev);
545
546         pcibios_sriov_disable(dev);
547
548         if (iov->link != dev->devfn)
549                 sysfs_remove_link(&dev->dev.kobj, "dep_link");
550
551         pci_iov_set_numvfs(dev, 0);
552         return rc;
553 }
554
555 static void sriov_del_vfs(struct pci_dev *dev)
556 {
557         struct pci_sriov *iov = dev->sriov;
558         int i;
559
560         if (dev->no_vf_scan)
561                 return;
562
563         for (i = 0; i < iov->num_VFs; i++)
564                 pci_iov_remove_virtfn(dev, i);
565 }
566
567 static void sriov_disable(struct pci_dev *dev)
568 {
569         struct pci_sriov *iov = dev->sriov;
570
571         if (!iov->num_VFs)
572                 return;
573
574         sriov_del_vfs(dev);
575         iov->ctrl &= ~(PCI_SRIOV_CTRL_VFE | PCI_SRIOV_CTRL_MSE);
576         pci_cfg_access_lock(dev);
577         pci_write_config_word(dev, iov->pos + PCI_SRIOV_CTRL, iov->ctrl);
578         ssleep(1);
579         pci_cfg_access_unlock(dev);
580
581         pcibios_sriov_disable(dev);
582
583         if (iov->link != dev->devfn)
584                 sysfs_remove_link(&dev->dev.kobj, "dep_link");
585
586         iov->num_VFs = 0;
587         pci_iov_set_numvfs(dev, 0);
588 }
589
590 static int sriov_init(struct pci_dev *dev, int pos)
591 {
592         int i, bar64;
593         int rc;
594         int nres;
595         u32 pgsz;
596         u16 ctrl, total;
597         struct pci_sriov *iov;
598         struct resource *res;
599         struct pci_dev *pdev;
600
601         pci_read_config_word(dev, pos + PCI_SRIOV_CTRL, &ctrl);
602         if (ctrl & PCI_SRIOV_CTRL_VFE) {
603                 pci_write_config_word(dev, pos + PCI_SRIOV_CTRL, 0);
604                 ssleep(1);
605         }
606
607         ctrl = 0;
608         list_for_each_entry(pdev, &dev->bus->devices, bus_list)
609                 if (pdev->is_physfn)
610                         goto found;
611
612         pdev = NULL;
613         if (pci_ari_enabled(dev->bus))
614                 ctrl |= PCI_SRIOV_CTRL_ARI;
615
616 found:
617         pci_write_config_word(dev, pos + PCI_SRIOV_CTRL, ctrl);
618
619         pci_read_config_word(dev, pos + PCI_SRIOV_TOTAL_VF, &total);
620         if (!total)
621                 return 0;
622
623         pci_read_config_dword(dev, pos + PCI_SRIOV_SUP_PGSIZE, &pgsz);
624         i = PAGE_SHIFT > 12 ? PAGE_SHIFT - 12 : 0;
625         pgsz &= ~((1 << i) - 1);
626         if (!pgsz)
627                 return -EIO;
628
629         pgsz &= ~(pgsz - 1);
630         pci_write_config_dword(dev, pos + PCI_SRIOV_SYS_PGSIZE, pgsz);
631
632         iov = kzalloc(sizeof(*iov), GFP_KERNEL);
633         if (!iov)
634                 return -ENOMEM;
635
636         nres = 0;
637         for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
638                 res = &dev->resource[i + PCI_IOV_RESOURCES];
639                 /*
640                  * If it is already FIXED, don't change it, something
641                  * (perhaps EA or header fixups) wants it this way.
642                  */
643                 if (res->flags & IORESOURCE_PCI_FIXED)
644                         bar64 = (res->flags & IORESOURCE_MEM_64) ? 1 : 0;
645                 else
646                         bar64 = __pci_read_base(dev, pci_bar_unknown, res,
647                                                 pos + PCI_SRIOV_BAR + i * 4);
648                 if (!res->flags)
649                         continue;
650                 if (resource_size(res) & (PAGE_SIZE - 1)) {
651                         rc = -EIO;
652                         goto failed;
653                 }
654                 iov->barsz[i] = resource_size(res);
655                 res->end = res->start + resource_size(res) * total - 1;
656                 pci_info(dev, "VF(n) BAR%d space: %pR (contains BAR%d for %d VFs)\n",
657                          i, res, i, total);
658                 i += bar64;
659                 nres++;
660         }
661
662         iov->pos = pos;
663         iov->nres = nres;
664         iov->ctrl = ctrl;
665         iov->total_VFs = total;
666         iov->driver_max_VFs = total;
667         pci_read_config_word(dev, pos + PCI_SRIOV_VF_DID, &iov->vf_device);
668         iov->pgsz = pgsz;
669         iov->self = dev;
670         iov->drivers_autoprobe = true;
671         pci_read_config_dword(dev, pos + PCI_SRIOV_CAP, &iov->cap);
672         pci_read_config_byte(dev, pos + PCI_SRIOV_FUNC_LINK, &iov->link);
673         if (pci_pcie_type(dev) == PCI_EXP_TYPE_RC_END)
674                 iov->link = PCI_DEVFN(PCI_SLOT(dev->devfn), iov->link);
675
676         if (pdev)
677                 iov->dev = pci_dev_get(pdev);
678         else
679                 iov->dev = dev;
680
681         dev->sriov = iov;
682         dev->is_physfn = 1;
683         rc = compute_max_vf_buses(dev);
684         if (rc)
685                 goto fail_max_buses;
686
687         return 0;
688
689 fail_max_buses:
690         dev->sriov = NULL;
691         dev->is_physfn = 0;
692 failed:
693         for (i = 0; i < PCI_SRIOV_NUM_BARS; i++) {
694                 res = &dev->resource[i + PCI_IOV_RESOURCES];
695                 res->flags = 0;
696         }
697
698         kfree(iov);
699         return rc;
700 }
701
702 static void sriov_release(struct pci_dev *dev)
703 {
704         BUG_ON(dev->sriov->num_VFs);
705
706         if (dev != dev->sriov->dev)
707                 pci_dev_put(dev->sriov->dev);
708
709         kfree(dev->sriov);
710         dev->sriov = NULL;
711 }
712
713 static void sriov_restore_state(struct pci_dev *dev)
714 {
715         int i;
716         u16 ctrl;
717         struct pci_sriov *iov = dev->sriov;
718
719         pci_read_config_word(dev, iov->pos + PCI_SRIOV_CTRL, &ctrl);
720         if (ctrl & PCI_SRIOV_CTRL_VFE)
721                 return;
722
723         /*
724          * Restore PCI_SRIOV_CTRL_ARI before pci_iov_set_numvfs() because
725          * it reads offset & stride, which depend on PCI_SRIOV_CTRL_ARI.
726          */
727         ctrl &= ~PCI_SRIOV_CTRL_ARI;
728         ctrl |= iov->ctrl & PCI_SRIOV_CTRL_ARI;
729         pci_write_config_word(dev, iov->pos + PCI_SRIOV_CTRL, ctrl);
730
731         for (i = 0; i < PCI_SRIOV_NUM_BARS; i++)
732                 pci_update_resource(dev, i + PCI_IOV_RESOURCES);
733
734         pci_write_config_dword(dev, iov->pos + PCI_SRIOV_SYS_PGSIZE, iov->pgsz);
735         pci_iov_set_numvfs(dev, iov->num_VFs);
736         pci_write_config_word(dev, iov->pos + PCI_SRIOV_CTRL, iov->ctrl);
737         if (iov->ctrl & PCI_SRIOV_CTRL_VFE)
738                 msleep(100);
739 }
740
741 /**
742  * pci_iov_init - initialize the IOV capability
743  * @dev: the PCI device
744  *
745  * Returns 0 on success, or negative on failure.
746  */
747 int pci_iov_init(struct pci_dev *dev)
748 {
749         int pos;
750
751         if (!pci_is_pcie(dev))
752                 return -ENODEV;
753
754         pos = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_SRIOV);
755         if (pos)
756                 return sriov_init(dev, pos);
757
758         return -ENODEV;
759 }
760
761 /**
762  * pci_iov_release - release resources used by the IOV capability
763  * @dev: the PCI device
764  */
765 void pci_iov_release(struct pci_dev *dev)
766 {
767         if (dev->is_physfn)
768                 sriov_release(dev);
769 }
770
771 /**
772  * pci_iov_remove - clean up SR-IOV state after PF driver is detached
773  * @dev: the PCI device
774  */
775 void pci_iov_remove(struct pci_dev *dev)
776 {
777         struct pci_sriov *iov = dev->sriov;
778
779         if (!dev->is_physfn)
780                 return;
781
782         iov->driver_max_VFs = iov->total_VFs;
783         if (iov->num_VFs)
784                 pci_warn(dev, "driver left SR-IOV enabled after remove\n");
785 }
786
787 /**
788  * pci_iov_update_resource - update a VF BAR
789  * @dev: the PCI device
790  * @resno: the resource number
791  *
792  * Update a VF BAR in the SR-IOV capability of a PF.
793  */
794 void pci_iov_update_resource(struct pci_dev *dev, int resno)
795 {
796         struct pci_sriov *iov = dev->is_physfn ? dev->sriov : NULL;
797         struct resource *res = dev->resource + resno;
798         int vf_bar = resno - PCI_IOV_RESOURCES;
799         struct pci_bus_region region;
800         u16 cmd;
801         u32 new;
802         int reg;
803
804         /*
805          * The generic pci_restore_bars() path calls this for all devices,
806          * including VFs and non-SR-IOV devices.  If this is not a PF, we
807          * have nothing to do.
808          */
809         if (!iov)
810                 return;
811
812         pci_read_config_word(dev, iov->pos + PCI_SRIOV_CTRL, &cmd);
813         if ((cmd & PCI_SRIOV_CTRL_VFE) && (cmd & PCI_SRIOV_CTRL_MSE)) {
814                 dev_WARN(&dev->dev, "can't update enabled VF BAR%d %pR\n",
815                          vf_bar, res);
816                 return;
817         }
818
819         /*
820          * Ignore unimplemented BARs, unused resource slots for 64-bit
821          * BARs, and non-movable resources, e.g., those described via
822          * Enhanced Allocation.
823          */
824         if (!res->flags)
825                 return;
826
827         if (res->flags & IORESOURCE_UNSET)
828                 return;
829
830         if (res->flags & IORESOURCE_PCI_FIXED)
831                 return;
832
833         pcibios_resource_to_bus(dev->bus, &region, res);
834         new = region.start;
835         new |= res->flags & ~PCI_BASE_ADDRESS_MEM_MASK;
836
837         reg = iov->pos + PCI_SRIOV_BAR + 4 * vf_bar;
838         pci_write_config_dword(dev, reg, new);
839         if (res->flags & IORESOURCE_MEM_64) {
840                 new = region.start >> 16 >> 16;
841                 pci_write_config_dword(dev, reg + 4, new);
842         }
843 }
844
845 resource_size_t __weak pcibios_iov_resource_alignment(struct pci_dev *dev,
846                                                       int resno)
847 {
848         return pci_iov_resource_size(dev, resno);
849 }
850
851 /**
852  * pci_sriov_resource_alignment - get resource alignment for VF BAR
853  * @dev: the PCI device
854  * @resno: the resource number
855  *
856  * Returns the alignment of the VF BAR found in the SR-IOV capability.
857  * This is not the same as the resource size which is defined as
858  * the VF BAR size multiplied by the number of VFs.  The alignment
859  * is just the VF BAR size.
860  */
861 resource_size_t pci_sriov_resource_alignment(struct pci_dev *dev, int resno)
862 {
863         return pcibios_iov_resource_alignment(dev, resno);
864 }
865
866 /**
867  * pci_restore_iov_state - restore the state of the IOV capability
868  * @dev: the PCI device
869  */
870 void pci_restore_iov_state(struct pci_dev *dev)
871 {
872         if (dev->is_physfn)
873                 sriov_restore_state(dev);
874 }
875
876 /**
877  * pci_vf_drivers_autoprobe - set PF property drivers_autoprobe for VFs
878  * @dev: the PCI device
879  * @auto_probe: set VF drivers auto probe flag
880  */
881 void pci_vf_drivers_autoprobe(struct pci_dev *dev, bool auto_probe)
882 {
883         if (dev->is_physfn)
884                 dev->sriov->drivers_autoprobe = auto_probe;
885 }
886
887 /**
888  * pci_iov_bus_range - find bus range used by Virtual Function
889  * @bus: the PCI bus
890  *
891  * Returns max number of buses (exclude current one) used by Virtual
892  * Functions.
893  */
894 int pci_iov_bus_range(struct pci_bus *bus)
895 {
896         int max = 0;
897         struct pci_dev *dev;
898
899         list_for_each_entry(dev, &bus->devices, bus_list) {
900                 if (!dev->is_physfn)
901                         continue;
902                 if (dev->sriov->max_VF_buses > max)
903                         max = dev->sriov->max_VF_buses;
904         }
905
906         return max ? max - bus->number : 0;
907 }
908
909 /**
910  * pci_enable_sriov - enable the SR-IOV capability
911  * @dev: the PCI device
912  * @nr_virtfn: number of virtual functions to enable
913  *
914  * Returns 0 on success, or negative on failure.
915  */
916 int pci_enable_sriov(struct pci_dev *dev, int nr_virtfn)
917 {
918         might_sleep();
919
920         if (!dev->is_physfn)
921                 return -ENOSYS;
922
923         return sriov_enable(dev, nr_virtfn);
924 }
925 EXPORT_SYMBOL_GPL(pci_enable_sriov);
926
927 /**
928  * pci_disable_sriov - disable the SR-IOV capability
929  * @dev: the PCI device
930  */
931 void pci_disable_sriov(struct pci_dev *dev)
932 {
933         might_sleep();
934
935         if (!dev->is_physfn)
936                 return;
937
938         sriov_disable(dev);
939 }
940 EXPORT_SYMBOL_GPL(pci_disable_sriov);
941
942 /**
943  * pci_num_vf - return number of VFs associated with a PF device_release_driver
944  * @dev: the PCI device
945  *
946  * Returns number of VFs, or 0 if SR-IOV is not enabled.
947  */
948 int pci_num_vf(struct pci_dev *dev)
949 {
950         if (!dev->is_physfn)
951                 return 0;
952
953         return dev->sriov->num_VFs;
954 }
955 EXPORT_SYMBOL_GPL(pci_num_vf);
956
957 /**
958  * pci_vfs_assigned - returns number of VFs are assigned to a guest
959  * @dev: the PCI device
960  *
961  * Returns number of VFs belonging to this device that are assigned to a guest.
962  * If device is not a physical function returns 0.
963  */
964 int pci_vfs_assigned(struct pci_dev *dev)
965 {
966         struct pci_dev *vfdev;
967         unsigned int vfs_assigned = 0;
968         unsigned short dev_id;
969
970         /* only search if we are a PF */
971         if (!dev->is_physfn)
972                 return 0;
973
974         /*
975          * determine the device ID for the VFs, the vendor ID will be the
976          * same as the PF so there is no need to check for that one
977          */
978         dev_id = dev->sriov->vf_device;
979
980         /* loop through all the VFs to see if we own any that are assigned */
981         vfdev = pci_get_device(dev->vendor, dev_id, NULL);
982         while (vfdev) {
983                 /*
984                  * It is considered assigned if it is a virtual function with
985                  * our dev as the physical function and the assigned bit is set
986                  */
987                 if (vfdev->is_virtfn && (vfdev->physfn == dev) &&
988                         pci_is_dev_assigned(vfdev))
989                         vfs_assigned++;
990
991                 vfdev = pci_get_device(dev->vendor, dev_id, vfdev);
992         }
993
994         return vfs_assigned;
995 }
996 EXPORT_SYMBOL_GPL(pci_vfs_assigned);
997
998 /**
999  * pci_sriov_set_totalvfs -- reduce the TotalVFs available
1000  * @dev: the PCI PF device
1001  * @numvfs: number that should be used for TotalVFs supported
1002  *
1003  * Should be called from PF driver's probe routine with
1004  * device's mutex held.
1005  *
1006  * Returns 0 if PF is an SRIOV-capable device and
1007  * value of numvfs valid. If not a PF return -ENOSYS;
1008  * if numvfs is invalid return -EINVAL;
1009  * if VFs already enabled, return -EBUSY.
1010  */
1011 int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs)
1012 {
1013         if (!dev->is_physfn)
1014                 return -ENOSYS;
1015
1016         if (numvfs > dev->sriov->total_VFs)
1017                 return -EINVAL;
1018
1019         /* Shouldn't change if VFs already enabled */
1020         if (dev->sriov->ctrl & PCI_SRIOV_CTRL_VFE)
1021                 return -EBUSY;
1022
1023         dev->sriov->driver_max_VFs = numvfs;
1024         return 0;
1025 }
1026 EXPORT_SYMBOL_GPL(pci_sriov_set_totalvfs);
1027
1028 /**
1029  * pci_sriov_get_totalvfs -- get total VFs supported on this device
1030  * @dev: the PCI PF device
1031  *
1032  * For a PCIe device with SRIOV support, return the PCIe
1033  * SRIOV capability value of TotalVFs or the value of driver_max_VFs
1034  * if the driver reduced it.  Otherwise 0.
1035  */
1036 int pci_sriov_get_totalvfs(struct pci_dev *dev)
1037 {
1038         if (!dev->is_physfn)
1039                 return 0;
1040
1041         return dev->sriov->driver_max_VFs;
1042 }
1043 EXPORT_SYMBOL_GPL(pci_sriov_get_totalvfs);
1044
1045 /**
1046  * pci_sriov_configure_simple - helper to configure SR-IOV
1047  * @dev: the PCI device
1048  * @nr_virtfn: number of virtual functions to enable, 0 to disable
1049  *
1050  * Enable or disable SR-IOV for devices that don't require any PF setup
1051  * before enabling SR-IOV.  Return value is negative on error, or number of
1052  * VFs allocated on success.
1053  */
1054 int pci_sriov_configure_simple(struct pci_dev *dev, int nr_virtfn)
1055 {
1056         int rc;
1057
1058         might_sleep();
1059
1060         if (!dev->is_physfn)
1061                 return -ENODEV;
1062
1063         if (pci_vfs_assigned(dev)) {
1064                 pci_warn(dev, "Cannot modify SR-IOV while VFs are assigned\n");
1065                 return -EPERM;
1066         }
1067
1068         if (nr_virtfn == 0) {
1069                 sriov_disable(dev);
1070                 return 0;
1071         }
1072
1073         rc = sriov_enable(dev, nr_virtfn);
1074         if (rc < 0)
1075                 return rc;
1076
1077         return nr_virtfn;
1078 }
1079 EXPORT_SYMBOL_GPL(pci_sriov_configure_simple);