Lines Matching full:msi

24 #include <linux/msi.h>
66 struct rcar_msi msi; member
70 static struct rcar_pcie_host *msi_to_host(struct rcar_msi *msi) in msi_to_host() argument
72 return container_of(msi, struct rcar_pcie_host, msi); in msi_to_host()
406 /* Enable MSI */ in rcar_pcie_hw_init()
494 struct rcar_msi *msi = &host->msi; in rcar_pcie_msi_irq() local
500 /* MSI & INTx share an interrupt - we only handle MSI here */ in rcar_pcie_msi_irq()
508 ret = generic_handle_domain_irq(msi->domain->parent, index); in rcar_pcie_msi_irq()
510 /* Unknown MSI, just clear it */ in rcar_pcie_msi_irq()
511 dev_dbg(dev, "unexpected MSI\n"); in rcar_pcie_msi_irq()
540 .name = "PCIe MSI",
548 struct rcar_msi *msi = irq_data_get_irq_chip_data(d); in rcar_msi_irq_ack() local
549 struct rcar_pcie *pcie = &msi_to_host(msi)->pcie; in rcar_msi_irq_ack()
557 struct rcar_msi *msi = irq_data_get_irq_chip_data(d); in rcar_msi_irq_mask() local
558 struct rcar_pcie *pcie = &msi_to_host(msi)->pcie; in rcar_msi_irq_mask()
562 spin_lock_irqsave(&msi->mask_lock, flags); in rcar_msi_irq_mask()
566 spin_unlock_irqrestore(&msi->mask_lock, flags); in rcar_msi_irq_mask()
571 struct rcar_msi *msi = irq_data_get_irq_chip_data(d); in rcar_msi_irq_unmask() local
572 struct rcar_pcie *pcie = &msi_to_host(msi)->pcie; in rcar_msi_irq_unmask()
576 spin_lock_irqsave(&msi->mask_lock, flags); in rcar_msi_irq_unmask()
580 spin_unlock_irqrestore(&msi->mask_lock, flags); in rcar_msi_irq_unmask()
590 struct rcar_msi *msi = irq_data_get_irq_chip_data(data); in rcar_compose_msi_msg() local
591 struct rcar_pcie *pcie = &msi_to_host(msi)->pcie; in rcar_compose_msi_msg()
599 .name = "Rcar MSI",
610 struct rcar_msi *msi = domain->host_data; in rcar_msi_domain_alloc() local
614 mutex_lock(&msi->map_lock); in rcar_msi_domain_alloc()
616 hwirq = bitmap_find_free_region(msi->used, INT_PCI_MSI_NR, order_base_2(nr_irqs)); in rcar_msi_domain_alloc()
618 mutex_unlock(&msi->map_lock); in rcar_msi_domain_alloc()
635 struct rcar_msi *msi = domain->host_data; in rcar_msi_domain_free() local
637 mutex_lock(&msi->map_lock); in rcar_msi_domain_free()
639 bitmap_release_region(msi->used, d->hwirq, order_base_2(nr_irqs)); in rcar_msi_domain_free()
641 mutex_unlock(&msi->map_lock); in rcar_msi_domain_free()
655 static int rcar_allocate_domains(struct rcar_msi *msi) in rcar_allocate_domains() argument
657 struct rcar_pcie *pcie = &msi_to_host(msi)->pcie; in rcar_allocate_domains()
662 &rcar_msi_domain_ops, msi); in rcar_allocate_domains()
669 msi->domain = pci_msi_create_irq_domain(fwnode, &rcar_msi_info, parent); in rcar_allocate_domains()
670 if (!msi->domain) { in rcar_allocate_domains()
671 dev_err(pcie->dev, "failed to create MSI domain\n"); in rcar_allocate_domains()
679 static void rcar_free_domains(struct rcar_msi *msi) in rcar_free_domains() argument
681 struct irq_domain *parent = msi->domain->parent; in rcar_free_domains()
683 irq_domain_remove(msi->domain); in rcar_free_domains()
691 struct rcar_msi *msi = &host->msi; in rcar_pcie_enable_msi() local
695 mutex_init(&msi->map_lock); in rcar_pcie_enable_msi()
696 spin_lock_init(&msi->mask_lock); in rcar_pcie_enable_msi()
702 err = rcar_allocate_domains(msi); in rcar_pcie_enable_msi()
706 /* Two irqs are for MSI, but they are also used for non-MSI irqs */ in rcar_pcie_enable_msi()
707 err = devm_request_irq(dev, msi->irq1, rcar_pcie_msi_irq, in rcar_pcie_enable_msi()
715 err = devm_request_irq(dev, msi->irq2, rcar_pcie_msi_irq, in rcar_pcie_enable_msi()
727 * Setup MSI data target using RC base address address, which in rcar_pcie_enable_msi()
736 rcar_free_domains(msi); in rcar_pcie_enable_msi()
744 /* Disable all MSI interrupts */ in rcar_pcie_teardown_msi()
747 /* Disable address decoding of the MSI interrupt, MSIFE */ in rcar_pcie_teardown_msi()
750 rcar_free_domains(&host->msi); in rcar_pcie_teardown_msi()
780 dev_err(dev, "cannot get platform resources for msi interrupt\n"); in rcar_pcie_get_resources()
784 host->msi.irq1 = i; in rcar_pcie_get_resources()
788 dev_err(dev, "cannot get platform resources for msi interrupt\n"); in rcar_pcie_get_resources()
792 host->msi.irq2 = i; in rcar_pcie_get_resources()
803 irq_dispose_mapping(host->msi.irq1); in rcar_pcie_get_resources()
951 "failed to enable MSI support: %d\n", in rcar_pcie_probe()
977 irq_dispose_mapping(host->msi.irq2); in rcar_pcie_probe()
978 irq_dispose_mapping(host->msi.irq1); in rcar_pcie_probe()
1008 /* Enable MSI */ in rcar_pcie_resume()
1017 bitmap_to_arr32(&val, host->msi.used, INT_PCI_MSI_NR); in rcar_pcie_resume()