Lines Matching refs:csdev
33 struct coresight_device *csdev; member
61 struct coresight_device *csdev, *i_csdev; in coresight_id_match() local
63 csdev = data; in coresight_id_match()
70 if (i_csdev == csdev || !i_csdev->enable || in coresight_id_match()
75 trace_id = source_ops(csdev)->trace_id(csdev); in coresight_id_match()
85 static int coresight_source_is_unique(struct coresight_device *csdev) in coresight_source_is_unique() argument
87 int trace_id = source_ops(csdev)->trace_id(csdev); in coresight_source_is_unique()
94 csdev, coresight_id_match); in coresight_source_is_unique()
97 static int coresight_find_link_inport(struct coresight_device *csdev, in coresight_find_link_inport() argument
105 if (conn->child_dev == csdev) in coresight_find_link_inport()
109 dev_err(&csdev->dev, "couldn't find inport, parent: %s, child: %s\n", in coresight_find_link_inport()
110 dev_name(&parent->dev), dev_name(&csdev->dev)); in coresight_find_link_inport()
115 static int coresight_find_link_outport(struct coresight_device *csdev, in coresight_find_link_outport() argument
121 for (i = 0; i < csdev->pdata->nr_outport; i++) { in coresight_find_link_outport()
122 conn = &csdev->pdata->conns[i]; in coresight_find_link_outport()
127 dev_err(&csdev->dev, "couldn't find outport, parent: %s, child: %s\n", in coresight_find_link_outport()
128 dev_name(&csdev->dev), dev_name(&child->dev)); in coresight_find_link_outport()
219 static int coresight_enable_sink(struct coresight_device *csdev, in coresight_enable_sink() argument
228 if (!sink_ops(csdev)->enable) in coresight_enable_sink()
231 ret = sink_ops(csdev)->enable(csdev, mode, data); in coresight_enable_sink()
234 csdev->enable = true; in coresight_enable_sink()
239 static void coresight_disable_sink(struct coresight_device *csdev) in coresight_disable_sink() argument
243 if (!sink_ops(csdev)->disable) in coresight_disable_sink()
246 ret = sink_ops(csdev)->disable(csdev); in coresight_disable_sink()
249 csdev->enable = false; in coresight_disable_sink()
252 static int coresight_enable_link(struct coresight_device *csdev, in coresight_enable_link() argument
263 inport = coresight_find_link_inport(csdev, parent); in coresight_enable_link()
264 outport = coresight_find_link_outport(csdev, child); in coresight_enable_link()
265 link_subtype = csdev->subtype.link_subtype; in coresight_enable_link()
277 if (atomic_inc_return(&csdev->refcnt[refport]) == 1) { in coresight_enable_link()
278 if (link_ops(csdev)->enable) { in coresight_enable_link()
279 ret = link_ops(csdev)->enable(csdev, inport, outport); in coresight_enable_link()
281 atomic_dec(&csdev->refcnt[refport]); in coresight_enable_link()
287 csdev->enable = true; in coresight_enable_link()
292 static void coresight_disable_link(struct coresight_device *csdev, in coresight_disable_link() argument
303 inport = coresight_find_link_inport(csdev, parent); in coresight_disable_link()
304 outport = coresight_find_link_outport(csdev, child); in coresight_disable_link()
305 link_subtype = csdev->subtype.link_subtype; in coresight_disable_link()
309 nr_conns = csdev->pdata->nr_inport; in coresight_disable_link()
312 nr_conns = csdev->pdata->nr_outport; in coresight_disable_link()
318 if (atomic_dec_return(&csdev->refcnt[refport]) == 0) { in coresight_disable_link()
319 if (link_ops(csdev)->disable) in coresight_disable_link()
320 link_ops(csdev)->disable(csdev, inport, outport); in coresight_disable_link()
324 if (atomic_read(&csdev->refcnt[i]) != 0) in coresight_disable_link()
327 csdev->enable = false; in coresight_disable_link()
330 static int coresight_enable_source(struct coresight_device *csdev, u32 mode) in coresight_enable_source() argument
334 if (!coresight_source_is_unique(csdev)) { in coresight_enable_source()
335 dev_warn(&csdev->dev, "traceID %d not unique\n", in coresight_enable_source()
336 source_ops(csdev)->trace_id(csdev)); in coresight_enable_source()
340 if (!csdev->enable) { in coresight_enable_source()
341 if (source_ops(csdev)->enable) { in coresight_enable_source()
342 ret = source_ops(csdev)->enable(csdev, NULL, mode); in coresight_enable_source()
346 csdev->enable = true; in coresight_enable_source()
349 atomic_inc(csdev->refcnt); in coresight_enable_source()
362 static bool coresight_disable_source(struct coresight_device *csdev) in coresight_disable_source() argument
364 if (atomic_dec_return(csdev->refcnt) == 0) { in coresight_disable_source()
365 if (source_ops(csdev)->disable) in coresight_disable_source()
366 source_ops(csdev)->disable(csdev, NULL); in coresight_disable_source()
367 csdev->enable = false; in coresight_disable_source()
369 return !csdev->enable; in coresight_disable_source()
381 struct coresight_device *csdev, *parent, *child; in coresight_disable_path_from() local
387 csdev = nd->csdev; in coresight_disable_path_from()
388 type = csdev->type; in coresight_disable_path_from()
397 type = (csdev == coresight_get_sink(path)) ? in coresight_disable_path_from()
403 coresight_disable_sink(csdev); in coresight_disable_path_from()
414 parent = list_prev_entry(nd, link)->csdev; in coresight_disable_path_from()
415 child = list_next_entry(nd, link)->csdev; in coresight_disable_path_from()
416 coresight_disable_link(csdev, parent, child); in coresight_disable_path_from()
435 struct coresight_device *csdev, *parent, *child; in coresight_enable_path() local
438 csdev = nd->csdev; in coresight_enable_path()
439 type = csdev->type; in coresight_enable_path()
448 type = (csdev == coresight_get_sink(path)) ? in coresight_enable_path()
454 ret = coresight_enable_sink(csdev, mode, sink_data); in coresight_enable_path()
468 parent = list_prev_entry(nd, link)->csdev; in coresight_enable_path()
469 child = list_next_entry(nd, link)->csdev; in coresight_enable_path()
470 ret = coresight_enable_link(csdev, parent, child); in coresight_enable_path()
488 struct coresight_device *csdev; in coresight_get_sink() local
493 csdev = list_last_entry(path, struct coresight_node, link)->csdev; in coresight_get_sink()
494 if (csdev->type != CORESIGHT_DEV_TYPE_SINK && in coresight_get_sink()
495 csdev->type != CORESIGHT_DEV_TYPE_LINKSINK) in coresight_get_sink()
498 return csdev; in coresight_get_sink()
504 struct coresight_device *csdev = to_coresight_device(dev); in coresight_enabled_sink() local
506 if ((csdev->type == CORESIGHT_DEV_TYPE_SINK || in coresight_enabled_sink()
507 csdev->type == CORESIGHT_DEV_TYPE_LINKSINK) && in coresight_enabled_sink()
508 csdev->activated) { in coresight_enabled_sink()
517 csdev->activated = false; in coresight_enabled_sink()
549 struct coresight_device *csdev = to_coresight_device(dev); in coresight_sink_by_id() local
552 if (csdev->type == CORESIGHT_DEV_TYPE_SINK || in coresight_sink_by_id()
553 csdev->type == CORESIGHT_DEV_TYPE_LINKSINK) { in coresight_sink_by_id()
555 if (!csdev->ea) in coresight_sink_by_id()
561 hash = (unsigned long)csdev->ea->var; in coresight_sink_by_id()
594 static void coresight_grab_device(struct coresight_device *csdev) in coresight_grab_device() argument
598 for (i = 0; i < csdev->pdata->nr_outport; i++) { in coresight_grab_device()
601 child = csdev->pdata->conns[i].child_dev; in coresight_grab_device()
605 pm_runtime_get_sync(csdev->dev.parent); in coresight_grab_device()
612 static void coresight_drop_device(struct coresight_device *csdev) in coresight_drop_device() argument
616 pm_runtime_put(csdev->dev.parent); in coresight_drop_device()
617 for (i = 0; i < csdev->pdata->nr_outport; i++) { in coresight_drop_device()
620 child = csdev->pdata->conns[i].child_dev; in coresight_drop_device()
637 static int _coresight_build_path(struct coresight_device *csdev, in _coresight_build_path() argument
646 if (csdev == sink) in _coresight_build_path()
650 for (i = 0; i < csdev->pdata->nr_outport; i++) { in _coresight_build_path()
653 child_dev = csdev->pdata->conns[i].child_dev; in _coresight_build_path()
675 coresight_grab_device(csdev); in _coresight_build_path()
676 node->csdev = csdev; in _coresight_build_path()
715 struct coresight_device *csdev; in coresight_release_path() local
719 csdev = nd->csdev; in coresight_release_path()
721 coresight_drop_device(csdev); in coresight_release_path()
736 static int coresight_validate_source(struct coresight_device *csdev, in coresight_validate_source() argument
741 type = csdev->type; in coresight_validate_source()
742 subtype = csdev->subtype.source_subtype; in coresight_validate_source()
745 dev_err(&csdev->dev, "wrong device type in %s\n", function); in coresight_validate_source()
751 dev_err(&csdev->dev, "wrong device subtype in %s\n", function); in coresight_validate_source()
758 int coresight_enable(struct coresight_device *csdev) in coresight_enable() argument
765 subtype = csdev->subtype.source_subtype; in coresight_enable()
769 ret = coresight_validate_source(csdev, __func__); in coresight_enable()
773 if (csdev->enable) { in coresight_enable()
780 atomic_inc(csdev->refcnt); in coresight_enable()
794 path = coresight_build_path(csdev, sink); in coresight_enable()
805 ret = coresight_enable_source(csdev, CS_MODE_SYSFS); in coresight_enable()
818 cpu = source_ops(csdev)->cpu_id(csdev); in coresight_enable()
842 void coresight_disable(struct coresight_device *csdev) in coresight_disable() argument
849 ret = coresight_validate_source(csdev, __func__); in coresight_disable()
853 if (!csdev->enable || !coresight_disable_source(csdev)) in coresight_disable()
856 switch (csdev->subtype.source_subtype) { in coresight_disable()
858 cpu = source_ops(csdev)->cpu_id(csdev); in coresight_disable()
882 struct coresight_device *csdev = to_coresight_device(dev); in enable_sink_show() local
884 return scnprintf(buf, PAGE_SIZE, "%u\n", csdev->activated); in enable_sink_show()
893 struct coresight_device *csdev = to_coresight_device(dev); in enable_sink_store() local
900 csdev->activated = true; in enable_sink_store()
902 csdev->activated = false; in enable_sink_store()
912 struct coresight_device *csdev = to_coresight_device(dev); in enable_source_show() local
914 return scnprintf(buf, PAGE_SIZE, "%u\n", csdev->enable); in enable_source_show()
923 struct coresight_device *csdev = to_coresight_device(dev); in enable_source_store() local
930 ret = coresight_enable(csdev); in enable_source_store()
934 coresight_disable(csdev); in enable_source_store()
979 struct coresight_device *csdev = to_coresight_device(dev); in coresight_device_release() local
981 fwnode_handle_put(csdev->dev.fwnode); in coresight_device_release()
982 kfree(csdev->refcnt); in coresight_device_release()
983 kfree(csdev); in coresight_device_release()
990 struct coresight_device *csdev, *i_csdev; in coresight_orphan_match() local
993 csdev = data; in coresight_orphan_match()
997 if (csdev == i_csdev) in coresight_orphan_match()
1013 if (conn->child_fwnode == csdev->dev.fwnode) in coresight_orphan_match()
1014 conn->child_dev = csdev; in coresight_orphan_match()
1030 static void coresight_fixup_orphan_conns(struct coresight_device *csdev) in coresight_fixup_orphan_conns() argument
1037 csdev, coresight_orphan_match); in coresight_fixup_orphan_conns()
1041 static void coresight_fixup_device_conns(struct coresight_device *csdev) in coresight_fixup_device_conns() argument
1045 for (i = 0; i < csdev->pdata->nr_outport; i++) { in coresight_fixup_device_conns()
1046 struct coresight_connection *conn = &csdev->pdata->conns[i]; in coresight_fixup_device_conns()
1055 csdev->orphan = true; in coresight_fixup_device_conns()
1064 struct coresight_device *csdev, *iterator; in coresight_remove_match() local
1067 csdev = data; in coresight_remove_match()
1071 if (csdev == iterator) in coresight_remove_match()
1084 if (csdev->dev.fwnode == conn->child_fwnode) { in coresight_remove_match()
1109 static void coresight_remove_conns(struct coresight_device *csdev) in coresight_remove_conns() argument
1117 if (csdev->pdata->nr_inport) in coresight_remove_conns()
1119 csdev, coresight_remove_match); in coresight_remove_conns()
1194 struct coresight_device *csdev; in coresight_register() local
1196 csdev = kzalloc(sizeof(*csdev), GFP_KERNEL); in coresight_register()
1197 if (!csdev) { in coresight_register()
1218 csdev->refcnt = refcnts; in coresight_register()
1220 csdev->pdata = desc->pdata; in coresight_register()
1222 csdev->type = desc->type; in coresight_register()
1223 csdev->subtype = desc->subtype; in coresight_register()
1224 csdev->ops = desc->ops; in coresight_register()
1225 csdev->orphan = false; in coresight_register()
1227 csdev->dev.type = &coresight_dev_type[desc->type]; in coresight_register()
1228 csdev->dev.groups = desc->groups; in coresight_register()
1229 csdev->dev.parent = desc->dev; in coresight_register()
1230 csdev->dev.release = coresight_device_release; in coresight_register()
1231 csdev->dev.bus = &coresight_bustype; in coresight_register()
1236 csdev->dev.fwnode = fwnode_handle_get(dev_fwnode(desc->dev)); in coresight_register()
1237 dev_set_name(&csdev->dev, "%s", desc->name); in coresight_register()
1239 ret = device_register(&csdev->dev); in coresight_register()
1241 put_device(&csdev->dev); in coresight_register()
1249 if (csdev->type == CORESIGHT_DEV_TYPE_SINK || in coresight_register()
1250 csdev->type == CORESIGHT_DEV_TYPE_LINKSINK) { in coresight_register()
1251 ret = etm_perf_add_symlink_sink(csdev); in coresight_register()
1254 device_unregister(&csdev->dev); in coresight_register()
1267 coresight_fixup_device_conns(csdev); in coresight_register()
1268 coresight_fixup_orphan_conns(csdev); in coresight_register()
1272 return csdev; in coresight_register()
1275 kfree(csdev); in coresight_register()
1283 void coresight_unregister(struct coresight_device *csdev) in coresight_unregister() argument
1285 etm_perf_del_symlink_sink(csdev); in coresight_unregister()
1287 coresight_remove_conns(csdev); in coresight_unregister()
1288 coresight_release_platform_data(csdev->pdata); in coresight_unregister()
1289 device_unregister(&csdev->dev); in coresight_unregister()