Lines Matching refs:msi
345 struct tegra_msi msi; member
357 static inline struct tegra_pcie *msi_to_pcie(struct tegra_msi *msi) in msi_to_pcie() argument
359 return container_of(msi, struct tegra_pcie, msi); in msi_to_pcie()
1537 struct tegra_msi *msi = &pcie->msi; in tegra_pcie_msi_irq() local
1551 ret = generic_handle_domain_irq(msi->domain, index); in tegra_pcie_msi_irq()
1571 struct tegra_msi *msi = irq_data_get_irq_chip_data(d); in tegra_msi_irq_ack() local
1572 struct tegra_pcie *pcie = msi_to_pcie(msi); in tegra_msi_irq_ack()
1581 struct tegra_msi *msi = irq_data_get_irq_chip_data(d); in tegra_msi_irq_mask() local
1582 struct tegra_pcie *pcie = msi_to_pcie(msi); in tegra_msi_irq_mask()
1587 spin_lock_irqsave(&msi->mask_lock, flags); in tegra_msi_irq_mask()
1591 spin_unlock_irqrestore(&msi->mask_lock, flags); in tegra_msi_irq_mask()
1596 struct tegra_msi *msi = irq_data_get_irq_chip_data(d); in tegra_msi_irq_unmask() local
1597 struct tegra_pcie *pcie = msi_to_pcie(msi); in tegra_msi_irq_unmask()
1602 spin_lock_irqsave(&msi->mask_lock, flags); in tegra_msi_irq_unmask()
1606 spin_unlock_irqrestore(&msi->mask_lock, flags); in tegra_msi_irq_unmask()
1611 struct tegra_msi *msi = irq_data_get_irq_chip_data(data); in tegra_compose_msi_msg() local
1613 msg->address_lo = lower_32_bits(msi->phys); in tegra_compose_msi_msg()
1614 msg->address_hi = upper_32_bits(msi->phys); in tegra_compose_msi_msg()
1629 struct tegra_msi *msi = domain->host_data; in tegra_msi_domain_alloc() local
1633 mutex_lock(&msi->map_lock); in tegra_msi_domain_alloc()
1635 hwirq = bitmap_find_free_region(msi->used, INT_PCI_MSI_NR, order_base_2(nr_irqs)); in tegra_msi_domain_alloc()
1637 mutex_unlock(&msi->map_lock); in tegra_msi_domain_alloc()
1656 struct tegra_msi *msi = domain->host_data; in tegra_msi_domain_free() local
1658 mutex_lock(&msi->map_lock); in tegra_msi_domain_free()
1660 bitmap_release_region(msi->used, d->hwirq, order_base_2(nr_irqs)); in tegra_msi_domain_free()
1662 mutex_unlock(&msi->map_lock); in tegra_msi_domain_free()
1682 static int tegra_allocate_domains(struct tegra_msi *msi) in tegra_allocate_domains() argument
1684 struct tegra_pcie *pcie = msi_to_pcie(msi); in tegra_allocate_domains()
1690 .host_data = msi, in tegra_allocate_domains()
1693 msi->domain = msi_create_parent_irq_domain(&info, &tegra_msi_parent_ops); in tegra_allocate_domains()
1694 if (!msi->domain) { in tegra_allocate_domains()
1701 static void tegra_free_domains(struct tegra_msi *msi) in tegra_free_domains() argument
1703 irq_domain_remove(msi->domain); in tegra_free_domains()
1709 struct tegra_msi *msi = &pcie->msi; in tegra_pcie_msi_setup() local
1713 mutex_init(&msi->map_lock); in tegra_pcie_msi_setup()
1714 spin_lock_init(&msi->mask_lock); in tegra_pcie_msi_setup()
1717 err = tegra_allocate_domains(msi); in tegra_pcie_msi_setup()
1726 msi->irq = err; in tegra_pcie_msi_setup()
1728 irq_set_chained_handler_and_data(msi->irq, tegra_pcie_msi_irq, pcie); in tegra_pcie_msi_setup()
1741 msi->virt = dma_alloc_attrs(dev, PAGE_SIZE, &msi->phys, GFP_KERNEL, in tegra_pcie_msi_setup()
1743 if (!msi->virt) { in tegra_pcie_msi_setup()
1752 irq_set_chained_handler_and_data(msi->irq, NULL, NULL); in tegra_pcie_msi_setup()
1755 tegra_free_domains(msi); in tegra_pcie_msi_setup()
1763 struct tegra_msi *msi = &pcie->msi; in tegra_pcie_enable_msi() local
1767 afi_writel(pcie, msi->phys >> soc->msi_base_shift, AFI_MSI_FPCI_BAR_ST); in tegra_pcie_enable_msi()
1768 afi_writel(pcie, msi->phys, AFI_MSI_AXI_BAR_ST); in tegra_pcie_enable_msi()
1773 bitmap_to_arr32(msi_state, msi->used, INT_PCI_MSI_NR); in tegra_pcie_enable_msi()
1785 struct tegra_msi *msi = &pcie->msi; in tegra_pcie_msi_teardown() local
1788 dma_free_attrs(pcie->dev, PAGE_SIZE, msi->virt, msi->phys, in tegra_pcie_msi_teardown()
1792 irq = irq_find_mapping(msi->domain, i); in tegra_pcie_msi_teardown()
1797 irq_set_chained_handler_and_data(msi->irq, NULL, NULL); in tegra_pcie_msi_teardown()
1800 tegra_free_domains(msi); in tegra_pcie_msi_teardown()