Lines Matching +full:msi +full:- +full:x
1 // SPDX-License-Identifier: GPL-2.0-only
4 * Copyright 2006-2007 Michael Ellerman, IBM Corp.
9 #include <linux/msi.h>
13 #include <asm/ppc-pci.h>
35 addr = rtas_config_addr(pdn->busno, pdn->devfn, 0); in rtas_change_msi()
36 buid = pdn->phb->buid; in rtas_change_msi()
60 rc = -rc; in rtas_change_msi()
77 * disabling MSI with the explicit interface also disables MSI-X in rtas_disable_msi()
96 addr = rtas_config_addr(pdn->busno, pdn->devfn, 0); in rtas_query_irq_number()
97 buid = pdn->phb->buid; in rtas_query_irq_number()
117 if (!entry->irq) in rtas_teardown_msi_irqs()
120 irq_set_msi_desc(entry->irq, NULL); in rtas_teardown_msi_irqs()
121 irq_dispose_mapping(entry->irq); in rtas_teardown_msi_irqs()
138 return -ENOENT; in check_req()
146 return -ENOSPC; in check_req()
156 return check_req(pdev, nvec, "ibm,req#msi"); in check_req_msi()
161 return check_req(pdev, nvec, "ibm,req#msi-x"); in check_req_msix()
173 p = of_get_property(dn, "ibm,pe-total-#msi", NULL); in find_pe_total_msi()
200 if (edev->pe) in find_pe_dn()
201 edev = list_first_entry(&edev->pe->edevs, struct eeh_dev, in find_pe_dn()
203 dn = pci_device_to_OF_node(edev->pdev); in find_pe_dn()
236 p = of_get_property(dn, "class-code", NULL); in count_non_bridge_devices()
240 counts->num_devices++; in count_non_bridge_devices()
251 if (dn == counts->requestor) in count_spare_msis()
252 req = counts->request; in count_spare_msis()
254 /* We don't know if a driver will try to use MSI or MSI-X, in count_spare_msis()
257 p = of_get_property(dn, "ibm,req#msi", NULL); in count_spare_msis()
261 p = of_get_property(dn, "ibm,req#msi-x", NULL); in count_spare_msis()
266 if (req < counts->quota) in count_spare_msis()
267 counts->spare += counts->quota - req; in count_spare_msis()
268 else if (req > counts->quota) in count_spare_msis()
269 counts->over_quota++; in count_spare_msis()
318 /* Divide any spare by the number of over-quota requestors */ in msi_quota_for_device()
338 * a discontiguous, or non-zero based, range of MSI-X entries. in check_msix_entries()
343 if (entry->msi_attrib.entry_nr != expected) { in check_msix_entries()
344 pr_debug("rtas_msi: bad MSI-X entries.\n"); in check_msix_entries()
345 return -EINVAL; in check_msix_entries()
359 * fact that we using RTAS for MSIs, we don't have the 32 bit MSI RTAS in rtas_hack_32bit_msi_gen2()
362 dev_info(&pdev->dev, in rtas_hack_32bit_msi_gen2()
363 "rtas_msi: No 32 bit MSI firmware support, forcing 32 bit MSI\n"); in rtas_hack_32bit_msi_gen2()
364 pci_read_config_dword(pdev, pdev->msi_cap + PCI_MSI_ADDRESS_HI, &addr_hi); in rtas_hack_32bit_msi_gen2()
365 addr_lo = 0xffff0000 | ((addr_hi >> (48 - 32)) << 4); in rtas_hack_32bit_msi_gen2()
366 pci_write_config_dword(pdev, pdev->msi_cap + PCI_MSI_ADDRESS_LO, addr_lo); in rtas_hack_32bit_msi_gen2()
367 pci_write_config_dword(pdev, pdev->msi_cap + PCI_MSI_ADDRESS_HI, 0); in rtas_hack_32bit_msi_gen2()
393 return -EINVAL; in rtas_setup_msi_irqs()
412 * return MSI-Xs. in rtas_setup_msi_irqs()
416 if (pdev->no_64bit_msi) { in rtas_setup_msi_irqs()
420 * We only want to run the 32 bit MSI hack below if in rtas_setup_msi_irqs()
423 if (pdev->bus->max_bus_speed != PCIE_SPEED_5_0GT) in rtas_setup_msi_irqs()
429 rc = -1; in rtas_setup_msi_irqs()
462 entry->affinity); in rtas_setup_msi_irqs()
466 return -ENOSPC; in rtas_setup_msi_irqs()
469 dev_dbg(&pdev->dev, "rtas_msi: allocated virq %d\n", virq); in rtas_setup_msi_irqs()
474 entry->msg = msg; in rtas_setup_msi_irqs()
482 /* No LSI -> leave MSIs (if any) configured */ in rtas_msi_pci_irq_fixup()
483 if (!pdev->irq) { in rtas_msi_pci_irq_fixup()
484 dev_dbg(&pdev->dev, "rtas_msi: no LSI, nothing to do.\n"); in rtas_msi_pci_irq_fixup()
488 /* No MSI -> MSIs can't have been assigned by fw, leave LSI */ in rtas_msi_pci_irq_fixup()
490 dev_dbg(&pdev->dev, "rtas_msi: no req#msi/x, nothing to do.\n"); in rtas_msi_pci_irq_fixup()
494 dev_dbg(&pdev->dev, "rtas_msi: disabling existing MSI.\n"); in rtas_msi_pci_irq_fixup()
502 query_token = rtas_token("ibm,query-interrupt-source-number"); in rtas_msi_init()
503 change_token = rtas_token("ibm,change-msi"); in rtas_msi_init()
507 pr_debug("rtas_msi: no RTAS tokens, no MSI support.\n"); in rtas_msi_init()
508 return -1; in rtas_msi_init()
511 pr_debug("rtas_msi: Registering RTAS MSI callbacks.\n"); in rtas_msi_init()
518 WARN_ON(phb->controller_ops.setup_msi_irqs); in rtas_msi_init()
519 phb->controller_ops.setup_msi_irqs = rtas_setup_msi_irqs; in rtas_msi_init()
520 phb->controller_ops.teardown_msi_irqs = rtas_teardown_msi_irqs; in rtas_msi_init()