v2m 99 drivers/irqchip/irq-gic-v2m.c static phys_addr_t gicv2m_get_msi_addr(struct v2m_data *v2m, int hwirq) v2m 101 drivers/irqchip/irq-gic-v2m.c if (v2m->flags & GICV2M_GRAVITON_ADDRESS_ONLY) v2m 102 drivers/irqchip/irq-gic-v2m.c return v2m->res.start | ((hwirq - 32) << 3); v2m 104 drivers/irqchip/irq-gic-v2m.c return v2m->res.start + V2M_MSI_SETSPI_NS; v2m 109 drivers/irqchip/irq-gic-v2m.c struct v2m_data *v2m = irq_data_get_irq_chip_data(data); v2m 110 drivers/irqchip/irq-gic-v2m.c phys_addr_t addr = gicv2m_get_msi_addr(v2m, data->hwirq); v2m 115 drivers/irqchip/irq-gic-v2m.c if (v2m->flags & GICV2M_GRAVITON_ADDRESS_ONLY) v2m 119 drivers/irqchip/irq-gic-v2m.c if (v2m->flags & GICV2M_NEEDS_SPI_OFFSET) v2m 120 drivers/irqchip/irq-gic-v2m.c msg->data -= v2m->spi_offset; v2m 167 drivers/irqchip/irq-gic-v2m.c static void gicv2m_unalloc_msi(struct v2m_data *v2m, unsigned int hwirq, v2m 171 drivers/irqchip/irq-gic-v2m.c bitmap_release_region(v2m->bm, hwirq - v2m->spi_start, v2m 180 drivers/irqchip/irq-gic-v2m.c struct v2m_data *v2m = NULL, *tmp; v2m 188 drivers/irqchip/irq-gic-v2m.c v2m = tmp; v2m 194 drivers/irqchip/irq-gic-v2m.c if (!v2m) v2m 197 drivers/irqchip/irq-gic-v2m.c hwirq = v2m->spi_start + offset; v2m 200 drivers/irqchip/irq-gic-v2m.c gicv2m_get_msi_addr(v2m, hwirq)); v2m 210 drivers/irqchip/irq-gic-v2m.c &gicv2m_irq_chip, v2m); v2m 217 drivers/irqchip/irq-gic-v2m.c gicv2m_unalloc_msi(v2m, hwirq, nr_irqs); v2m 225 drivers/irqchip/irq-gic-v2m.c struct v2m_data *v2m = irq_data_get_irq_chip_data(d); v2m 227 drivers/irqchip/irq-gic-v2m.c gicv2m_unalloc_msi(v2m, d->hwirq, nr_irqs); v2m 267 drivers/irqchip/irq-gic-v2m.c struct v2m_data *v2m, *tmp; v2m 269 drivers/irqchip/irq-gic-v2m.c list_for_each_entry_safe(v2m, tmp, &v2m_nodes, entry) { v2m 270 drivers/irqchip/irq-gic-v2m.c list_del(&v2m->entry); v2m 271 drivers/irqchip/irq-gic-v2m.c kfree(v2m->bm); v2m 272 drivers/irqchip/irq-gic-v2m.c iounmap(v2m->base); v2m 273 drivers/irqchip/irq-gic-v2m.c of_node_put(to_of_node(v2m->fwnode)); v2m 274 drivers/irqchip/irq-gic-v2m.c if (is_fwnode_irqchip(v2m->fwnode)) v2m 275 drivers/irqchip/irq-gic-v2m.c irq_domain_free_fwnode(v2m->fwnode); v2m 276 drivers/irqchip/irq-gic-v2m.c kfree(v2m); v2m 283 drivers/irqchip/irq-gic-v2m.c struct v2m_data *v2m; v2m 285 drivers/irqchip/irq-gic-v2m.c v2m = list_first_entry_or_null(&v2m_nodes, struct v2m_data, entry); v2m 286 drivers/irqchip/irq-gic-v2m.c if (!v2m) v2m 289 drivers/irqchip/irq-gic-v2m.c inner_domain = irq_domain_create_tree(v2m->fwnode, v2m 290 drivers/irqchip/irq-gic-v2m.c &gicv2m_domain_ops, v2m); v2m 298 drivers/irqchip/irq-gic-v2m.c pci_domain = pci_msi_create_irq_domain(v2m->fwnode, v2m 301 drivers/irqchip/irq-gic-v2m.c plat_domain = platform_msi_create_irq_domain(v2m->fwnode, v2m 322 drivers/irqchip/irq-gic-v2m.c struct v2m_data *v2m; v2m 324 drivers/irqchip/irq-gic-v2m.c v2m = kzalloc(sizeof(struct v2m_data), GFP_KERNEL); v2m 325 drivers/irqchip/irq-gic-v2m.c if (!v2m) { v2m 330 drivers/irqchip/irq-gic-v2m.c INIT_LIST_HEAD(&v2m->entry); v2m 331 drivers/irqchip/irq-gic-v2m.c v2m->fwnode = fwnode; v2m 332 drivers/irqchip/irq-gic-v2m.c v2m->flags = flags; v2m 334 drivers/irqchip/irq-gic-v2m.c memcpy(&v2m->res, res, sizeof(struct resource)); v2m 336 drivers/irqchip/irq-gic-v2m.c v2m->base = ioremap(v2m->res.start, resource_size(&v2m->res)); v2m 337 drivers/irqchip/irq-gic-v2m.c if (!v2m->base) { v2m 344 drivers/irqchip/irq-gic-v2m.c v2m->spi_start = spi_start; v2m 345 drivers/irqchip/irq-gic-v2m.c v2m->nr_spis = nr_spis; v2m 350 drivers/irqchip/irq-gic-v2m.c if (v2m->flags & GICV2M_GRAVITON_ADDRESS_ONLY) { v2m 354 drivers/irqchip/irq-gic-v2m.c typer = readl_relaxed(v2m->base + V2M_MSI_TYPER); v2m 356 drivers/irqchip/irq-gic-v2m.c v2m->spi_start = V2M_MSI_TYPER_BASE_SPI(typer); v2m 357 drivers/irqchip/irq-gic-v2m.c v2m->nr_spis = V2M_MSI_TYPER_NUM_SPI(typer); v2m 360 drivers/irqchip/irq-gic-v2m.c if (!is_msi_spi_valid(v2m->spi_start, v2m->nr_spis)) { v2m 378 drivers/irqchip/irq-gic-v2m.c if (!(v2m->flags & GICV2M_GRAVITON_ADDRESS_ONLY)) { v2m 379 drivers/irqchip/irq-gic-v2m.c switch (readl_relaxed(v2m->base + V2M_MSI_IIDR)) { v2m 381 drivers/irqchip/irq-gic-v2m.c v2m->flags |= GICV2M_NEEDS_SPI_OFFSET; v2m 382 drivers/irqchip/irq-gic-v2m.c v2m->spi_offset = v2m->spi_start; v2m 385 drivers/irqchip/irq-gic-v2m.c v2m->flags |= GICV2M_NEEDS_SPI_OFFSET; v2m 386 drivers/irqchip/irq-gic-v2m.c v2m->spi_offset = 32; v2m 390 drivers/irqchip/irq-gic-v2m.c v2m->bm = kcalloc(BITS_TO_LONGS(v2m->nr_spis), sizeof(long), v2m 392 drivers/irqchip/irq-gic-v2m.c if (!v2m->bm) { v2m 397 drivers/irqchip/irq-gic-v2m.c list_add_tail(&v2m->entry, &v2m_nodes); v2m 400 drivers/irqchip/irq-gic-v2m.c v2m->spi_start, (v2m->spi_start + v2m->nr_spis - 1)); v2m 404 drivers/irqchip/irq-gic-v2m.c iounmap(v2m->base); v2m 406 drivers/irqchip/irq-gic-v2m.c kfree(v2m);