Lines Matching full:msi

20 #include <linux/irqchip/irq-msi-lib.h>
25 #include <linux/msi.h>
51 struct rcar_msi msi; member
95 static struct rcar_pcie_host *msi_to_host(struct rcar_msi *msi) in msi_to_host() argument
97 return container_of(msi, struct rcar_pcie_host, msi); in msi_to_host()
485 /* Enable MSI */ in rcar_pcie_hw_init()
573 struct rcar_msi *msi = &host->msi; in rcar_pcie_msi_irq() local
579 /* MSI & INTx share an interrupt - we only handle MSI here */ in rcar_pcie_msi_irq()
587 ret = generic_handle_domain_irq(msi->domain->parent, index); in rcar_pcie_msi_irq()
589 /* Unknown MSI, just clear it */ in rcar_pcie_msi_irq()
590 dev_dbg(dev, "unexpected MSI\n"); in rcar_pcie_msi_irq()
603 struct rcar_msi *msi = irq_data_get_irq_chip_data(d); in rcar_msi_irq_ack() local
604 struct rcar_pcie *pcie = &msi_to_host(msi)->pcie; in rcar_msi_irq_ack()
612 struct rcar_msi *msi = irq_data_get_irq_chip_data(d); in rcar_msi_irq_mask() local
613 struct rcar_pcie *pcie = &msi_to_host(msi)->pcie; in rcar_msi_irq_mask()
617 spin_lock_irqsave(&msi->mask_lock, flags); in rcar_msi_irq_mask()
621 spin_unlock_irqrestore(&msi->mask_lock, flags); in rcar_msi_irq_mask()
626 struct rcar_msi *msi = irq_data_get_irq_chip_data(d); in rcar_msi_irq_unmask() local
627 struct rcar_pcie *pcie = &msi_to_host(msi)->pcie; in rcar_msi_irq_unmask()
631 spin_lock_irqsave(&msi->mask_lock, flags); in rcar_msi_irq_unmask()
635 spin_unlock_irqrestore(&msi->mask_lock, flags); in rcar_msi_irq_unmask()
640 struct rcar_msi *msi = irq_data_get_irq_chip_data(data); in rcar_compose_msi_msg() local
641 struct rcar_pcie *pcie = &msi_to_host(msi)->pcie; in rcar_compose_msi_msg()
649 .name = "R-Car MSI",
659 struct rcar_msi *msi = domain->host_data; in rcar_msi_domain_alloc() local
663 mutex_lock(&msi->map_lock); in rcar_msi_domain_alloc()
665 hwirq = bitmap_find_free_region(msi->used, INT_PCI_MSI_NR, order_base_2(nr_irqs)); in rcar_msi_domain_alloc()
667 mutex_unlock(&msi->map_lock); in rcar_msi_domain_alloc()
684 struct rcar_msi *msi = domain->host_data; in rcar_msi_domain_free() local
686 mutex_lock(&msi->map_lock); in rcar_msi_domain_free()
688 bitmap_release_region(msi->used, d->hwirq, order_base_2(nr_irqs)); in rcar_msi_domain_free()
690 mutex_unlock(&msi->map_lock); in rcar_msi_domain_free()
715 static int rcar_allocate_domains(struct rcar_msi *msi) in rcar_allocate_domains() argument
717 struct rcar_pcie *pcie = &msi_to_host(msi)->pcie; in rcar_allocate_domains()
721 .host_data = msi, in rcar_allocate_domains()
725 msi->domain = msi_create_parent_irq_domain(&info, &rcar_msi_parent_ops); in rcar_allocate_domains()
726 if (!msi->domain) { in rcar_allocate_domains()
734 static void rcar_free_domains(struct rcar_msi *msi) in rcar_free_domains() argument
736 irq_domain_remove(msi->domain); in rcar_free_domains()
743 struct rcar_msi *msi = &host->msi; in rcar_pcie_enable_msi() local
747 mutex_init(&msi->map_lock); in rcar_pcie_enable_msi()
748 spin_lock_init(&msi->mask_lock); in rcar_pcie_enable_msi()
754 err = rcar_allocate_domains(msi); in rcar_pcie_enable_msi()
758 /* Two IRQs are for MSI, but they are also used for non-MSI IRQs */ in rcar_pcie_enable_msi()
759 err = devm_request_irq(dev, msi->irq1, rcar_pcie_msi_irq, in rcar_pcie_enable_msi()
767 err = devm_request_irq(dev, msi->irq2, rcar_pcie_msi_irq, in rcar_pcie_enable_msi()
779 * Setup MSI data target using RC base address, which is guaranteed in rcar_pcie_enable_msi()
788 rcar_free_domains(msi); in rcar_pcie_enable_msi()
796 /* Disable all MSI interrupts */ in rcar_pcie_teardown_msi()
799 /* Disable address decoding of the MSI interrupt, MSIFE */ in rcar_pcie_teardown_msi()
802 rcar_free_domains(&host->msi); in rcar_pcie_teardown_msi()
832 dev_err(dev, "cannot get platform resources for msi interrupt\n"); in rcar_pcie_get_resources()
836 host->msi.irq1 = i; in rcar_pcie_get_resources()
840 dev_err(dev, "cannot get platform resources for msi interrupt\n"); in rcar_pcie_get_resources()
844 host->msi.irq2 = i; in rcar_pcie_get_resources()
849 irq_dispose_mapping(host->msi.irq1); in rcar_pcie_get_resources()
1014 "failed to enable MSI support: %d\n", in rcar_pcie_probe()
1040 irq_dispose_mapping(host->msi.irq2); in rcar_pcie_probe()
1041 irq_dispose_mapping(host->msi.irq1); in rcar_pcie_probe()
1071 /* Enable MSI */ in rcar_pcie_resume()
1080 bitmap_to_arr32(&val, host->msi.used, INT_PCI_MSI_NR); in rcar_pcie_resume()