Lines Matching refs:csdev

36  * @csdev:	Address of an element.
40 struct coresight_device *csdev;
66 void coresight_set_percpu_sink(int cpu, struct coresight_device *csdev)
68 per_cpu(csdev_sink, cpu) = csdev;
98 static inline u32 coresight_read_claim_tags(struct coresight_device *csdev)
100 return csdev_access_relaxed_read32(&csdev->access, CORESIGHT_CLAIMCLR);
103 static inline bool coresight_is_claimed_self_hosted(struct coresight_device *csdev)
105 return coresight_read_claim_tags(csdev) == CORESIGHT_CLAIM_SELF_HOSTED;
108 static inline bool coresight_is_claimed_any(struct coresight_device *csdev)
110 return coresight_read_claim_tags(csdev) != 0;
113 static inline void coresight_set_claim_tags(struct coresight_device *csdev)
115 csdev_access_relaxed_write32(&csdev->access, CORESIGHT_CLAIM_SELF_HOSTED,
120 static inline void coresight_clear_claim_tags(struct coresight_device *csdev)
122 csdev_access_relaxed_write32(&csdev->access, CORESIGHT_CLAIM_SELF_HOSTED,
137 int coresight_claim_device_unlocked(struct coresight_device *csdev)
139 if (WARN_ON(!csdev))
142 if (coresight_is_claimed_any(csdev))
145 coresight_set_claim_tags(csdev);
146 if (coresight_is_claimed_self_hosted(csdev))
149 coresight_clear_claim_tags(csdev);
154 int coresight_claim_device(struct coresight_device *csdev)
158 if (WARN_ON(!csdev))
161 CS_UNLOCK(csdev->access.base);
162 rc = coresight_claim_device_unlocked(csdev);
163 CS_LOCK(csdev->access.base);
173 void coresight_disclaim_device_unlocked(struct coresight_device *csdev)
176 if (WARN_ON(!csdev))
179 if (coresight_is_claimed_self_hosted(csdev))
180 coresight_clear_claim_tags(csdev);
191 void coresight_disclaim_device(struct coresight_device *csdev)
193 if (WARN_ON(!csdev))
196 CS_UNLOCK(csdev->access.base);
197 coresight_disclaim_device_unlocked(csdev);
198 CS_LOCK(csdev->access.base);
209 void coresight_add_helper(struct coresight_device *csdev,
220 conn.src_dev = csdev;
227 for (i = 0; i < csdev->pdata->nr_outconns; ++i)
228 if (csdev->pdata->out_conns[i]->dest_fwnode == conn.dest_fwnode)
231 new_conn = coresight_add_out_conn(csdev->dev.parent, csdev->pdata,
241 static int coresight_enable_sink(struct coresight_device *csdev,
244 return sink_ops(csdev)->enable(csdev, mode, data);
247 static void coresight_disable_sink(struct coresight_device *csdev)
249 sink_ops(csdev)->disable(csdev);
252 static int coresight_enable_link(struct coresight_device *csdev,
262 inconn = coresight_find_out_connection(parent, csdev);
263 outconn = coresight_find_out_connection(csdev, child);
264 link_subtype = csdev->subtype.link_subtype;
271 return link_ops(csdev)->enable(csdev, inconn, outconn);
274 static void coresight_disable_link(struct coresight_device *csdev,
283 inconn = coresight_find_out_connection(parent, csdev);
284 outconn = coresight_find_out_connection(csdev, child);
286 link_ops(csdev)->disable(csdev, inconn, outconn);
289 static bool coresight_is_helper(struct coresight_device *csdev)
291 return csdev->type == CORESIGHT_DEV_TYPE_HELPER;
294 static int coresight_enable_helper(struct coresight_device *csdev,
297 return helper_ops(csdev)->enable(csdev, mode, data);
300 static void coresight_disable_helper(struct coresight_device *csdev)
302 helper_ops(csdev)->disable(csdev, NULL);
305 static void coresight_disable_helpers(struct coresight_device *csdev)
310 for (i = 0; i < csdev->pdata->nr_outconns; ++i) {
311 helper = csdev->pdata->out_conns[i]->dest_dev;
318 * Helper function to call source_ops(csdev)->disable and also disable the
327 void coresight_disable_source(struct coresight_device *csdev, void *data)
329 source_ops(csdev)->disable(csdev, data);
330 coresight_disable_helpers(csdev);
343 struct coresight_device *csdev, *parent, *child;
349 csdev = nd->csdev;
350 type = csdev->type;
359 type = (csdev == coresight_get_sink(path)) ?
365 coresight_disable_sink(csdev);
376 parent = list_prev_entry(nd, link)->csdev;
377 child = list_next_entry(nd, link)->csdev;
378 coresight_disable_link(csdev, parent, child);
385 coresight_disable_helpers(csdev);
395 static int coresight_enable_helpers(struct coresight_device *csdev,
401 for (i = 0; i < csdev->pdata->nr_outconns; ++i) {
402 helper = csdev->pdata->out_conns[i]->dest_dev;
420 struct coresight_device *csdev, *parent, *child;
423 csdev = nd->csdev;
424 type = csdev->type;
427 ret = coresight_enable_helpers(csdev, mode, sink_data);
437 type = (csdev == coresight_get_sink(path)) ?
443 ret = coresight_enable_sink(csdev, mode, sink_data);
457 parent = list_prev_entry(nd, link)->csdev;
458 child = list_next_entry(nd, link)->csdev;
459 ret = coresight_enable_link(csdev, parent, child);
477 struct coresight_device *csdev;
482 csdev = list_last_entry(path, struct coresight_node, link)->csdev;
483 if (csdev->type != CORESIGHT_DEV_TYPE_SINK &&
484 csdev->type != CORESIGHT_DEV_TYPE_LINKSINK)
487 return csdev;
492 struct coresight_device *csdev = to_coresight_device(dev);
495 if (csdev->type == CORESIGHT_DEV_TYPE_SINK ||
496 csdev->type == CORESIGHT_DEV_TYPE_LINKSINK) {
498 if (!csdev->ea)
504 hash = (unsigned long)csdev->ea->var;
535 * @csdev: The coresight device to get a reference on.
540 static inline bool coresight_get_ref(struct coresight_device *csdev)
542 struct device *dev = csdev->dev.parent;
557 * @csdev: The coresight device to decrement a reference from.
559 static inline void coresight_put_ref(struct coresight_device *csdev)
561 struct device *dev = csdev->dev.parent;
574 static int coresight_grab_device(struct coresight_device *csdev)
578 for (i = 0; i < csdev->pdata->nr_outconns; i++) {
581 child = csdev->pdata->out_conns[i]->dest_dev;
586 if (coresight_get_ref(csdev))
592 child = csdev->pdata->out_conns[i]->dest_dev;
603 static void coresight_drop_device(struct coresight_device *csdev)
607 coresight_put_ref(csdev);
608 for (i = 0; i < csdev->pdata->nr_outconns; i++) {
611 child = csdev->pdata->out_conns[i]->dest_dev;
618 * _coresight_build_path - recursively build a path from a @csdev to a sink.
619 * @csdev: The device to start from.
628 static int _coresight_build_path(struct coresight_device *csdev,
637 if (csdev == sink)
640 if (coresight_is_percpu_source(csdev) && coresight_is_percpu_sink(sink) &&
641 sink == per_cpu(csdev_sink, source_ops(csdev)->cpu_id(csdev))) {
649 for (i = 0; i < csdev->pdata->nr_outconns; i++) {
652 child_dev = csdev->pdata->out_conns[i]->dest_dev;
670 ret = coresight_grab_device(csdev);
678 node->csdev = csdev;
717 struct coresight_device *csdev;
721 csdev = nd->csdev;
723 coresight_drop_device(csdev);
732 static inline bool coresight_is_def_sink_type(struct coresight_device *csdev)
735 if (((csdev->type == CORESIGHT_DEV_TYPE_SINK) ||
736 (csdev->type == CORESIGHT_DEV_TYPE_LINKSINK)) &&
737 (csdev->subtype.sink_subtype >= CORESIGHT_DEV_SUBTYPE_SINK_BUFFER))
788 * @csdev: source / current device to check.
801 coresight_find_sink(struct coresight_device *csdev, int *depth)
806 if (coresight_is_def_sink_type(csdev)) {
808 found_sink = csdev;
809 if (csdev->type == CORESIGHT_DEV_TYPE_SINK)
818 for (i = 0; i < csdev->pdata->nr_outconns; i++) {
822 child_dev = csdev->pdata->out_conns[i]->dest_dev;
844 * @csdev: starting source to find a connected sink.
857 coresight_find_default_sink(struct coresight_device *csdev)
862 if (!csdev->def_sink) {
863 if (coresight_is_percpu_source(csdev))
864 csdev->def_sink = per_cpu(csdev_sink, source_ops(csdev)->cpu_id(csdev));
865 if (!csdev->def_sink)
866 csdev->def_sink = coresight_find_sink(csdev, &depth);
868 return csdev->def_sink;
889 * @csdev: coresight sink - remove references to this from all sources.
891 static void coresight_clear_default_sink(struct coresight_device *csdev)
893 if ((csdev->type == CORESIGHT_DEV_TYPE_SINK) ||
894 (csdev->type == CORESIGHT_DEV_TYPE_LINKSINK)) {
895 bus_for_each_dev(&coresight_bustype, NULL, csdev,
902 struct coresight_device *csdev = to_coresight_device(dev);
904 fwnode_handle_put(csdev->dev.fwnode);
905 kfree(csdev);
971 static int coresight_fixup_orphan_conns(struct coresight_device *csdev)
974 csdev, coresight_orphan_match);
978 static void coresight_remove_conns(struct coresight_device *csdev)
987 for (i = 0; i < csdev->pdata->nr_outconns; i++) {
988 conn = csdev->pdata->out_conns[i];
1004 for (i = 0; i < csdev->pdata->nr_inconns; ++i) {
1005 conn = csdev->pdata->in_conns[i];
1058 u32 coresight_relaxed_read32(struct coresight_device *csdev, u32 offset)
1060 return csdev_access_relaxed_read32(&csdev->access, offset);
1063 u32 coresight_read32(struct coresight_device *csdev, u32 offset)
1065 return csdev_access_read32(&csdev->access, offset);
1068 void coresight_relaxed_write32(struct coresight_device *csdev,
1071 csdev_access_relaxed_write32(&csdev->access, val, offset);
1074 void coresight_write32(struct coresight_device *csdev, u32 val, u32 offset)
1076 csdev_access_write32(&csdev->access, val, offset);
1079 u64 coresight_relaxed_read64(struct coresight_device *csdev, u32 offset)
1081 return csdev_access_relaxed_read64(&csdev->access, offset);
1084 u64 coresight_read64(struct coresight_device *csdev, u32 offset)
1086 return csdev_access_read64(&csdev->access, offset);
1089 void coresight_relaxed_write64(struct coresight_device *csdev,
1092 csdev_access_relaxed_write64(&csdev->access, val, offset);
1095 void coresight_write64(struct coresight_device *csdev, u64 val, u32 offset)
1097 csdev_access_write64(&csdev->access, val, offset);
1104 void coresight_release_platform_data(struct coresight_device *csdev,
1113 if (csdev && conns[i]->dest_dev)
1114 coresight_remove_links(csdev, conns[i]);
1126 if (csdev)
1127 coresight_remove_conns_sysfs_group(csdev);
1133 struct coresight_device *csdev;
1136 csdev = kzalloc(sizeof(*csdev), GFP_KERNEL);
1137 if (!csdev) {
1142 csdev->pdata = desc->pdata;
1144 csdev->type = desc->type;
1145 csdev->subtype = desc->subtype;
1146 csdev->ops = desc->ops;
1147 csdev->access = desc->access;
1148 csdev->orphan = true;
1150 csdev->dev.type = &coresight_dev_type[desc->type];
1151 csdev->dev.groups = desc->groups;
1152 csdev->dev.parent = desc->dev;
1153 csdev->dev.release = coresight_device_release;
1154 csdev->dev.bus = &coresight_bustype;
1159 csdev->dev.fwnode = fwnode_handle_get(dev_fwnode(desc->dev));
1160 dev_set_name(&csdev->dev, "%s", desc->name);
1169 ret = device_register(&csdev->dev);
1171 put_device(&csdev->dev);
1179 if (csdev->type == CORESIGHT_DEV_TYPE_SINK ||
1180 csdev->type == CORESIGHT_DEV_TYPE_LINKSINK) {
1181 ret = etm_perf_add_symlink_sink(csdev);
1184 device_unregister(&csdev->dev);
1197 ret = coresight_create_conns_sysfs_group(csdev);
1199 ret = coresight_fixup_orphan_conns(csdev);
1206 cti_assoc_ops->add(csdev);
1207 return csdev;
1212 coresight_unregister(csdev);
1223 void coresight_unregister(struct coresight_device *csdev)
1225 etm_perf_del_symlink_sink(csdev);
1228 cti_assoc_ops->remove(csdev);
1229 coresight_remove_conns(csdev);
1230 coresight_clear_default_sink(csdev);
1231 coresight_release_platform_data(csdev, csdev->dev.parent, csdev->pdata);
1232 device_unregister(&csdev->dev);