PCI/MSI: Reject multi-MSI early
[sfrench/cifs-2.6.git] / drivers / pci / msi / msi.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * PCI Message Signaled Interrupt (MSI)
4  *
5  * Copyright (C) 2003-2004 Intel
6  * Copyright (C) Tom Long Nguyen (tom.l.nguyen@intel.com)
7  * Copyright (C) 2016 Christoph Hellwig.
8  */
9 #include <linux/err.h>
10 #include <linux/export.h>
11 #include <linux/irq.h>
12
13 #include "../pci.h"
14 #include "msi.h"
15
16 int pci_msi_enable = 1;
17 int pci_msi_ignore_mask;
18
19 /**
20  * pci_msi_supported - check whether MSI may be enabled on a device
21  * @dev: pointer to the pci_dev data structure of MSI device function
22  * @nvec: how many MSIs have been requested?
23  *
24  * Look at global flags, the device itself, and its parent buses
25  * to determine if MSI/-X are supported for the device. If MSI/-X is
26  * supported return 1, else return 0.
27  **/
28 static int pci_msi_supported(struct pci_dev *dev, int nvec)
29 {
30         struct pci_bus *bus;
31
32         /* MSI must be globally enabled and supported by the device */
33         if (!pci_msi_enable)
34                 return 0;
35
36         if (!dev || dev->no_msi)
37                 return 0;
38
39         /*
40          * You can't ask to have 0 or less MSIs configured.
41          *  a) it's stupid ..
42          *  b) the list manipulation code assumes nvec >= 1.
43          */
44         if (nvec < 1)
45                 return 0;
46
47         /*
48          * Any bridge which does NOT route MSI transactions from its
49          * secondary bus to its primary bus must set NO_MSI flag on
50          * the secondary pci_bus.
51          *
52          * The NO_MSI flag can either be set directly by:
53          * - arch-specific PCI host bus controller drivers (deprecated)
54          * - quirks for specific PCI bridges
55          *
56          * or indirectly by platform-specific PCI host bridge drivers by
57          * advertising the 'msi_domain' property, which results in
58          * the NO_MSI flag when no MSI domain is found for this bridge
59          * at probe time.
60          */
61         for (bus = dev->bus; bus; bus = bus->parent)
62                 if (bus->bus_flags & PCI_BUS_FLAGS_NO_MSI)
63                         return 0;
64
65         return 1;
66 }
67
68 static void pcim_msi_release(void *pcidev)
69 {
70         struct pci_dev *dev = pcidev;
71
72         dev->is_msi_managed = false;
73         pci_free_irq_vectors(dev);
74 }
75
76 /*
77  * Needs to be separate from pcim_release to prevent an ordering problem
78  * vs. msi_device_data_release() in the MSI core code.
79  */
80 static int pcim_setup_msi_release(struct pci_dev *dev)
81 {
82         int ret;
83
84         if (!pci_is_managed(dev) || dev->is_msi_managed)
85                 return 0;
86
87         ret = devm_add_action(&dev->dev, pcim_msi_release, dev);
88         if (!ret)
89                 dev->is_msi_managed = true;
90         return ret;
91 }
92
93 /*
94  * Ordering vs. devres: msi device data has to be installed first so that
95  * pcim_msi_release() is invoked before it on device release.
96  */
97 static int pci_setup_msi_context(struct pci_dev *dev)
98 {
99         int ret = msi_setup_device_data(&dev->dev);
100
101         if (!ret)
102                 ret = pcim_setup_msi_release(dev);
103         return ret;
104 }
105
106 /*
107  * Helper functions for mask/unmask and MSI message handling
108  */
109
110 void pci_msi_update_mask(struct msi_desc *desc, u32 clear, u32 set)
111 {
112         raw_spinlock_t *lock = &to_pci_dev(desc->dev)->msi_lock;
113         unsigned long flags;
114
115         if (!desc->pci.msi_attrib.can_mask)
116                 return;
117
118         raw_spin_lock_irqsave(lock, flags);
119         desc->pci.msi_mask &= ~clear;
120         desc->pci.msi_mask |= set;
121         pci_write_config_dword(msi_desc_to_pci_dev(desc), desc->pci.mask_pos,
122                                desc->pci.msi_mask);
123         raw_spin_unlock_irqrestore(lock, flags);
124 }
125
126 /**
127  * pci_msi_mask_irq - Generic IRQ chip callback to mask PCI/MSI interrupts
128  * @data:       pointer to irqdata associated to that interrupt
129  */
130 void pci_msi_mask_irq(struct irq_data *data)
131 {
132         struct msi_desc *desc = irq_data_get_msi_desc(data);
133
134         __pci_msi_mask_desc(desc, BIT(data->irq - desc->irq));
135 }
136 EXPORT_SYMBOL_GPL(pci_msi_mask_irq);
137
138 /**
139  * pci_msi_unmask_irq - Generic IRQ chip callback to unmask PCI/MSI interrupts
140  * @data:       pointer to irqdata associated to that interrupt
141  */
142 void pci_msi_unmask_irq(struct irq_data *data)
143 {
144         struct msi_desc *desc = irq_data_get_msi_desc(data);
145
146         __pci_msi_unmask_desc(desc, BIT(data->irq - desc->irq));
147 }
148 EXPORT_SYMBOL_GPL(pci_msi_unmask_irq);
149
150 void __pci_read_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
151 {
152         struct pci_dev *dev = msi_desc_to_pci_dev(entry);
153
154         BUG_ON(dev->current_state != PCI_D0);
155
156         if (entry->pci.msi_attrib.is_msix) {
157                 void __iomem *base = pci_msix_desc_addr(entry);
158
159                 if (WARN_ON_ONCE(entry->pci.msi_attrib.is_virtual))
160                         return;
161
162                 msg->address_lo = readl(base + PCI_MSIX_ENTRY_LOWER_ADDR);
163                 msg->address_hi = readl(base + PCI_MSIX_ENTRY_UPPER_ADDR);
164                 msg->data = readl(base + PCI_MSIX_ENTRY_DATA);
165         } else {
166                 int pos = dev->msi_cap;
167                 u16 data;
168
169                 pci_read_config_dword(dev, pos + PCI_MSI_ADDRESS_LO,
170                                       &msg->address_lo);
171                 if (entry->pci.msi_attrib.is_64) {
172                         pci_read_config_dword(dev, pos + PCI_MSI_ADDRESS_HI,
173                                               &msg->address_hi);
174                         pci_read_config_word(dev, pos + PCI_MSI_DATA_64, &data);
175                 } else {
176                         msg->address_hi = 0;
177                         pci_read_config_word(dev, pos + PCI_MSI_DATA_32, &data);
178                 }
179                 msg->data = data;
180         }
181 }
182
183 void __pci_write_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
184 {
185         struct pci_dev *dev = msi_desc_to_pci_dev(entry);
186
187         if (dev->current_state != PCI_D0 || pci_dev_is_disconnected(dev)) {
188                 /* Don't touch the hardware now */
189         } else if (entry->pci.msi_attrib.is_msix) {
190                 void __iomem *base = pci_msix_desc_addr(entry);
191                 u32 ctrl = entry->pci.msix_ctrl;
192                 bool unmasked = !(ctrl & PCI_MSIX_ENTRY_CTRL_MASKBIT);
193
194                 if (entry->pci.msi_attrib.is_virtual)
195                         goto skip;
196
197                 /*
198                  * The specification mandates that the entry is masked
199                  * when the message is modified:
200                  *
201                  * "If software changes the Address or Data value of an
202                  * entry while the entry is unmasked, the result is
203                  * undefined."
204                  */
205                 if (unmasked)
206                         pci_msix_write_vector_ctrl(entry, ctrl | PCI_MSIX_ENTRY_CTRL_MASKBIT);
207
208                 writel(msg->address_lo, base + PCI_MSIX_ENTRY_LOWER_ADDR);
209                 writel(msg->address_hi, base + PCI_MSIX_ENTRY_UPPER_ADDR);
210                 writel(msg->data, base + PCI_MSIX_ENTRY_DATA);
211
212                 if (unmasked)
213                         pci_msix_write_vector_ctrl(entry, ctrl);
214
215                 /* Ensure that the writes are visible in the device */
216                 readl(base + PCI_MSIX_ENTRY_DATA);
217         } else {
218                 int pos = dev->msi_cap;
219                 u16 msgctl;
220
221                 pci_read_config_word(dev, pos + PCI_MSI_FLAGS, &msgctl);
222                 msgctl &= ~PCI_MSI_FLAGS_QSIZE;
223                 msgctl |= entry->pci.msi_attrib.multiple << 4;
224                 pci_write_config_word(dev, pos + PCI_MSI_FLAGS, msgctl);
225
226                 pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_LO,
227                                        msg->address_lo);
228                 if (entry->pci.msi_attrib.is_64) {
229                         pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_HI,
230                                                msg->address_hi);
231                         pci_write_config_word(dev, pos + PCI_MSI_DATA_64,
232                                               msg->data);
233                 } else {
234                         pci_write_config_word(dev, pos + PCI_MSI_DATA_32,
235                                               msg->data);
236                 }
237                 /* Ensure that the writes are visible in the device */
238                 pci_read_config_word(dev, pos + PCI_MSI_FLAGS, &msgctl);
239         }
240
241 skip:
242         entry->msg = *msg;
243
244         if (entry->write_msi_msg)
245                 entry->write_msi_msg(entry, entry->write_msi_msg_data);
246
247 }
248
249 void pci_write_msi_msg(unsigned int irq, struct msi_msg *msg)
250 {
251         struct msi_desc *entry = irq_get_msi_desc(irq);
252
253         __pci_write_msi_msg(entry, msg);
254 }
255 EXPORT_SYMBOL_GPL(pci_write_msi_msg);
256
257
258 /* PCI/MSI specific functionality */
259
260 static void pci_intx_for_msi(struct pci_dev *dev, int enable)
261 {
262         if (!(dev->dev_flags & PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG))
263                 pci_intx(dev, enable);
264 }
265
266 static void pci_msi_set_enable(struct pci_dev *dev, int enable)
267 {
268         u16 control;
269
270         pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
271         control &= ~PCI_MSI_FLAGS_ENABLE;
272         if (enable)
273                 control |= PCI_MSI_FLAGS_ENABLE;
274         pci_write_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, control);
275 }
276
277 static int msi_setup_msi_desc(struct pci_dev *dev, int nvec,
278                               struct irq_affinity_desc *masks)
279 {
280         struct msi_desc desc;
281         u16 control;
282
283         /* MSI Entry Initialization */
284         memset(&desc, 0, sizeof(desc));
285
286         pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
287         /* Lies, damned lies, and MSIs */
288         if (dev->dev_flags & PCI_DEV_FLAGS_HAS_MSI_MASKING)
289                 control |= PCI_MSI_FLAGS_MASKBIT;
290         /* Respect XEN's mask disabling */
291         if (pci_msi_ignore_mask)
292                 control &= ~PCI_MSI_FLAGS_MASKBIT;
293
294         desc.nvec_used                  = nvec;
295         desc.pci.msi_attrib.is_64       = !!(control & PCI_MSI_FLAGS_64BIT);
296         desc.pci.msi_attrib.can_mask    = !!(control & PCI_MSI_FLAGS_MASKBIT);
297         desc.pci.msi_attrib.default_irq = dev->irq;
298         desc.pci.msi_attrib.multi_cap   = (control & PCI_MSI_FLAGS_QMASK) >> 1;
299         desc.pci.msi_attrib.multiple    = ilog2(__roundup_pow_of_two(nvec));
300         desc.affinity                   = masks;
301
302         if (control & PCI_MSI_FLAGS_64BIT)
303                 desc.pci.mask_pos = dev->msi_cap + PCI_MSI_MASK_64;
304         else
305                 desc.pci.mask_pos = dev->msi_cap + PCI_MSI_MASK_32;
306
307         /* Save the initial mask status */
308         if (desc.pci.msi_attrib.can_mask)
309                 pci_read_config_dword(dev, desc.pci.mask_pos, &desc.pci.msi_mask);
310
311         return msi_add_msi_desc(&dev->dev, &desc);
312 }
313
314 static int msi_verify_entries(struct pci_dev *dev)
315 {
316         struct msi_desc *entry;
317
318         if (!dev->no_64bit_msi)
319                 return 0;
320
321         msi_for_each_desc(entry, &dev->dev, MSI_DESC_ALL) {
322                 if (entry->msg.address_hi) {
323                         pci_err(dev, "arch assigned 64-bit MSI address %#x%08x but device only supports 32 bits\n",
324                                 entry->msg.address_hi, entry->msg.address_lo);
325                         break;
326                 }
327         }
328         return !entry ? 0 : -EIO;
329 }
330
331 /**
332  * msi_capability_init - configure device's MSI capability structure
333  * @dev: pointer to the pci_dev data structure of MSI device function
334  * @nvec: number of interrupts to allocate
335  * @affd: description of automatic IRQ affinity assignments (may be %NULL)
336  *
337  * Setup the MSI capability structure of the device with the requested
338  * number of interrupts.  A return value of zero indicates the successful
339  * setup of an entry with the new MSI IRQ.  A negative return value indicates
340  * an error, and a positive return value indicates the number of interrupts
341  * which could have been allocated.
342  */
343 static int msi_capability_init(struct pci_dev *dev, int nvec,
344                                struct irq_affinity *affd)
345 {
346         struct irq_affinity_desc *masks = NULL;
347         struct msi_desc *entry;
348         int ret;
349
350         /* Reject multi-MSI early on irq domain enabled architectures */
351         if (nvec > 1 && !pci_msi_domain_supports(dev, MSI_FLAG_MULTI_PCI_MSI, ALLOW_LEGACY))
352                 return 1;
353
354         /*
355          * Disable MSI during setup in the hardware, but mark it enabled
356          * so that setup code can evaluate it.
357          */
358         pci_msi_set_enable(dev, 0);
359         dev->msi_enabled = 1;
360
361         if (affd)
362                 masks = irq_create_affinity_masks(nvec, affd);
363
364         msi_lock_descs(&dev->dev);
365         ret = msi_setup_msi_desc(dev, nvec, masks);
366         if (ret)
367                 goto fail;
368
369         /* All MSIs are unmasked by default; mask them all */
370         entry = msi_first_desc(&dev->dev, MSI_DESC_ALL);
371         pci_msi_mask(entry, msi_multi_mask(entry));
372
373         /* Configure MSI capability structure */
374         ret = pci_msi_setup_msi_irqs(dev, nvec, PCI_CAP_ID_MSI);
375         if (ret)
376                 goto err;
377
378         ret = msi_verify_entries(dev);
379         if (ret)
380                 goto err;
381
382         /* Set MSI enabled bits */
383         pci_intx_for_msi(dev, 0);
384         pci_msi_set_enable(dev, 1);
385
386         pcibios_free_irq(dev);
387         dev->irq = entry->irq;
388         goto unlock;
389
390 err:
391         pci_msi_unmask(entry, msi_multi_mask(entry));
392         pci_free_msi_irqs(dev);
393 fail:
394         dev->msi_enabled = 0;
395 unlock:
396         msi_unlock_descs(&dev->dev);
397         kfree(masks);
398         return ret;
399 }
400
401 int __pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec,
402                            struct irq_affinity *affd)
403 {
404         int nvec;
405         int rc;
406
407         if (!pci_msi_supported(dev, minvec) || dev->current_state != PCI_D0)
408                 return -EINVAL;
409
410         /* Check whether driver already requested MSI-X IRQs */
411         if (dev->msix_enabled) {
412                 pci_info(dev, "can't enable MSI (MSI-X already enabled)\n");
413                 return -EINVAL;
414         }
415
416         if (maxvec < minvec)
417                 return -ERANGE;
418
419         if (WARN_ON_ONCE(dev->msi_enabled))
420                 return -EINVAL;
421
422         nvec = pci_msi_vec_count(dev);
423         if (nvec < 0)
424                 return nvec;
425         if (nvec < minvec)
426                 return -ENOSPC;
427
428         if (nvec > maxvec)
429                 nvec = maxvec;
430
431         rc = pci_setup_msi_context(dev);
432         if (rc)
433                 return rc;
434
435         for (;;) {
436                 if (affd) {
437                         nvec = irq_calc_affinity_vectors(minvec, nvec, affd);
438                         if (nvec < minvec)
439                                 return -ENOSPC;
440                 }
441
442                 rc = msi_capability_init(dev, nvec, affd);
443                 if (rc == 0)
444                         return nvec;
445
446                 if (rc < 0)
447                         return rc;
448                 if (rc < minvec)
449                         return -ENOSPC;
450
451                 nvec = rc;
452         }
453 }
454
455 /**
456  * pci_msi_vec_count - Return the number of MSI vectors a device can send
457  * @dev: device to report about
458  *
459  * This function returns the number of MSI vectors a device requested via
460  * Multiple Message Capable register. It returns a negative errno if the
461  * device is not capable sending MSI interrupts. Otherwise, the call succeeds
462  * and returns a power of two, up to a maximum of 2^5 (32), according to the
463  * MSI specification.
464  **/
465 int pci_msi_vec_count(struct pci_dev *dev)
466 {
467         int ret;
468         u16 msgctl;
469
470         if (!dev->msi_cap)
471                 return -EINVAL;
472
473         pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &msgctl);
474         ret = 1 << ((msgctl & PCI_MSI_FLAGS_QMASK) >> 1);
475
476         return ret;
477 }
478 EXPORT_SYMBOL(pci_msi_vec_count);
479
480 /*
481  * Architecture override returns true when the PCI MSI message should be
482  * written by the generic restore function.
483  */
484 bool __weak arch_restore_msi_irqs(struct pci_dev *dev)
485 {
486         return true;
487 }
488
489 void __pci_restore_msi_state(struct pci_dev *dev)
490 {
491         struct msi_desc *entry;
492         u16 control;
493
494         if (!dev->msi_enabled)
495                 return;
496
497         entry = irq_get_msi_desc(dev->irq);
498
499         pci_intx_for_msi(dev, 0);
500         pci_msi_set_enable(dev, 0);
501         if (arch_restore_msi_irqs(dev))
502                 __pci_write_msi_msg(entry, &entry->msg);
503
504         pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
505         pci_msi_update_mask(entry, 0, 0);
506         control &= ~PCI_MSI_FLAGS_QSIZE;
507         control |= (entry->pci.msi_attrib.multiple << 4) | PCI_MSI_FLAGS_ENABLE;
508         pci_write_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, control);
509 }
510
511 void pci_msi_shutdown(struct pci_dev *dev)
512 {
513         struct msi_desc *desc;
514
515         if (!pci_msi_enable || !dev || !dev->msi_enabled)
516                 return;
517
518         pci_msi_set_enable(dev, 0);
519         pci_intx_for_msi(dev, 1);
520         dev->msi_enabled = 0;
521
522         /* Return the device with MSI unmasked as initial states */
523         desc = msi_first_desc(&dev->dev, MSI_DESC_ALL);
524         if (!WARN_ON_ONCE(!desc))
525                 pci_msi_unmask(desc, msi_multi_mask(desc));
526
527         /* Restore dev->irq to its default pin-assertion IRQ */
528         dev->irq = desc->pci.msi_attrib.default_irq;
529         pcibios_alloc_irq(dev);
530 }
531
532 /* PCI/MSI-X specific functionality */
533
534 static void pci_msix_clear_and_set_ctrl(struct pci_dev *dev, u16 clear, u16 set)
535 {
536         u16 ctrl;
537
538         pci_read_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, &ctrl);
539         ctrl &= ~clear;
540         ctrl |= set;
541         pci_write_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, ctrl);
542 }
543
544 static void __iomem *msix_map_region(struct pci_dev *dev,
545                                      unsigned int nr_entries)
546 {
547         resource_size_t phys_addr;
548         u32 table_offset;
549         unsigned long flags;
550         u8 bir;
551
552         pci_read_config_dword(dev, dev->msix_cap + PCI_MSIX_TABLE,
553                               &table_offset);
554         bir = (u8)(table_offset & PCI_MSIX_TABLE_BIR);
555         flags = pci_resource_flags(dev, bir);
556         if (!flags || (flags & IORESOURCE_UNSET))
557                 return NULL;
558
559         table_offset &= PCI_MSIX_TABLE_OFFSET;
560         phys_addr = pci_resource_start(dev, bir) + table_offset;
561
562         return ioremap(phys_addr, nr_entries * PCI_MSIX_ENTRY_SIZE);
563 }
564
565 static int msix_setup_msi_descs(struct pci_dev *dev, void __iomem *base,
566                                 struct msix_entry *entries, int nvec,
567                                 struct irq_affinity_desc *masks)
568 {
569         int ret = 0, i, vec_count = pci_msix_vec_count(dev);
570         struct irq_affinity_desc *curmsk;
571         struct msi_desc desc;
572         void __iomem *addr;
573
574         memset(&desc, 0, sizeof(desc));
575
576         desc.nvec_used                  = 1;
577         desc.pci.msi_attrib.is_msix     = 1;
578         desc.pci.msi_attrib.is_64       = 1;
579         desc.pci.msi_attrib.default_irq = dev->irq;
580         desc.pci.mask_base              = base;
581
582         for (i = 0, curmsk = masks; i < nvec; i++, curmsk++) {
583                 desc.msi_index = entries ? entries[i].entry : i;
584                 desc.affinity = masks ? curmsk : NULL;
585                 desc.pci.msi_attrib.is_virtual = desc.msi_index >= vec_count;
586                 desc.pci.msi_attrib.can_mask = !pci_msi_ignore_mask &&
587                                                !desc.pci.msi_attrib.is_virtual;
588
589                 if (desc.pci.msi_attrib.can_mask) {
590                         addr = pci_msix_desc_addr(&desc);
591                         desc.pci.msix_ctrl = readl(addr + PCI_MSIX_ENTRY_VECTOR_CTRL);
592                 }
593
594                 ret = msi_add_msi_desc(&dev->dev, &desc);
595                 if (ret)
596                         break;
597         }
598         return ret;
599 }
600
601 static void msix_update_entries(struct pci_dev *dev, struct msix_entry *entries)
602 {
603         struct msi_desc *desc;
604
605         if (entries) {
606                 msi_for_each_desc(desc, &dev->dev, MSI_DESC_ALL) {
607                         entries->vector = desc->irq;
608                         entries++;
609                 }
610         }
611 }
612
613 static void msix_mask_all(void __iomem *base, int tsize)
614 {
615         u32 ctrl = PCI_MSIX_ENTRY_CTRL_MASKBIT;
616         int i;
617
618         if (pci_msi_ignore_mask)
619                 return;
620
621         for (i = 0; i < tsize; i++, base += PCI_MSIX_ENTRY_SIZE)
622                 writel(ctrl, base + PCI_MSIX_ENTRY_VECTOR_CTRL);
623 }
624
625 static int msix_setup_interrupts(struct pci_dev *dev, void __iomem *base,
626                                  struct msix_entry *entries, int nvec,
627                                  struct irq_affinity *affd)
628 {
629         struct irq_affinity_desc *masks = NULL;
630         int ret;
631
632         if (affd)
633                 masks = irq_create_affinity_masks(nvec, affd);
634
635         msi_lock_descs(&dev->dev);
636         ret = msix_setup_msi_descs(dev, base, entries, nvec, masks);
637         if (ret)
638                 goto out_free;
639
640         ret = pci_msi_setup_msi_irqs(dev, nvec, PCI_CAP_ID_MSIX);
641         if (ret)
642                 goto out_free;
643
644         /* Check if all MSI entries honor device restrictions */
645         ret = msi_verify_entries(dev);
646         if (ret)
647                 goto out_free;
648
649         msix_update_entries(dev, entries);
650         goto out_unlock;
651
652 out_free:
653         pci_free_msi_irqs(dev);
654 out_unlock:
655         msi_unlock_descs(&dev->dev);
656         kfree(masks);
657         return ret;
658 }
659
660 /**
661  * msix_capability_init - configure device's MSI-X capability
662  * @dev: pointer to the pci_dev data structure of MSI-X device function
663  * @entries: pointer to an array of struct msix_entry entries
664  * @nvec: number of @entries
665  * @affd: Optional pointer to enable automatic affinity assignment
666  *
667  * Setup the MSI-X capability structure of device function with a
668  * single MSI-X IRQ. A return of zero indicates the successful setup of
669  * requested MSI-X entries with allocated IRQs or non-zero for otherwise.
670  **/
671 static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries,
672                                 int nvec, struct irq_affinity *affd)
673 {
674         void __iomem *base;
675         int ret, tsize;
676         u16 control;
677
678         /*
679          * Some devices require MSI-X to be enabled before the MSI-X
680          * registers can be accessed.  Mask all the vectors to prevent
681          * interrupts coming in before they're fully set up.
682          */
683         pci_msix_clear_and_set_ctrl(dev, 0, PCI_MSIX_FLAGS_MASKALL |
684                                     PCI_MSIX_FLAGS_ENABLE);
685
686         /* Mark it enabled so setup functions can query it */
687         dev->msix_enabled = 1;
688
689         pci_read_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, &control);
690         /* Request & Map MSI-X table region */
691         tsize = msix_table_size(control);
692         base = msix_map_region(dev, tsize);
693         if (!base) {
694                 ret = -ENOMEM;
695                 goto out_disable;
696         }
697
698         dev->msix_base = base;
699
700         ret = msix_setup_interrupts(dev, base, entries, nvec, affd);
701         if (ret)
702                 goto out_disable;
703
704         /* Disable INTX */
705         pci_intx_for_msi(dev, 0);
706
707         /*
708          * Ensure that all table entries are masked to prevent
709          * stale entries from firing in a crash kernel.
710          *
711          * Done late to deal with a broken Marvell NVME device
712          * which takes the MSI-X mask bits into account even
713          * when MSI-X is disabled, which prevents MSI delivery.
714          */
715         msix_mask_all(base, tsize);
716         pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL, 0);
717
718         pcibios_free_irq(dev);
719         return 0;
720
721 out_disable:
722         dev->msix_enabled = 0;
723         pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL | PCI_MSIX_FLAGS_ENABLE, 0);
724
725         return ret;
726 }
727
728 static bool pci_msix_validate_entries(struct msix_entry *entries, int nvec, int hwsize)
729 {
730         int i, j;
731
732         if (!entries)
733                 return true;
734
735         for (i = 0; i < nvec; i++) {
736                 /* Entry within hardware limit? */
737                 if (entries[i].entry >= hwsize)
738                         return false;
739
740                 /* Check for duplicate entries */
741                 for (j = i + 1; j < nvec; j++) {
742                         if (entries[i].entry == entries[j].entry)
743                                 return false;
744                 }
745         }
746         return true;
747 }
748
749 int __pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries, int minvec,
750                             int maxvec, struct irq_affinity *affd, int flags)
751 {
752         int hwsize, rc, nvec = maxvec;
753
754         if (maxvec < minvec)
755                 return -ERANGE;
756
757         if (dev->msi_enabled) {
758                 pci_info(dev, "can't enable MSI-X (MSI already enabled)\n");
759                 return -EINVAL;
760         }
761
762         if (WARN_ON_ONCE(dev->msix_enabled))
763                 return -EINVAL;
764
765         if (!pci_msi_supported(dev, nvec) || dev->current_state != PCI_D0)
766                 return -EINVAL;
767
768         hwsize = pci_msix_vec_count(dev);
769         if (hwsize < 0)
770                 return hwsize;
771
772         if (!pci_msix_validate_entries(entries, nvec, hwsize))
773                 return -EINVAL;
774
775         /* PCI_IRQ_VIRTUAL is a horrible hack! */
776         if (nvec > hwsize && !(flags & PCI_IRQ_VIRTUAL))
777                 nvec = hwsize;
778
779         if (nvec < minvec)
780                 return -ENOSPC;
781
782         rc = pci_setup_msi_context(dev);
783         if (rc)
784                 return rc;
785
786         for (;;) {
787                 if (affd) {
788                         nvec = irq_calc_affinity_vectors(minvec, nvec, affd);
789                         if (nvec < minvec)
790                                 return -ENOSPC;
791                 }
792
793                 rc = msix_capability_init(dev, entries, nvec, affd);
794                 if (rc == 0)
795                         return nvec;
796
797                 if (rc < 0)
798                         return rc;
799                 if (rc < minvec)
800                         return -ENOSPC;
801
802                 nvec = rc;
803         }
804 }
805
806 void __pci_restore_msix_state(struct pci_dev *dev)
807 {
808         struct msi_desc *entry;
809         bool write_msg;
810
811         if (!dev->msix_enabled)
812                 return;
813
814         /* route the table */
815         pci_intx_for_msi(dev, 0);
816         pci_msix_clear_and_set_ctrl(dev, 0,
817                                 PCI_MSIX_FLAGS_ENABLE | PCI_MSIX_FLAGS_MASKALL);
818
819         write_msg = arch_restore_msi_irqs(dev);
820
821         msi_lock_descs(&dev->dev);
822         msi_for_each_desc(entry, &dev->dev, MSI_DESC_ALL) {
823                 if (write_msg)
824                         __pci_write_msi_msg(entry, &entry->msg);
825                 pci_msix_write_vector_ctrl(entry, entry->pci.msix_ctrl);
826         }
827         msi_unlock_descs(&dev->dev);
828
829         pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL, 0);
830 }
831
832 void pci_msix_shutdown(struct pci_dev *dev)
833 {
834         struct msi_desc *desc;
835
836         if (!pci_msi_enable || !dev || !dev->msix_enabled)
837                 return;
838
839         if (pci_dev_is_disconnected(dev)) {
840                 dev->msix_enabled = 0;
841                 return;
842         }
843
844         /* Return the device with MSI-X masked as initial states */
845         msi_for_each_desc(desc, &dev->dev, MSI_DESC_ALL)
846                 pci_msix_mask(desc);
847
848         pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_ENABLE, 0);
849         pci_intx_for_msi(dev, 1);
850         dev->msix_enabled = 0;
851         pcibios_alloc_irq(dev);
852 }
853
854 /* Common interfaces */
855
856 void pci_free_msi_irqs(struct pci_dev *dev)
857 {
858         pci_msi_teardown_msi_irqs(dev);
859
860         if (dev->msix_base) {
861                 iounmap(dev->msix_base);
862                 dev->msix_base = NULL;
863         }
864 }
865
866 /* Misc. infrastructure */
867
868 struct pci_dev *msi_desc_to_pci_dev(struct msi_desc *desc)
869 {
870         return to_pci_dev(desc->dev);
871 }
872 EXPORT_SYMBOL(msi_desc_to_pci_dev);
873
874 void pci_no_msi(void)
875 {
876         pci_msi_enable = 0;
877 }