Lines Matching refs: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 +
170 * @inta: IRQ domain corresponding to Interrupt Aggregator
175 static int ti_sci_inta_xlate_irq(struct ti_sci_inta_irq_domain *inta,
178 struct device_node *np = dev_of_node(&inta->pdev->dev);
207 struct ti_sci_inta_irq_domain *inta = domain->host_data;
215 vint_id = ti_sci_get_free_resource(inta->vint);
219 p_hwirq = ti_sci_inta_xlate_irq(inta, vint_id);
235 parent_node = of_irq_find_parent(dev_of_node(&inta->pdev->dev));
252 dev_err(&inta->pdev->dev, "Parent IRQ allocation failed\n");
259 list_add_tail(&vint_desc->list, &inta->vint_list);
267 ti_sci_release_resource(inta->vint, vint_id);
283 struct ti_sci_inta_irq_domain *inta = vint_desc->domain->host_data;
288 dev_id = ti_sci_inta_get_dev_id(inta, hwirq);
294 event_desc->global_event = ti_sci_get_free_resource(inta->global_event);
298 err = inta->sci->ops.rm_irq_ops.set_event_map(inta->sci,
300 inta->ti_sci_id,
309 ti_sci_release_resource(inta->global_event, event_desc->global_event);
327 struct ti_sci_inta_irq_domain *inta = domain->host_data;
332 mutex_lock(&inta->vint_mutex);
333 list_for_each_entry(vint_desc, &inta->vint_list, list) {
359 mutex_unlock(&inta->vint_mutex);
365 * @inta: Pointer to inta domain.
368 static void ti_sci_inta_free_parent_irq(struct ti_sci_inta_irq_domain *inta,
373 ti_sci_release_resource(inta->vint, vint_desc->vint_id);
388 struct ti_sci_inta_irq_domain *inta;
392 inta = vint_desc->domain->host_data;
393 dev_id = ti_sci_inta_get_dev_id(inta, hwirq);
395 mutex_lock(&inta->vint_mutex);
396 inta->sci->ops.rm_irq_ops.free_event_map(inta->sci,
398 inta->ti_sci_id,
404 ti_sci_release_resource(inta->global_event, event_desc->global_event);
408 ti_sci_inta_free_parent_irq(inta, vint_desc);
409 mutex_unlock(&inta->vint_mutex);
460 struct ti_sci_inta_irq_domain *inta;
464 inta = data->domain->host_data;
467 inta->base + vint_desc->vint_id * 0x1000 + offset);
612 static int ti_sci_inta_get_unmapped_sources(struct ti_sci_inta_irq_domain *inta)
614 struct device *dev = &inta->pdev->dev;
623 inta->unmapped_dev_ids = devm_kcalloc(dev, count,
624 sizeof(*inta->unmapped_dev_ids),
626 if (!inta->unmapped_dev_ids)
639 inta->unmapped_dev_ids[i++] = dev_id;
642 inta->unmapped_cnt = count;
651 struct ti_sci_inta_irq_domain *inta;
666 inta = devm_kzalloc(dev, sizeof(*inta), GFP_KERNEL);
667 if (!inta)
670 inta->pdev = pdev;
671 inta->sci = devm_ti_sci_get_by_phandle(dev, "ti,sci");
672 if (IS_ERR(inta->sci))
673 return dev_err_probe(dev, PTR_ERR(inta->sci),
676 ret = of_property_read_u32(dev->of_node, "ti,sci-dev-id", &inta->ti_sci_id);
682 inta->vint = devm_ti_sci_get_resource(inta->sci, dev, inta->ti_sci_id,
684 if (IS_ERR(inta->vint)) {
686 return PTR_ERR(inta->vint);
689 inta->global_event = devm_ti_sci_get_resource(inta->sci, dev, inta->ti_sci_id,
691 if (IS_ERR(inta->global_event)) {
693 return PTR_ERR(inta->global_event);
696 inta->base = devm_platform_ioremap_resource(pdev, 0);
697 if (IS_ERR(inta->base))
698 return PTR_ERR(inta->base);
700 ret = ti_sci_inta_get_unmapped_sources(inta);
705 ti_sci_get_num_resources(inta->vint),
706 &ti_sci_inta_irq_domain_ops, inta);
721 INIT_LIST_HEAD(&inta->vint_list);
722 mutex_init(&inta->vint_mutex);
724 dev_info(dev, "Interrupt Aggregator domain %d created\n", inta->ti_sci_id);
730 { .compatible = "ti,sci-inta", },
738 .name = "ti-sci-inta",