Lines Matching defs:inta
118 static u16 ti_sci_inta_get_dev_id(struct ti_sci_inta_irq_domain *inta, u32 hwirq)
123 if (inta->unmapped_cnt == 0)
131 for (i = 0; i < inta->unmapped_cnt; i++) {
132 if (dev_id == inta->unmapped_dev_ids[i]) {
133 dev_id = inta->ti_sci_id;
148 struct ti_sci_inta_irq_domain *inta;
155 inta = domain->host_data;
159 val = readq_relaxed(inta->base + vint_desc->vint_id * 0x1000 +
173 * @inta: IRQ domain corresponding to Interrupt Aggregator
178 static int ti_sci_inta_xlate_irq(struct ti_sci_inta_irq_domain *inta,
181 struct device_node *np = dev_of_node(&inta->pdev->dev);
210 struct ti_sci_inta_irq_domain *inta = domain->host_data;
218 vint_id = ti_sci_get_free_resource(inta->vint);
222 p_hwirq = ti_sci_inta_xlate_irq(inta, vint_id);
238 parent_node = of_irq_find_parent(dev_of_node(&inta->pdev->dev));
255 dev_err(&inta->pdev->dev, "Parent IRQ allocation failed\n");
262 list_add_tail(&vint_desc->list, &inta->vint_list);
270 ti_sci_release_resource(inta->vint, vint_id);
286 struct ti_sci_inta_irq_domain *inta = vint_desc->domain->host_data;
291 dev_id = ti_sci_inta_get_dev_id(inta, hwirq);
297 event_desc->global_event = ti_sci_get_free_resource(inta->global_event);
301 err = inta->sci->ops.rm_irq_ops.set_event_map(inta->sci,
303 inta->ti_sci_id,
312 ti_sci_release_resource(inta->global_event, event_desc->global_event);
330 struct ti_sci_inta_irq_domain *inta = domain->host_data;
335 mutex_lock(&inta->vint_mutex);
336 list_for_each_entry(vint_desc, &inta->vint_list, list) {
362 mutex_unlock(&inta->vint_mutex);
368 * @inta: Pointer to inta domain.
371 static void ti_sci_inta_free_parent_irq(struct ti_sci_inta_irq_domain *inta,
376 ti_sci_release_resource(inta->vint, vint_desc->vint_id);
391 struct ti_sci_inta_irq_domain *inta;
395 inta = vint_desc->domain->host_data;
396 dev_id = ti_sci_inta_get_dev_id(inta, hwirq);
398 mutex_lock(&inta->vint_mutex);
399 inta->sci->ops.rm_irq_ops.free_event_map(inta->sci,
401 inta->ti_sci_id,
407 ti_sci_release_resource(inta->global_event, event_desc->global_event);
411 ti_sci_inta_free_parent_irq(inta, vint_desc);
412 mutex_unlock(&inta->vint_mutex);
463 struct ti_sci_inta_irq_domain *inta;
467 inta = data->domain->host_data;
470 inta->base + vint_desc->vint_id * 0x1000 + offset);
601 arg->hwirq = TO_HWIRQ(pdev->id, desc->inta.dev_index);
615 static int ti_sci_inta_get_unmapped_sources(struct ti_sci_inta_irq_domain *inta)
617 struct device *dev = &inta->pdev->dev;
626 inta->unmapped_dev_ids = devm_kcalloc(dev, count,
627 sizeof(*inta->unmapped_dev_ids),
629 if (!inta->unmapped_dev_ids)
642 inta->unmapped_dev_ids[i++] = dev_id;
645 inta->unmapped_cnt = count;
654 struct ti_sci_inta_irq_domain *inta;
670 inta = devm_kzalloc(dev, sizeof(*inta), GFP_KERNEL);
671 if (!inta)
674 inta->pdev = pdev;
675 inta->sci = devm_ti_sci_get_by_phandle(dev, "ti,sci");
676 if (IS_ERR(inta->sci))
677 return dev_err_probe(dev, PTR_ERR(inta->sci),
680 ret = of_property_read_u32(dev->of_node, "ti,sci-dev-id", &inta->ti_sci_id);
686 inta->vint = devm_ti_sci_get_resource(inta->sci, dev, inta->ti_sci_id,
688 if (IS_ERR(inta->vint)) {
690 return PTR_ERR(inta->vint);
693 inta->global_event = devm_ti_sci_get_resource(inta->sci, dev, inta->ti_sci_id,
695 if (IS_ERR(inta->global_event)) {
697 return PTR_ERR(inta->global_event);
701 inta->base = devm_ioremap_resource(dev, res);
702 if (IS_ERR(inta->base))
703 return PTR_ERR(inta->base);
705 ret = ti_sci_inta_get_unmapped_sources(inta);
710 ti_sci_get_num_resources(inta->vint),
711 &ti_sci_inta_irq_domain_ops, inta);
726 INIT_LIST_HEAD(&inta->vint_list);
727 mutex_init(&inta->vint_mutex);
729 dev_info(dev, "Interrupt Aggregator domain %d created\n", inta->ti_sci_id);
735 { .compatible = "ti,sci-inta", },
743 .name = "ti-sci-inta",