Lines Matching full:msi
2 * Adding PCI-E MSI support for PPC4XX SoCs.
26 #include <linux/msi.h>
87 dev_dbg(&dev->dev, "PCIE-MSI:%s called. vec %x type %d\n", in ppc4xx_setup_msi_irqs()
90 pr_debug("ppc4xx msi: MSI-X untested, trying anyway.\n"); in ppc4xx_setup_msi_irqs()
101 pr_debug("%s: fail allocating msi interrupt\n", in ppc4xx_setup_msi_irqs()
112 /* Setup msi address space */ in ppc4xx_setup_msi_irqs()
129 dev_dbg(&dev->dev, "PCIE-MSI: tearing down msi irqs\n"); in ppc4xx_teardown_msi_irqs()
142 struct resource res, struct ppc4xx_msi *msi) in ppc4xx_setup_pcieh_hw() argument
155 msi_data = of_get_property(dev->dev.of_node, "msi-data", NULL); in ppc4xx_setup_pcieh_hw()
159 msi_mask = of_get_property(dev->dev.of_node, "msi-mask", NULL); in ppc4xx_setup_pcieh_hw()
163 msi->msi_dev = of_find_node_by_name(NULL, "ppc4xx-msi"); in ppc4xx_setup_pcieh_hw()
164 if (!msi->msi_dev) in ppc4xx_setup_pcieh_hw()
167 msi->msi_regs = of_iomap(msi->msi_dev, 0); in ppc4xx_setup_pcieh_hw()
168 if (!msi->msi_regs) { in ppc4xx_setup_pcieh_hw()
173 dev_dbg(&dev->dev, "PCIE-MSI: msi register mapped 0x%x 0x%x\n", in ppc4xx_setup_pcieh_hw()
174 (u32) (msi->msi_regs + PEIH_TERMADH), (u32) (msi->msi_regs)); in ppc4xx_setup_pcieh_hw()
181 msi->msi_addr_hi = upper_32_bits(msi_phys); in ppc4xx_setup_pcieh_hw()
182 msi->msi_addr_lo = lower_32_bits(msi_phys & 0xffffffff); in ppc4xx_setup_pcieh_hw()
183 dev_dbg(&dev->dev, "PCIE-MSI: msi address high 0x%x, low 0x%x\n", in ppc4xx_setup_pcieh_hw()
184 msi->msi_addr_hi, msi->msi_addr_lo); in ppc4xx_setup_pcieh_hw()
190 out_be32(msi->msi_regs + PEIH_TERMADH, msi->msi_addr_hi); in ppc4xx_setup_pcieh_hw()
191 out_be32(msi->msi_regs + PEIH_TERMADL, msi->msi_addr_lo); in ppc4xx_setup_pcieh_hw()
193 /* Program MSI Expected data and Mask bits */ in ppc4xx_setup_pcieh_hw()
194 out_be32(msi->msi_regs + PEIH_MSIED, *msi_data); in ppc4xx_setup_pcieh_hw()
195 out_be32(msi->msi_regs + PEIH_MSIMK, *msi_mask); in ppc4xx_setup_pcieh_hw()
202 iounmap(msi->msi_regs); in ppc4xx_setup_pcieh_hw()
204 of_node_put(msi->msi_dev); in ppc4xx_setup_pcieh_hw()
210 struct ppc4xx_msi *msi = dev->dev.platform_data; in ppc4xx_of_msi_remove() local
215 virq = msi->msi_virqs[i]; in ppc4xx_of_msi_remove()
220 if (msi->bitmap.bitmap) in ppc4xx_of_msi_remove()
221 msi_bitmap_free(&msi->bitmap); in ppc4xx_of_msi_remove()
222 iounmap(msi->msi_regs); in ppc4xx_of_msi_remove()
223 of_node_put(msi->msi_dev); in ppc4xx_of_msi_remove()
230 struct ppc4xx_msi *msi; in ppc4xx_msi_probe() local
235 dev_dbg(&dev->dev, "PCIE-MSI: Setting up MSI support...\n"); in ppc4xx_msi_probe()
237 msi = devm_kzalloc(&dev->dev, sizeof(*msi), GFP_KERNEL); in ppc4xx_msi_probe()
238 if (!msi) in ppc4xx_msi_probe()
240 dev->dev.platform_data = msi; in ppc4xx_msi_probe()
242 /* Get MSI ranges */ in ppc4xx_msi_probe()
253 err = ppc4xx_setup_pcieh_hw(dev, res, msi); in ppc4xx_msi_probe()
257 err = ppc4xx_msi_init_allocator(dev, msi); in ppc4xx_msi_probe()
259 dev_err(&dev->dev, "Error allocating MSI bitmap\n"); in ppc4xx_msi_probe()
262 ppc4xx_msi = *msi; in ppc4xx_msi_probe()
276 .compatible = "amcc,ppc4xx-msi",
284 .name = "ppc4xx-msi",