Lines Matching refs:csdev
35 struct coresight_device *csdev, *i_csdev; in coresight_id_match() local
37 csdev = data; in coresight_id_match()
44 if (i_csdev == csdev || !i_csdev->enable || in coresight_id_match()
49 trace_id = source_ops(csdev)->trace_id(csdev); in coresight_id_match()
59 static int coresight_source_is_unique(struct coresight_device *csdev) in coresight_source_is_unique() argument
61 int trace_id = source_ops(csdev)->trace_id(csdev); in coresight_source_is_unique()
68 csdev, coresight_id_match); in coresight_source_is_unique()
71 static int coresight_find_link_inport(struct coresight_device *csdev) in coresight_find_link_inport() argument
77 parent = container_of(csdev->path_link.next, in coresight_find_link_inport()
82 if (conn->child_dev == csdev) in coresight_find_link_inport()
86 dev_err(&csdev->dev, "couldn't find inport, parent: %s, child: %s\n", in coresight_find_link_inport()
87 dev_name(&parent->dev), dev_name(&csdev->dev)); in coresight_find_link_inport()
92 static int coresight_find_link_outport(struct coresight_device *csdev) in coresight_find_link_outport() argument
98 child = container_of(csdev->path_link.prev, in coresight_find_link_outport()
101 for (i = 0; i < csdev->nr_outport; i++) { in coresight_find_link_outport()
102 conn = &csdev->conns[i]; in coresight_find_link_outport()
107 dev_err(&csdev->dev, "couldn't find outport, parent: %s, child: %s\n", in coresight_find_link_outport()
108 dev_name(&csdev->dev), dev_name(&child->dev)); in coresight_find_link_outport()
113 static int coresight_enable_sink(struct coresight_device *csdev) in coresight_enable_sink() argument
117 if (!csdev->enable) { in coresight_enable_sink()
118 if (sink_ops(csdev)->enable) { in coresight_enable_sink()
119 ret = sink_ops(csdev)->enable(csdev); in coresight_enable_sink()
123 csdev->enable = true; in coresight_enable_sink()
126 atomic_inc(csdev->refcnt); in coresight_enable_sink()
131 static void coresight_disable_sink(struct coresight_device *csdev) in coresight_disable_sink() argument
133 if (atomic_dec_return(csdev->refcnt) == 0) { in coresight_disable_sink()
134 if (sink_ops(csdev)->disable) { in coresight_disable_sink()
135 sink_ops(csdev)->disable(csdev); in coresight_disable_sink()
136 csdev->enable = false; in coresight_disable_sink()
141 static int coresight_enable_link(struct coresight_device *csdev) in coresight_enable_link() argument
147 inport = coresight_find_link_inport(csdev); in coresight_enable_link()
148 outport = coresight_find_link_outport(csdev); in coresight_enable_link()
149 link_subtype = csdev->subtype.link_subtype; in coresight_enable_link()
158 if (atomic_inc_return(&csdev->refcnt[refport]) == 1) { in coresight_enable_link()
159 if (link_ops(csdev)->enable) { in coresight_enable_link()
160 ret = link_ops(csdev)->enable(csdev, inport, outport); in coresight_enable_link()
166 csdev->enable = true; in coresight_enable_link()
171 static void coresight_disable_link(struct coresight_device *csdev) in coresight_disable_link() argument
177 inport = coresight_find_link_inport(csdev); in coresight_disable_link()
178 outport = coresight_find_link_outport(csdev); in coresight_disable_link()
179 link_subtype = csdev->subtype.link_subtype; in coresight_disable_link()
183 nr_conns = csdev->nr_inport; in coresight_disable_link()
186 nr_conns = csdev->nr_outport; in coresight_disable_link()
192 if (atomic_dec_return(&csdev->refcnt[refport]) == 0) { in coresight_disable_link()
193 if (link_ops(csdev)->disable) in coresight_disable_link()
194 link_ops(csdev)->disable(csdev, inport, outport); in coresight_disable_link()
198 if (atomic_read(&csdev->refcnt[i]) != 0) in coresight_disable_link()
201 csdev->enable = false; in coresight_disable_link()
204 static int coresight_enable_source(struct coresight_device *csdev) in coresight_enable_source() argument
208 if (!coresight_source_is_unique(csdev)) { in coresight_enable_source()
209 dev_warn(&csdev->dev, "traceID %d not unique\n", in coresight_enable_source()
210 source_ops(csdev)->trace_id(csdev)); in coresight_enable_source()
214 if (!csdev->enable) { in coresight_enable_source()
215 if (source_ops(csdev)->enable) { in coresight_enable_source()
216 ret = source_ops(csdev)->enable(csdev); in coresight_enable_source()
220 csdev->enable = true; in coresight_enable_source()
223 atomic_inc(csdev->refcnt); in coresight_enable_source()
228 static void coresight_disable_source(struct coresight_device *csdev) in coresight_disable_source() argument
230 if (atomic_dec_return(csdev->refcnt) == 0) { in coresight_disable_source()
231 if (source_ops(csdev)->disable) { in coresight_disable_source()
232 source_ops(csdev)->disable(csdev); in coresight_disable_source()
233 csdev->enable = false; in coresight_disable_source()
299 static int coresight_build_paths(struct coresight_device *csdev, in coresight_build_paths() argument
306 list_add(&csdev->path_link, path); in coresight_build_paths()
308 if ((csdev->type == CORESIGHT_DEV_TYPE_SINK || in coresight_build_paths()
309 csdev->type == CORESIGHT_DEV_TYPE_LINKSINK) && in coresight_build_paths()
310 csdev->activated) { in coresight_build_paths()
316 for (i = 0; i < csdev->nr_outport; i++) { in coresight_build_paths()
317 conn = &csdev->conns[i]; in coresight_build_paths()
324 if (list_first_entry(path, struct coresight_device, path_link) != csdev) in coresight_build_paths()
325 dev_err(&csdev->dev, "wrong device in %s\n", __func__); in coresight_build_paths()
327 list_del(&csdev->path_link); in coresight_build_paths()
332 int coresight_enable(struct coresight_device *csdev) in coresight_enable() argument
338 if (csdev->type != CORESIGHT_DEV_TYPE_SOURCE) { in coresight_enable()
340 dev_err(&csdev->dev, "wrong device type in %s\n", __func__); in coresight_enable()
343 if (csdev->enable) in coresight_enable()
346 if (coresight_build_paths(csdev, &path, true)) { in coresight_enable()
347 dev_err(&csdev->dev, "building path(s) failed\n"); in coresight_enable()
351 if (coresight_enable_source(csdev)) in coresight_enable()
352 dev_err(&csdev->dev, "source enable failed\n"); in coresight_enable()
359 void coresight_disable(struct coresight_device *csdev) in coresight_disable() argument
364 if (csdev->type != CORESIGHT_DEV_TYPE_SOURCE) { in coresight_disable()
365 dev_err(&csdev->dev, "wrong device type in %s\n", __func__); in coresight_disable()
368 if (!csdev->enable) in coresight_disable()
371 coresight_disable_source(csdev); in coresight_disable()
372 if (coresight_build_paths(csdev, &path, false)) in coresight_disable()
373 dev_err(&csdev->dev, "releasing path(s) failed\n"); in coresight_disable()
383 struct coresight_device *csdev = to_coresight_device(dev); in enable_sink_show() local
385 return scnprintf(buf, PAGE_SIZE, "%u\n", (unsigned)csdev->activated); in enable_sink_show()
394 struct coresight_device *csdev = to_coresight_device(dev); in enable_sink_store() local
401 csdev->activated = true; in enable_sink_store()
403 csdev->activated = false; in enable_sink_store()
413 struct coresight_device *csdev = to_coresight_device(dev); in enable_source_show() local
415 return scnprintf(buf, PAGE_SIZE, "%u\n", (unsigned)csdev->enable); in enable_source_show()
424 struct coresight_device *csdev = to_coresight_device(dev); in enable_source_store() local
431 ret = coresight_enable(csdev); in enable_source_store()
435 coresight_disable(csdev); in enable_source_store()
477 struct coresight_device *csdev = to_coresight_device(dev); in coresight_device_release() local
479 kfree(csdev); in coresight_device_release()
486 struct coresight_device *csdev, *i_csdev; in coresight_orphan_match() local
489 csdev = data; in coresight_orphan_match()
493 if (csdev == i_csdev) in coresight_orphan_match()
509 if (!strcmp(dev_name(&csdev->dev), conn->child_name)) { in coresight_orphan_match()
510 conn->child_dev = csdev; in coresight_orphan_match()
527 static void coresight_fixup_orphan_conns(struct coresight_device *csdev) in coresight_fixup_orphan_conns() argument
534 csdev, coresight_orphan_match); in coresight_fixup_orphan_conns()
552 static void coresight_fixup_device_conns(struct coresight_device *csdev) in coresight_fixup_device_conns() argument
558 for (i = 0; i < csdev->nr_outport; i++) { in coresight_fixup_device_conns()
559 conn = &csdev->conns[i]; in coresight_fixup_device_conns()
567 csdev->orphan = true; in coresight_fixup_device_conns()
630 struct coresight_device *csdev; in coresight_register() local
633 csdev = kzalloc(sizeof(*csdev), GFP_KERNEL); in coresight_register()
634 if (!csdev) { in coresight_register()
655 csdev->refcnt = refcnts; in coresight_register()
657 csdev->nr_inport = desc->pdata->nr_inport; in coresight_register()
658 csdev->nr_outport = desc->pdata->nr_outport; in coresight_register()
659 conns = kcalloc(csdev->nr_outport, sizeof(*conns), GFP_KERNEL); in coresight_register()
665 for (i = 0; i < csdev->nr_outport; i++) { in coresight_register()
671 csdev->conns = conns; in coresight_register()
673 csdev->type = desc->type; in coresight_register()
674 csdev->subtype = desc->subtype; in coresight_register()
675 csdev->ops = desc->ops; in coresight_register()
676 csdev->orphan = false; in coresight_register()
678 csdev->dev.type = &coresight_dev_type[desc->type]; in coresight_register()
679 csdev->dev.groups = desc->groups; in coresight_register()
680 csdev->dev.parent = desc->dev; in coresight_register()
681 csdev->dev.release = coresight_device_release; in coresight_register()
682 csdev->dev.bus = &coresight_bustype; in coresight_register()
683 dev_set_name(&csdev->dev, "%s", desc->pdata->name); in coresight_register()
685 ret = device_register(&csdev->dev); in coresight_register()
691 coresight_fixup_device_conns(csdev); in coresight_register()
692 coresight_fixup_orphan_conns(csdev); in coresight_register()
696 return csdev; in coresight_register()
703 kfree(csdev); in coresight_register()
709 void coresight_unregister(struct coresight_device *csdev) in coresight_unregister() argument
713 kfree(csdev->conns); in coresight_unregister()
714 device_unregister(&csdev->dev); in coresight_unregister()