Lines Matching defs:msi

11 #include <linux/msi.h>
39 #define msi_hwirq(msi, msir_index, intr_index) \
40 ((msir_index) << (msi)->srs_shift | \
41 ((intr_index) << (msi)->ibs_shift))
78 seq_printf(p, " fsl-msi-%d", cascade_virq);
152 /* If the msi-address-64 property exists, then use it */
153 reg = of_get_property(hose->dn, "msi-address-64", &len);
202 * If the PCI node has an fsl,msi property, then we need to use it
205 np = of_parse_phandle(hose->dn, "fsl,msi", 0);
207 if (of_device_is_compatible(np, "fsl,mpic-msi") ||
208 of_device_is_compatible(np, "fsl,vmpic-msi") ||
209 of_device_is_compatible(np, "fsl,vmpic-msi-v4.3"))
213 "node %pOF has an invalid fsl,msi phandle %u\n",
228 * If the PCI node has an fsl,msi property, then we
297 pr_err("fsl-msi: fh_vmpic_get_msir() failed for "
325 struct fsl_msi *msi = platform_get_drvdata(ofdev);
328 if (msi->list.prev != NULL)
329 list_del(&msi->list);
331 if (msi->cascade_array[i]) {
332 virq = msi->cascade_array[i]->virq;
336 free_irq(virq, msi->cascade_array[i]);
337 kfree(msi->cascade_array[i]);
341 if (msi->bitmap.bitmap)
342 msi_bitmap_free(&msi->bitmap);
343 if ((msi->feature & FSL_PIC_IP_MASK) != FSL_PIC_IP_VMPIC)
344 iounmap(msi->msi_regs);
345 kfree(msi);
351 static int fsl_msi_setup_hwirq(struct fsl_msi *msi, struct platform_device *dev,
372 cascade_data->msi_data = msi;
374 msi->cascade_array[irq_index] = cascade_data;
377 "fsl-msi-cascade", cascade_data);
386 msi_bitmap_free_hwirqs(&msi->bitmap,
387 msi_hwirq(msi, offset, i), 1);
395 struct fsl_msi *msi;
408 msi = kzalloc(sizeof(struct fsl_msi), GFP_KERNEL);
409 if (!msi) {
413 platform_set_drvdata(dev, msi);
415 msi->irqhost = irq_domain_add_linear(dev->dev.of_node,
416 NR_MSI_IRQS_MAX, &fsl_msi_host_ops, msi);
418 if (msi->irqhost == NULL) {
425 * Under the Freescale hypervisor, the msi nodes don't have a 'reg'
436 msi->msi_regs = ioremap(res.start, resource_size(&res));
437 if (!msi->msi_regs) {
443 msi->msiir_offset =
451 msi->msiir_offset = features->msiir_offset +
454 msi->msiir_offset = msiir.start & MSIIR_OFFSET_MASK;
457 msi->feature = features->fsl_pic_ip;
462 msi->feature |= MSI_HW_ERRATA_ENDIAN;
466 * that have an "fsl,msi" property.
468 msi->phandle = dev->dev.of_node->phandle;
470 err = fsl_msi_init_allocator(msi);
476 p = of_get_property(dev->dev.of_node, "msi-available-ranges", &len);
478 if (of_device_is_compatible(dev->dev.of_node, "fsl,mpic-msi-v4.3") ||
479 of_device_is_compatible(dev->dev.of_node, "fsl,vmpic-msi-v4.3")) {
480 msi->srs_shift = MSIIR1_SRS_SHIFT;
481 msi->ibs_shift = MSIIR1_IBS_SHIFT;
483 dev_warn(&dev->dev, "%s: dose not support msi-available-ranges property\n",
488 err = fsl_msi_setup_hwirq(msi, dev,
497 msi->srs_shift = MSIIR_SRS_SHIFT;
498 msi->ibs_shift = MSIIR_IBS_SHIFT;
501 dev_err(&dev->dev, "%s: Malformed msi-available-ranges property\n",
515 pr_warn("%s: %pOF: msi available range of %u at %u is not IRQ-aligned\n",
526 err = fsl_msi_setup_hwirq(msi, dev, offset + j,
534 list_add_tail(&msi->list, &msi_head);
576 .compatible = "fsl,mpic-msi",
580 .compatible = "fsl,mpic-msi-v4.3",
584 .compatible = "fsl,ipic-msi",
589 .compatible = "fsl,vmpic-msi",
593 .compatible = "fsl,vmpic-msi-v4.3",
602 .name = "fsl-msi",