• Home
  • Raw
  • Download

Lines Matching refs:inta

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