Lines Matching refs:msi

257 	struct brcm_msi		*msi;  member
451 struct brcm_msi *msi; in brcm_pcie_msi_isr() local
456 msi = irq_desc_get_handler_data(desc); in brcm_pcie_msi_isr()
457 dev = msi->dev; in brcm_pcie_msi_isr()
459 status = readl(msi->intr_base + MSI_INT_STATUS); in brcm_pcie_msi_isr()
460 status >>= msi->legacy_shift; in brcm_pcie_msi_isr()
462 for_each_set_bit(bit, &status, msi->nr) { in brcm_pcie_msi_isr()
464 ret = generic_handle_domain_irq(msi->inner_domain, bit); in brcm_pcie_msi_isr()
474 struct brcm_msi *msi = irq_data_get_irq_chip_data(data); in brcm_msi_compose_msi_msg() local
476 msg->address_lo = lower_32_bits(msi->target_addr); in brcm_msi_compose_msi_msg()
477 msg->address_hi = upper_32_bits(msi->target_addr); in brcm_msi_compose_msi_msg()
489 struct brcm_msi *msi = irq_data_get_irq_chip_data(data); in brcm_msi_ack_irq() local
490 const int shift_amt = data->hwirq + msi->legacy_shift; in brcm_msi_ack_irq()
492 writel(1 << shift_amt, msi->intr_base + MSI_INT_CLR); in brcm_msi_ack_irq()
503 static int brcm_msi_alloc(struct brcm_msi *msi, unsigned int nr_irqs) in brcm_msi_alloc() argument
507 mutex_lock(&msi->lock); in brcm_msi_alloc()
508 hwirq = bitmap_find_free_region(msi->used, msi->nr, in brcm_msi_alloc()
510 mutex_unlock(&msi->lock); in brcm_msi_alloc()
515 static void brcm_msi_free(struct brcm_msi *msi, unsigned long hwirq, in brcm_msi_free() argument
518 mutex_lock(&msi->lock); in brcm_msi_free()
519 bitmap_release_region(msi->used, hwirq, order_base_2(nr_irqs)); in brcm_msi_free()
520 mutex_unlock(&msi->lock); in brcm_msi_free()
526 struct brcm_msi *msi = domain->host_data; in brcm_irq_domain_alloc() local
529 hwirq = brcm_msi_alloc(msi, nr_irqs); in brcm_irq_domain_alloc()
545 struct brcm_msi *msi = irq_data_get_irq_chip_data(d); in brcm_irq_domain_free() local
547 brcm_msi_free(msi, d->hwirq, nr_irqs); in brcm_irq_domain_free()
555 static int brcm_allocate_domains(struct brcm_msi *msi) in brcm_allocate_domains() argument
557 struct fwnode_handle *fwnode = of_node_to_fwnode(msi->np); in brcm_allocate_domains()
558 struct device *dev = msi->dev; in brcm_allocate_domains()
560 msi->inner_domain = irq_domain_add_linear(NULL, msi->nr, &msi_domain_ops, msi); in brcm_allocate_domains()
561 if (!msi->inner_domain) { in brcm_allocate_domains()
566 msi->msi_domain = pci_msi_create_irq_domain(fwnode, in brcm_allocate_domains()
568 msi->inner_domain); in brcm_allocate_domains()
569 if (!msi->msi_domain) { in brcm_allocate_domains()
571 irq_domain_remove(msi->inner_domain); in brcm_allocate_domains()
578 static void brcm_free_domains(struct brcm_msi *msi) in brcm_free_domains() argument
580 irq_domain_remove(msi->msi_domain); in brcm_free_domains()
581 irq_domain_remove(msi->inner_domain); in brcm_free_domains()
586 struct brcm_msi *msi = pcie->msi; in brcm_msi_remove() local
588 if (!msi) in brcm_msi_remove()
590 irq_set_chained_handler_and_data(msi->irq, NULL, NULL); in brcm_msi_remove()
591 brcm_free_domains(msi); in brcm_msi_remove()
594 static void brcm_msi_set_regs(struct brcm_msi *msi) in brcm_msi_set_regs() argument
596 u32 val = msi->legacy ? BRCM_INT_PCI_MSI_LEGACY_MASK : in brcm_msi_set_regs()
599 writel(val, msi->intr_base + MSI_INT_MASK_CLR); in brcm_msi_set_regs()
600 writel(val, msi->intr_base + MSI_INT_CLR); in brcm_msi_set_regs()
606 writel(lower_32_bits(msi->target_addr) | 0x1, in brcm_msi_set_regs()
607 msi->base + PCIE_MISC_MSI_BAR_CONFIG_LO); in brcm_msi_set_regs()
608 writel(upper_32_bits(msi->target_addr), in brcm_msi_set_regs()
609 msi->base + PCIE_MISC_MSI_BAR_CONFIG_HI); in brcm_msi_set_regs()
611 val = msi->legacy ? PCIE_MISC_MSI_DATA_CONFIG_VAL_8 : PCIE_MISC_MSI_DATA_CONFIG_VAL_32; in brcm_msi_set_regs()
612 writel(val, msi->base + PCIE_MISC_MSI_DATA_CONFIG); in brcm_msi_set_regs()
617 struct brcm_msi *msi; in brcm_pcie_enable_msi() local
627 msi = devm_kzalloc(dev, sizeof(struct brcm_msi), GFP_KERNEL); in brcm_pcie_enable_msi()
628 if (!msi) in brcm_pcie_enable_msi()
631 mutex_init(&msi->lock); in brcm_pcie_enable_msi()
632 msi->dev = dev; in brcm_pcie_enable_msi()
633 msi->base = pcie->base; in brcm_pcie_enable_msi()
634 msi->np = pcie->np; in brcm_pcie_enable_msi()
635 msi->target_addr = pcie->msi_target_addr; in brcm_pcie_enable_msi()
636 msi->irq = irq; in brcm_pcie_enable_msi()
637 msi->legacy = pcie->hw_rev < BRCM_PCIE_HW_REV_33; in brcm_pcie_enable_msi()
645 if (msi->legacy) { in brcm_pcie_enable_msi()
646 msi->intr_base = msi->base + PCIE_INTR2_CPU_BASE; in brcm_pcie_enable_msi()
647 msi->nr = BRCM_INT_PCI_MSI_LEGACY_NR; in brcm_pcie_enable_msi()
648 msi->legacy_shift = 24; in brcm_pcie_enable_msi()
650 msi->intr_base = msi->base + PCIE_MSI_INTR2_BASE; in brcm_pcie_enable_msi()
651 msi->nr = BRCM_INT_PCI_MSI_NR; in brcm_pcie_enable_msi()
652 msi->legacy_shift = 0; in brcm_pcie_enable_msi()
655 ret = brcm_allocate_domains(msi); in brcm_pcie_enable_msi()
659 irq_set_chained_handler_and_data(msi->irq, brcm_pcie_msi_isr, msi); in brcm_pcie_enable_msi()
661 brcm_msi_set_regs(msi); in brcm_pcie_enable_msi()
662 pcie->msi = msi; in brcm_pcie_enable_msi()
1377 if (pcie->msi) in brcm_pcie_resume_noirq()
1378 brcm_msi_set_regs(pcie->msi); in brcm_pcie_resume_noirq()