Merge tag '5.17-rc3-ksmbd-server-fixes' of git://git.samba.org/ksmbd
[linux-2.6-microblaze.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 static int pci_msi_enable = 1;
17 int pci_msi_ignore_mask;
18
19 static noinline void pci_msi_update_mask(struct msi_desc *desc, u32 clear, u32 set)
20 {
21         raw_spinlock_t *lock = &to_pci_dev(desc->dev)->msi_lock;
22         unsigned long flags;
23
24         if (!desc->pci.msi_attrib.can_mask)
25                 return;
26
27         raw_spin_lock_irqsave(lock, flags);
28         desc->pci.msi_mask &= ~clear;
29         desc->pci.msi_mask |= set;
30         pci_write_config_dword(msi_desc_to_pci_dev(desc), desc->pci.mask_pos,
31                                desc->pci.msi_mask);
32         raw_spin_unlock_irqrestore(lock, flags);
33 }
34
35 static inline void pci_msi_mask(struct msi_desc *desc, u32 mask)
36 {
37         pci_msi_update_mask(desc, 0, mask);
38 }
39
40 static inline void pci_msi_unmask(struct msi_desc *desc, u32 mask)
41 {
42         pci_msi_update_mask(desc, mask, 0);
43 }
44
45 static inline void __iomem *pci_msix_desc_addr(struct msi_desc *desc)
46 {
47         return desc->pci.mask_base + desc->msi_index * PCI_MSIX_ENTRY_SIZE;
48 }
49
50 /*
51  * This internal function does not flush PCI writes to the device.  All
52  * users must ensure that they read from the device before either assuming
53  * that the device state is up to date, or returning out of this file.
54  * It does not affect the msi_desc::msix_ctrl cache either. Use with care!
55  */
56 static void pci_msix_write_vector_ctrl(struct msi_desc *desc, u32 ctrl)
57 {
58         void __iomem *desc_addr = pci_msix_desc_addr(desc);
59
60         if (desc->pci.msi_attrib.can_mask)
61                 writel(ctrl, desc_addr + PCI_MSIX_ENTRY_VECTOR_CTRL);
62 }
63
64 static inline void pci_msix_mask(struct msi_desc *desc)
65 {
66         desc->pci.msix_ctrl |= PCI_MSIX_ENTRY_CTRL_MASKBIT;
67         pci_msix_write_vector_ctrl(desc, desc->pci.msix_ctrl);
68         /* Flush write to device */
69         readl(desc->pci.mask_base);
70 }
71
72 static inline void pci_msix_unmask(struct msi_desc *desc)
73 {
74         desc->pci.msix_ctrl &= ~PCI_MSIX_ENTRY_CTRL_MASKBIT;
75         pci_msix_write_vector_ctrl(desc, desc->pci.msix_ctrl);
76 }
77
78 static void __pci_msi_mask_desc(struct msi_desc *desc, u32 mask)
79 {
80         if (desc->pci.msi_attrib.is_msix)
81                 pci_msix_mask(desc);
82         else
83                 pci_msi_mask(desc, mask);
84 }
85
86 static void __pci_msi_unmask_desc(struct msi_desc *desc, u32 mask)
87 {
88         if (desc->pci.msi_attrib.is_msix)
89                 pci_msix_unmask(desc);
90         else
91                 pci_msi_unmask(desc, mask);
92 }
93
94 /**
95  * pci_msi_mask_irq - Generic IRQ chip callback to mask PCI/MSI interrupts
96  * @data:       pointer to irqdata associated to that interrupt
97  */
98 void pci_msi_mask_irq(struct irq_data *data)
99 {
100         struct msi_desc *desc = irq_data_get_msi_desc(data);
101
102         __pci_msi_mask_desc(desc, BIT(data->irq - desc->irq));
103 }
104 EXPORT_SYMBOL_GPL(pci_msi_mask_irq);
105
106 /**
107  * pci_msi_unmask_irq - Generic IRQ chip callback to unmask PCI/MSI interrupts
108  * @data:       pointer to irqdata associated to that interrupt
109  */
110 void pci_msi_unmask_irq(struct irq_data *data)
111 {
112         struct msi_desc *desc = irq_data_get_msi_desc(data);
113
114         __pci_msi_unmask_desc(desc, BIT(data->irq - desc->irq));
115 }
116 EXPORT_SYMBOL_GPL(pci_msi_unmask_irq);
117
118 void __pci_read_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
119 {
120         struct pci_dev *dev = msi_desc_to_pci_dev(entry);
121
122         BUG_ON(dev->current_state != PCI_D0);
123
124         if (entry->pci.msi_attrib.is_msix) {
125                 void __iomem *base = pci_msix_desc_addr(entry);
126
127                 if (WARN_ON_ONCE(entry->pci.msi_attrib.is_virtual))
128                         return;
129
130                 msg->address_lo = readl(base + PCI_MSIX_ENTRY_LOWER_ADDR);
131                 msg->address_hi = readl(base + PCI_MSIX_ENTRY_UPPER_ADDR);
132                 msg->data = readl(base + PCI_MSIX_ENTRY_DATA);
133         } else {
134                 int pos = dev->msi_cap;
135                 u16 data;
136
137                 pci_read_config_dword(dev, pos + PCI_MSI_ADDRESS_LO,
138                                       &msg->address_lo);
139                 if (entry->pci.msi_attrib.is_64) {
140                         pci_read_config_dword(dev, pos + PCI_MSI_ADDRESS_HI,
141                                               &msg->address_hi);
142                         pci_read_config_word(dev, pos + PCI_MSI_DATA_64, &data);
143                 } else {
144                         msg->address_hi = 0;
145                         pci_read_config_word(dev, pos + PCI_MSI_DATA_32, &data);
146                 }
147                 msg->data = data;
148         }
149 }
150
151 void __pci_write_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
152 {
153         struct pci_dev *dev = msi_desc_to_pci_dev(entry);
154
155         if (dev->current_state != PCI_D0 || pci_dev_is_disconnected(dev)) {
156                 /* Don't touch the hardware now */
157         } else if (entry->pci.msi_attrib.is_msix) {
158                 void __iomem *base = pci_msix_desc_addr(entry);
159                 u32 ctrl = entry->pci.msix_ctrl;
160                 bool unmasked = !(ctrl & PCI_MSIX_ENTRY_CTRL_MASKBIT);
161
162                 if (entry->pci.msi_attrib.is_virtual)
163                         goto skip;
164
165                 /*
166                  * The specification mandates that the entry is masked
167                  * when the message is modified:
168                  *
169                  * "If software changes the Address or Data value of an
170                  * entry while the entry is unmasked, the result is
171                  * undefined."
172                  */
173                 if (unmasked)
174                         pci_msix_write_vector_ctrl(entry, ctrl | PCI_MSIX_ENTRY_CTRL_MASKBIT);
175
176                 writel(msg->address_lo, base + PCI_MSIX_ENTRY_LOWER_ADDR);
177                 writel(msg->address_hi, base + PCI_MSIX_ENTRY_UPPER_ADDR);
178                 writel(msg->data, base + PCI_MSIX_ENTRY_DATA);
179
180                 if (unmasked)
181                         pci_msix_write_vector_ctrl(entry, ctrl);
182
183                 /* Ensure that the writes are visible in the device */
184                 readl(base + PCI_MSIX_ENTRY_DATA);
185         } else {
186                 int pos = dev->msi_cap;
187                 u16 msgctl;
188
189                 pci_read_config_word(dev, pos + PCI_MSI_FLAGS, &msgctl);
190                 msgctl &= ~PCI_MSI_FLAGS_QSIZE;
191                 msgctl |= entry->pci.msi_attrib.multiple << 4;
192                 pci_write_config_word(dev, pos + PCI_MSI_FLAGS, msgctl);
193
194                 pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_LO,
195                                        msg->address_lo);
196                 if (entry->pci.msi_attrib.is_64) {
197                         pci_write_config_dword(dev, pos + PCI_MSI_ADDRESS_HI,
198                                                msg->address_hi);
199                         pci_write_config_word(dev, pos + PCI_MSI_DATA_64,
200                                               msg->data);
201                 } else {
202                         pci_write_config_word(dev, pos + PCI_MSI_DATA_32,
203                                               msg->data);
204                 }
205                 /* Ensure that the writes are visible in the device */
206                 pci_read_config_word(dev, pos + PCI_MSI_FLAGS, &msgctl);
207         }
208
209 skip:
210         entry->msg = *msg;
211
212         if (entry->write_msi_msg)
213                 entry->write_msi_msg(entry, entry->write_msi_msg_data);
214
215 }
216
217 void pci_write_msi_msg(unsigned int irq, struct msi_msg *msg)
218 {
219         struct msi_desc *entry = irq_get_msi_desc(irq);
220
221         __pci_write_msi_msg(entry, msg);
222 }
223 EXPORT_SYMBOL_GPL(pci_write_msi_msg);
224
225 static void free_msi_irqs(struct pci_dev *dev)
226 {
227         pci_msi_teardown_msi_irqs(dev);
228
229         if (dev->msix_base) {
230                 iounmap(dev->msix_base);
231                 dev->msix_base = NULL;
232         }
233 }
234
235 static void pci_intx_for_msi(struct pci_dev *dev, int enable)
236 {
237         if (!(dev->dev_flags & PCI_DEV_FLAGS_MSI_INTX_DISABLE_BUG))
238                 pci_intx(dev, enable);
239 }
240
241 static void pci_msi_set_enable(struct pci_dev *dev, int enable)
242 {
243         u16 control;
244
245         pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
246         control &= ~PCI_MSI_FLAGS_ENABLE;
247         if (enable)
248                 control |= PCI_MSI_FLAGS_ENABLE;
249         pci_write_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, control);
250 }
251
252 /*
253  * Architecture override returns true when the PCI MSI message should be
254  * written by the generic restore function.
255  */
256 bool __weak arch_restore_msi_irqs(struct pci_dev *dev)
257 {
258         return true;
259 }
260
261 static void __pci_restore_msi_state(struct pci_dev *dev)
262 {
263         struct msi_desc *entry;
264         u16 control;
265
266         if (!dev->msi_enabled)
267                 return;
268
269         entry = irq_get_msi_desc(dev->irq);
270
271         pci_intx_for_msi(dev, 0);
272         pci_msi_set_enable(dev, 0);
273         if (arch_restore_msi_irqs(dev))
274                 __pci_write_msi_msg(entry, &entry->msg);
275
276         pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
277         pci_msi_update_mask(entry, 0, 0);
278         control &= ~PCI_MSI_FLAGS_QSIZE;
279         control |= (entry->pci.msi_attrib.multiple << 4) | PCI_MSI_FLAGS_ENABLE;
280         pci_write_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, control);
281 }
282
283 static void pci_msix_clear_and_set_ctrl(struct pci_dev *dev, u16 clear, u16 set)
284 {
285         u16 ctrl;
286
287         pci_read_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, &ctrl);
288         ctrl &= ~clear;
289         ctrl |= set;
290         pci_write_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, ctrl);
291 }
292
293 static void __pci_restore_msix_state(struct pci_dev *dev)
294 {
295         struct msi_desc *entry;
296         bool write_msg;
297
298         if (!dev->msix_enabled)
299                 return;
300
301         /* route the table */
302         pci_intx_for_msi(dev, 0);
303         pci_msix_clear_and_set_ctrl(dev, 0,
304                                 PCI_MSIX_FLAGS_ENABLE | PCI_MSIX_FLAGS_MASKALL);
305
306         write_msg = arch_restore_msi_irqs(dev);
307
308         msi_lock_descs(&dev->dev);
309         msi_for_each_desc(entry, &dev->dev, MSI_DESC_ALL) {
310                 if (write_msg)
311                         __pci_write_msi_msg(entry, &entry->msg);
312                 pci_msix_write_vector_ctrl(entry, entry->pci.msix_ctrl);
313         }
314         msi_unlock_descs(&dev->dev);
315
316         pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL, 0);
317 }
318
319 void pci_restore_msi_state(struct pci_dev *dev)
320 {
321         __pci_restore_msi_state(dev);
322         __pci_restore_msix_state(dev);
323 }
324 EXPORT_SYMBOL_GPL(pci_restore_msi_state);
325
326 static void pcim_msi_release(void *pcidev)
327 {
328         struct pci_dev *dev = pcidev;
329
330         dev->is_msi_managed = false;
331         pci_free_irq_vectors(dev);
332 }
333
334 /*
335  * Needs to be separate from pcim_release to prevent an ordering problem
336  * vs. msi_device_data_release() in the MSI core code.
337  */
338 static int pcim_setup_msi_release(struct pci_dev *dev)
339 {
340         int ret;
341
342         if (!pci_is_managed(dev) || dev->is_msi_managed)
343                 return 0;
344
345         ret = devm_add_action(&dev->dev, pcim_msi_release, dev);
346         if (!ret)
347                 dev->is_msi_managed = true;
348         return ret;
349 }
350
351 /*
352  * Ordering vs. devres: msi device data has to be installed first so that
353  * pcim_msi_release() is invoked before it on device release.
354  */
355 static int pci_setup_msi_context(struct pci_dev *dev)
356 {
357         int ret = msi_setup_device_data(&dev->dev);
358
359         if (!ret)
360                 ret = pcim_setup_msi_release(dev);
361         return ret;
362 }
363
364 static int msi_setup_msi_desc(struct pci_dev *dev, int nvec,
365                               struct irq_affinity_desc *masks)
366 {
367         struct msi_desc desc;
368         u16 control;
369
370         /* MSI Entry Initialization */
371         memset(&desc, 0, sizeof(desc));
372
373         pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &control);
374         /* Lies, damned lies, and MSIs */
375         if (dev->dev_flags & PCI_DEV_FLAGS_HAS_MSI_MASKING)
376                 control |= PCI_MSI_FLAGS_MASKBIT;
377         /* Respect XEN's mask disabling */
378         if (pci_msi_ignore_mask)
379                 control &= ~PCI_MSI_FLAGS_MASKBIT;
380
381         desc.nvec_used                  = nvec;
382         desc.pci.msi_attrib.is_64       = !!(control & PCI_MSI_FLAGS_64BIT);
383         desc.pci.msi_attrib.can_mask    = !!(control & PCI_MSI_FLAGS_MASKBIT);
384         desc.pci.msi_attrib.default_irq = dev->irq;
385         desc.pci.msi_attrib.multi_cap   = (control & PCI_MSI_FLAGS_QMASK) >> 1;
386         desc.pci.msi_attrib.multiple    = ilog2(__roundup_pow_of_two(nvec));
387         desc.affinity                   = masks;
388
389         if (control & PCI_MSI_FLAGS_64BIT)
390                 desc.pci.mask_pos = dev->msi_cap + PCI_MSI_MASK_64;
391         else
392                 desc.pci.mask_pos = dev->msi_cap + PCI_MSI_MASK_32;
393
394         /* Save the initial mask status */
395         if (desc.pci.msi_attrib.can_mask)
396                 pci_read_config_dword(dev, desc.pci.mask_pos, &desc.pci.msi_mask);
397
398         return msi_add_msi_desc(&dev->dev, &desc);
399 }
400
401 static int msi_verify_entries(struct pci_dev *dev)
402 {
403         struct msi_desc *entry;
404
405         if (!dev->no_64bit_msi)
406                 return 0;
407
408         msi_for_each_desc(entry, &dev->dev, MSI_DESC_ALL) {
409                 if (entry->msg.address_hi) {
410                         pci_err(dev, "arch assigned 64-bit MSI address %#x%08x but device only supports 32 bits\n",
411                                 entry->msg.address_hi, entry->msg.address_lo);
412                         break;
413                 }
414         }
415         return !entry ? 0 : -EIO;
416 }
417
418 /**
419  * msi_capability_init - configure device's MSI capability structure
420  * @dev: pointer to the pci_dev data structure of MSI device function
421  * @nvec: number of interrupts to allocate
422  * @affd: description of automatic IRQ affinity assignments (may be %NULL)
423  *
424  * Setup the MSI capability structure of the device with the requested
425  * number of interrupts.  A return value of zero indicates the successful
426  * setup of an entry with the new MSI IRQ.  A negative return value indicates
427  * an error, and a positive return value indicates the number of interrupts
428  * which could have been allocated.
429  */
430 static int msi_capability_init(struct pci_dev *dev, int nvec,
431                                struct irq_affinity *affd)
432 {
433         struct irq_affinity_desc *masks = NULL;
434         struct msi_desc *entry;
435         int ret;
436
437         /*
438          * Disable MSI during setup in the hardware, but mark it enabled
439          * so that setup code can evaluate it.
440          */
441         pci_msi_set_enable(dev, 0);
442         dev->msi_enabled = 1;
443
444         if (affd)
445                 masks = irq_create_affinity_masks(nvec, affd);
446
447         msi_lock_descs(&dev->dev);
448         ret = msi_setup_msi_desc(dev, nvec, masks);
449         if (ret)
450                 goto fail;
451
452         /* All MSIs are unmasked by default; mask them all */
453         entry = msi_first_desc(&dev->dev, MSI_DESC_ALL);
454         pci_msi_mask(entry, msi_multi_mask(entry));
455
456         /* Configure MSI capability structure */
457         ret = pci_msi_setup_msi_irqs(dev, nvec, PCI_CAP_ID_MSI);
458         if (ret)
459                 goto err;
460
461         ret = msi_verify_entries(dev);
462         if (ret)
463                 goto err;
464
465         /* Set MSI enabled bits */
466         pci_intx_for_msi(dev, 0);
467         pci_msi_set_enable(dev, 1);
468
469         pcibios_free_irq(dev);
470         dev->irq = entry->irq;
471         goto unlock;
472
473 err:
474         pci_msi_unmask(entry, msi_multi_mask(entry));
475         free_msi_irqs(dev);
476 fail:
477         dev->msi_enabled = 0;
478 unlock:
479         msi_unlock_descs(&dev->dev);
480         kfree(masks);
481         return ret;
482 }
483
484 static void __iomem *msix_map_region(struct pci_dev *dev,
485                                      unsigned int nr_entries)
486 {
487         resource_size_t phys_addr;
488         u32 table_offset;
489         unsigned long flags;
490         u8 bir;
491
492         pci_read_config_dword(dev, dev->msix_cap + PCI_MSIX_TABLE,
493                               &table_offset);
494         bir = (u8)(table_offset & PCI_MSIX_TABLE_BIR);
495         flags = pci_resource_flags(dev, bir);
496         if (!flags || (flags & IORESOURCE_UNSET))
497                 return NULL;
498
499         table_offset &= PCI_MSIX_TABLE_OFFSET;
500         phys_addr = pci_resource_start(dev, bir) + table_offset;
501
502         return ioremap(phys_addr, nr_entries * PCI_MSIX_ENTRY_SIZE);
503 }
504
505 static int msix_setup_msi_descs(struct pci_dev *dev, void __iomem *base,
506                                 struct msix_entry *entries, int nvec,
507                                 struct irq_affinity_desc *masks)
508 {
509         int ret = 0, i, vec_count = pci_msix_vec_count(dev);
510         struct irq_affinity_desc *curmsk;
511         struct msi_desc desc;
512         void __iomem *addr;
513
514         memset(&desc, 0, sizeof(desc));
515
516         desc.nvec_used                  = 1;
517         desc.pci.msi_attrib.is_msix     = 1;
518         desc.pci.msi_attrib.is_64       = 1;
519         desc.pci.msi_attrib.default_irq = dev->irq;
520         desc.pci.mask_base              = base;
521
522         for (i = 0, curmsk = masks; i < nvec; i++, curmsk++) {
523                 desc.msi_index = entries ? entries[i].entry : i;
524                 desc.affinity = masks ? curmsk : NULL;
525                 desc.pci.msi_attrib.is_virtual = desc.msi_index >= vec_count;
526                 desc.pci.msi_attrib.can_mask = !pci_msi_ignore_mask &&
527                                                !desc.pci.msi_attrib.is_virtual;
528
529                 if (!desc.pci.msi_attrib.can_mask) {
530                         addr = pci_msix_desc_addr(&desc);
531                         desc.pci.msix_ctrl = readl(addr + PCI_MSIX_ENTRY_VECTOR_CTRL);
532                 }
533
534                 ret = msi_add_msi_desc(&dev->dev, &desc);
535                 if (ret)
536                         break;
537         }
538         return ret;
539 }
540
541 static void msix_update_entries(struct pci_dev *dev, struct msix_entry *entries)
542 {
543         struct msi_desc *desc;
544
545         if (entries) {
546                 msi_for_each_desc(desc, &dev->dev, MSI_DESC_ALL) {
547                         entries->vector = desc->irq;
548                         entries++;
549                 }
550         }
551 }
552
553 static void msix_mask_all(void __iomem *base, int tsize)
554 {
555         u32 ctrl = PCI_MSIX_ENTRY_CTRL_MASKBIT;
556         int i;
557
558         if (pci_msi_ignore_mask)
559                 return;
560
561         for (i = 0; i < tsize; i++, base += PCI_MSIX_ENTRY_SIZE)
562                 writel(ctrl, base + PCI_MSIX_ENTRY_VECTOR_CTRL);
563 }
564
565 static int msix_setup_interrupts(struct pci_dev *dev, void __iomem *base,
566                                  struct msix_entry *entries, int nvec,
567                                  struct irq_affinity *affd)
568 {
569         struct irq_affinity_desc *masks = NULL;
570         int ret;
571
572         if (affd)
573                 masks = irq_create_affinity_masks(nvec, affd);
574
575         msi_lock_descs(&dev->dev);
576         ret = msix_setup_msi_descs(dev, base, entries, nvec, masks);
577         if (ret)
578                 goto out_free;
579
580         ret = pci_msi_setup_msi_irqs(dev, nvec, PCI_CAP_ID_MSIX);
581         if (ret)
582                 goto out_free;
583
584         /* Check if all MSI entries honor device restrictions */
585         ret = msi_verify_entries(dev);
586         if (ret)
587                 goto out_free;
588
589         msix_update_entries(dev, entries);
590         goto out_unlock;
591
592 out_free:
593         free_msi_irqs(dev);
594 out_unlock:
595         msi_unlock_descs(&dev->dev);
596         kfree(masks);
597         return ret;
598 }
599
600 /**
601  * msix_capability_init - configure device's MSI-X capability
602  * @dev: pointer to the pci_dev data structure of MSI-X device function
603  * @entries: pointer to an array of struct msix_entry entries
604  * @nvec: number of @entries
605  * @affd: Optional pointer to enable automatic affinity assignment
606  *
607  * Setup the MSI-X capability structure of device function with a
608  * single MSI-X IRQ. A return of zero indicates the successful setup of
609  * requested MSI-X entries with allocated IRQs or non-zero for otherwise.
610  **/
611 static int msix_capability_init(struct pci_dev *dev, struct msix_entry *entries,
612                                 int nvec, struct irq_affinity *affd)
613 {
614         void __iomem *base;
615         int ret, tsize;
616         u16 control;
617
618         /*
619          * Some devices require MSI-X to be enabled before the MSI-X
620          * registers can be accessed.  Mask all the vectors to prevent
621          * interrupts coming in before they're fully set up.
622          */
623         pci_msix_clear_and_set_ctrl(dev, 0, PCI_MSIX_FLAGS_MASKALL |
624                                     PCI_MSIX_FLAGS_ENABLE);
625
626         /* Mark it enabled so setup functions can query it */
627         dev->msix_enabled = 1;
628
629         pci_read_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, &control);
630         /* Request & Map MSI-X table region */
631         tsize = msix_table_size(control);
632         base = msix_map_region(dev, tsize);
633         if (!base) {
634                 ret = -ENOMEM;
635                 goto out_disable;
636         }
637
638         dev->msix_base = base;
639
640         ret = msix_setup_interrupts(dev, base, entries, nvec, affd);
641         if (ret)
642                 goto out_disable;
643
644         /* Disable INTX */
645         pci_intx_for_msi(dev, 0);
646
647         /*
648          * Ensure that all table entries are masked to prevent
649          * stale entries from firing in a crash kernel.
650          *
651          * Done late to deal with a broken Marvell NVME device
652          * which takes the MSI-X mask bits into account even
653          * when MSI-X is disabled, which prevents MSI delivery.
654          */
655         msix_mask_all(base, tsize);
656         pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL, 0);
657
658         pcibios_free_irq(dev);
659         return 0;
660
661 out_disable:
662         dev->msix_enabled = 0;
663         pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_MASKALL | PCI_MSIX_FLAGS_ENABLE, 0);
664
665         return ret;
666 }
667
668 /**
669  * pci_msi_supported - check whether MSI may be enabled on a device
670  * @dev: pointer to the pci_dev data structure of MSI device function
671  * @nvec: how many MSIs have been requested?
672  *
673  * Look at global flags, the device itself, and its parent buses
674  * to determine if MSI/-X are supported for the device. If MSI/-X is
675  * supported return 1, else return 0.
676  **/
677 static int pci_msi_supported(struct pci_dev *dev, int nvec)
678 {
679         struct pci_bus *bus;
680
681         /* MSI must be globally enabled and supported by the device */
682         if (!pci_msi_enable)
683                 return 0;
684
685         if (!dev || dev->no_msi)
686                 return 0;
687
688         /*
689          * You can't ask to have 0 or less MSIs configured.
690          *  a) it's stupid ..
691          *  b) the list manipulation code assumes nvec >= 1.
692          */
693         if (nvec < 1)
694                 return 0;
695
696         /*
697          * Any bridge which does NOT route MSI transactions from its
698          * secondary bus to its primary bus must set NO_MSI flag on
699          * the secondary pci_bus.
700          *
701          * The NO_MSI flag can either be set directly by:
702          * - arch-specific PCI host bus controller drivers (deprecated)
703          * - quirks for specific PCI bridges
704          *
705          * or indirectly by platform-specific PCI host bridge drivers by
706          * advertising the 'msi_domain' property, which results in
707          * the NO_MSI flag when no MSI domain is found for this bridge
708          * at probe time.
709          */
710         for (bus = dev->bus; bus; bus = bus->parent)
711                 if (bus->bus_flags & PCI_BUS_FLAGS_NO_MSI)
712                         return 0;
713
714         return 1;
715 }
716
717 /**
718  * pci_msi_vec_count - Return the number of MSI vectors a device can send
719  * @dev: device to report about
720  *
721  * This function returns the number of MSI vectors a device requested via
722  * Multiple Message Capable register. It returns a negative errno if the
723  * device is not capable sending MSI interrupts. Otherwise, the call succeeds
724  * and returns a power of two, up to a maximum of 2^5 (32), according to the
725  * MSI specification.
726  **/
727 int pci_msi_vec_count(struct pci_dev *dev)
728 {
729         int ret;
730         u16 msgctl;
731
732         if (!dev->msi_cap)
733                 return -EINVAL;
734
735         pci_read_config_word(dev, dev->msi_cap + PCI_MSI_FLAGS, &msgctl);
736         ret = 1 << ((msgctl & PCI_MSI_FLAGS_QMASK) >> 1);
737
738         return ret;
739 }
740 EXPORT_SYMBOL(pci_msi_vec_count);
741
742 static void pci_msi_shutdown(struct pci_dev *dev)
743 {
744         struct msi_desc *desc;
745
746         if (!pci_msi_enable || !dev || !dev->msi_enabled)
747                 return;
748
749         pci_msi_set_enable(dev, 0);
750         pci_intx_for_msi(dev, 1);
751         dev->msi_enabled = 0;
752
753         /* Return the device with MSI unmasked as initial states */
754         desc = msi_first_desc(&dev->dev, MSI_DESC_ALL);
755         if (!WARN_ON_ONCE(!desc))
756                 pci_msi_unmask(desc, msi_multi_mask(desc));
757
758         /* Restore dev->irq to its default pin-assertion IRQ */
759         dev->irq = desc->pci.msi_attrib.default_irq;
760         pcibios_alloc_irq(dev);
761 }
762
763 void pci_disable_msi(struct pci_dev *dev)
764 {
765         if (!pci_msi_enable || !dev || !dev->msi_enabled)
766                 return;
767
768         msi_lock_descs(&dev->dev);
769         pci_msi_shutdown(dev);
770         free_msi_irqs(dev);
771         msi_unlock_descs(&dev->dev);
772 }
773 EXPORT_SYMBOL(pci_disable_msi);
774
775 /**
776  * pci_msix_vec_count - return the number of device's MSI-X table entries
777  * @dev: pointer to the pci_dev data structure of MSI-X device function
778  * This function returns the number of device's MSI-X table entries and
779  * therefore the number of MSI-X vectors device is capable of sending.
780  * It returns a negative errno if the device is not capable of sending MSI-X
781  * interrupts.
782  **/
783 int pci_msix_vec_count(struct pci_dev *dev)
784 {
785         u16 control;
786
787         if (!dev->msix_cap)
788                 return -EINVAL;
789
790         pci_read_config_word(dev, dev->msix_cap + PCI_MSIX_FLAGS, &control);
791         return msix_table_size(control);
792 }
793 EXPORT_SYMBOL(pci_msix_vec_count);
794
795 static int __pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries,
796                              int nvec, struct irq_affinity *affd, int flags)
797 {
798         int nr_entries;
799         int i, j;
800
801         if (!pci_msi_supported(dev, nvec) || dev->current_state != PCI_D0)
802                 return -EINVAL;
803
804         nr_entries = pci_msix_vec_count(dev);
805         if (nr_entries < 0)
806                 return nr_entries;
807         if (nvec > nr_entries && !(flags & PCI_IRQ_VIRTUAL))
808                 return nr_entries;
809
810         if (entries) {
811                 /* Check for any invalid entries */
812                 for (i = 0; i < nvec; i++) {
813                         if (entries[i].entry >= nr_entries)
814                                 return -EINVAL;         /* invalid entry */
815                         for (j = i + 1; j < nvec; j++) {
816                                 if (entries[i].entry == entries[j].entry)
817                                         return -EINVAL; /* duplicate entry */
818                         }
819                 }
820         }
821
822         /* Check whether driver already requested for MSI IRQ */
823         if (dev->msi_enabled) {
824                 pci_info(dev, "can't enable MSI-X (MSI IRQ already assigned)\n");
825                 return -EINVAL;
826         }
827         return msix_capability_init(dev, entries, nvec, affd);
828 }
829
830 static void pci_msix_shutdown(struct pci_dev *dev)
831 {
832         struct msi_desc *desc;
833
834         if (!pci_msi_enable || !dev || !dev->msix_enabled)
835                 return;
836
837         if (pci_dev_is_disconnected(dev)) {
838                 dev->msix_enabled = 0;
839                 return;
840         }
841
842         /* Return the device with MSI-X masked as initial states */
843         msi_for_each_desc(desc, &dev->dev, MSI_DESC_ALL)
844                 pci_msix_mask(desc);
845
846         pci_msix_clear_and_set_ctrl(dev, PCI_MSIX_FLAGS_ENABLE, 0);
847         pci_intx_for_msi(dev, 1);
848         dev->msix_enabled = 0;
849         pcibios_alloc_irq(dev);
850 }
851
852 void pci_disable_msix(struct pci_dev *dev)
853 {
854         if (!pci_msi_enable || !dev || !dev->msix_enabled)
855                 return;
856
857         msi_lock_descs(&dev->dev);
858         pci_msix_shutdown(dev);
859         free_msi_irqs(dev);
860         msi_unlock_descs(&dev->dev);
861 }
862 EXPORT_SYMBOL(pci_disable_msix);
863
864 static int __pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec,
865                                   struct irq_affinity *affd)
866 {
867         int nvec;
868         int rc;
869
870         if (!pci_msi_supported(dev, minvec) || dev->current_state != PCI_D0)
871                 return -EINVAL;
872
873         /* Check whether driver already requested MSI-X IRQs */
874         if (dev->msix_enabled) {
875                 pci_info(dev, "can't enable MSI (MSI-X already enabled)\n");
876                 return -EINVAL;
877         }
878
879         if (maxvec < minvec)
880                 return -ERANGE;
881
882         if (WARN_ON_ONCE(dev->msi_enabled))
883                 return -EINVAL;
884
885         nvec = pci_msi_vec_count(dev);
886         if (nvec < 0)
887                 return nvec;
888         if (nvec < minvec)
889                 return -ENOSPC;
890
891         if (nvec > maxvec)
892                 nvec = maxvec;
893
894         rc = pci_setup_msi_context(dev);
895         if (rc)
896                 return rc;
897
898         for (;;) {
899                 if (affd) {
900                         nvec = irq_calc_affinity_vectors(minvec, nvec, affd);
901                         if (nvec < minvec)
902                                 return -ENOSPC;
903                 }
904
905                 rc = msi_capability_init(dev, nvec, affd);
906                 if (rc == 0)
907                         return nvec;
908
909                 if (rc < 0)
910                         return rc;
911                 if (rc < minvec)
912                         return -ENOSPC;
913
914                 nvec = rc;
915         }
916 }
917
918 /* deprecated, don't use */
919 int pci_enable_msi(struct pci_dev *dev)
920 {
921         int rc = __pci_enable_msi_range(dev, 1, 1, NULL);
922         if (rc < 0)
923                 return rc;
924         return 0;
925 }
926 EXPORT_SYMBOL(pci_enable_msi);
927
928 static int __pci_enable_msix_range(struct pci_dev *dev,
929                                    struct msix_entry *entries, int minvec,
930                                    int maxvec, struct irq_affinity *affd,
931                                    int flags)
932 {
933         int rc, nvec = maxvec;
934
935         if (maxvec < minvec)
936                 return -ERANGE;
937
938         if (WARN_ON_ONCE(dev->msix_enabled))
939                 return -EINVAL;
940
941         rc = pci_setup_msi_context(dev);
942         if (rc)
943                 return rc;
944
945         for (;;) {
946                 if (affd) {
947                         nvec = irq_calc_affinity_vectors(minvec, nvec, affd);
948                         if (nvec < minvec)
949                                 return -ENOSPC;
950                 }
951
952                 rc = __pci_enable_msix(dev, entries, nvec, affd, flags);
953                 if (rc == 0)
954                         return nvec;
955
956                 if (rc < 0)
957                         return rc;
958                 if (rc < minvec)
959                         return -ENOSPC;
960
961                 nvec = rc;
962         }
963 }
964
965 /**
966  * pci_enable_msix_range - configure device's MSI-X capability structure
967  * @dev: pointer to the pci_dev data structure of MSI-X device function
968  * @entries: pointer to an array of MSI-X entries
969  * @minvec: minimum number of MSI-X IRQs requested
970  * @maxvec: maximum number of MSI-X IRQs requested
971  *
972  * Setup the MSI-X capability structure of device function with a maximum
973  * possible number of interrupts in the range between @minvec and @maxvec
974  * upon its software driver call to request for MSI-X mode enabled on its
975  * hardware device function. It returns a negative errno if an error occurs.
976  * If it succeeds, it returns the actual number of interrupts allocated and
977  * indicates the successful configuration of MSI-X capability structure
978  * with new allocated MSI-X interrupts.
979  **/
980 int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries,
981                 int minvec, int maxvec)
982 {
983         return __pci_enable_msix_range(dev, entries, minvec, maxvec, NULL, 0);
984 }
985 EXPORT_SYMBOL(pci_enable_msix_range);
986
987 /**
988  * pci_alloc_irq_vectors_affinity - allocate multiple IRQs for a device
989  * @dev:                PCI device to operate on
990  * @min_vecs:           minimum number of vectors required (must be >= 1)
991  * @max_vecs:           maximum (desired) number of vectors
992  * @flags:              flags or quirks for the allocation
993  * @affd:               optional description of the affinity requirements
994  *
995  * Allocate up to @max_vecs interrupt vectors for @dev, using MSI-X or MSI
996  * vectors if available, and fall back to a single legacy vector
997  * if neither is available.  Return the number of vectors allocated,
998  * (which might be smaller than @max_vecs) if successful, or a negative
999  * error code on error. If less than @min_vecs interrupt vectors are
1000  * available for @dev the function will fail with -ENOSPC.
1001  *
1002  * To get the Linux IRQ number used for a vector that can be passed to
1003  * request_irq() use the pci_irq_vector() helper.
1004  */
1005 int pci_alloc_irq_vectors_affinity(struct pci_dev *dev, unsigned int min_vecs,
1006                                    unsigned int max_vecs, unsigned int flags,
1007                                    struct irq_affinity *affd)
1008 {
1009         struct irq_affinity msi_default_affd = {0};
1010         int nvecs = -ENOSPC;
1011
1012         if (flags & PCI_IRQ_AFFINITY) {
1013                 if (!affd)
1014                         affd = &msi_default_affd;
1015         } else {
1016                 if (WARN_ON(affd))
1017                         affd = NULL;
1018         }
1019
1020         if (flags & PCI_IRQ_MSIX) {
1021                 nvecs = __pci_enable_msix_range(dev, NULL, min_vecs, max_vecs,
1022                                                 affd, flags);
1023                 if (nvecs > 0)
1024                         return nvecs;
1025         }
1026
1027         if (flags & PCI_IRQ_MSI) {
1028                 nvecs = __pci_enable_msi_range(dev, min_vecs, max_vecs, affd);
1029                 if (nvecs > 0)
1030                         return nvecs;
1031         }
1032
1033         /* use legacy IRQ if allowed */
1034         if (flags & PCI_IRQ_LEGACY) {
1035                 if (min_vecs == 1 && dev->irq) {
1036                         /*
1037                          * Invoke the affinity spreading logic to ensure that
1038                          * the device driver can adjust queue configuration
1039                          * for the single interrupt case.
1040                          */
1041                         if (affd)
1042                                 irq_create_affinity_masks(1, affd);
1043                         pci_intx(dev, 1);
1044                         return 1;
1045                 }
1046         }
1047
1048         return nvecs;
1049 }
1050 EXPORT_SYMBOL(pci_alloc_irq_vectors_affinity);
1051
1052 /**
1053  * pci_free_irq_vectors - free previously allocated IRQs for a device
1054  * @dev:                PCI device to operate on
1055  *
1056  * Undoes the allocations and enabling in pci_alloc_irq_vectors().
1057  */
1058 void pci_free_irq_vectors(struct pci_dev *dev)
1059 {
1060         pci_disable_msix(dev);
1061         pci_disable_msi(dev);
1062 }
1063 EXPORT_SYMBOL(pci_free_irq_vectors);
1064
1065 /**
1066  * pci_irq_vector - return Linux IRQ number of a device vector
1067  * @dev:        PCI device to operate on
1068  * @nr:         Interrupt vector index (0-based)
1069  *
1070  * @nr has the following meanings depending on the interrupt mode:
1071  *   MSI-X:     The index in the MSI-X vector table
1072  *   MSI:       The index of the enabled MSI vectors
1073  *   INTx:      Must be 0
1074  *
1075  * Return: The Linux interrupt number or -EINVAl if @nr is out of range.
1076  */
1077 int pci_irq_vector(struct pci_dev *dev, unsigned int nr)
1078 {
1079         unsigned int irq;
1080
1081         if (!dev->msi_enabled && !dev->msix_enabled)
1082                 return !nr ? dev->irq : -EINVAL;
1083
1084         irq = msi_get_virq(&dev->dev, nr);
1085         return irq ? irq : -EINVAL;
1086 }
1087 EXPORT_SYMBOL(pci_irq_vector);
1088
1089 /**
1090  * pci_irq_get_affinity - return the affinity of a particular MSI vector
1091  * @dev:        PCI device to operate on
1092  * @nr:         device-relative interrupt vector index (0-based).
1093  *
1094  * @nr has the following meanings depending on the interrupt mode:
1095  *   MSI-X:     The index in the MSI-X vector table
1096  *   MSI:       The index of the enabled MSI vectors
1097  *   INTx:      Must be 0
1098  *
1099  * Return: A cpumask pointer or NULL if @nr is out of range
1100  */
1101 const struct cpumask *pci_irq_get_affinity(struct pci_dev *dev, int nr)
1102 {
1103         int idx, irq = pci_irq_vector(dev, nr);
1104         struct msi_desc *desc;
1105
1106         if (WARN_ON_ONCE(irq <= 0))
1107                 return NULL;
1108
1109         desc = irq_get_msi_desc(irq);
1110         /* Non-MSI does not have the information handy */
1111         if (!desc)
1112                 return cpu_possible_mask;
1113
1114         /* MSI[X] interrupts can be allocated without affinity descriptor */
1115         if (!desc->affinity)
1116                 return NULL;
1117
1118         /*
1119          * MSI has a mask array in the descriptor.
1120          * MSI-X has a single mask.
1121          */
1122         idx = dev->msi_enabled ? nr : 0;
1123         return &desc->affinity[idx].mask;
1124 }
1125 EXPORT_SYMBOL(pci_irq_get_affinity);
1126
1127 struct pci_dev *msi_desc_to_pci_dev(struct msi_desc *desc)
1128 {
1129         return to_pci_dev(desc->dev);
1130 }
1131 EXPORT_SYMBOL(msi_desc_to_pci_dev);
1132
1133 void pci_no_msi(void)
1134 {
1135         pci_msi_enable = 0;
1136 }
1137
1138 /**
1139  * pci_msi_enabled - is MSI enabled?
1140  *
1141  * Returns true if MSI has not been disabled by the command-line option
1142  * pci=nomsi.
1143  **/
1144 int pci_msi_enabled(void)
1145 {
1146         return pci_msi_enable;
1147 }
1148 EXPORT_SYMBOL(pci_msi_enabled);