On Tue, 4 Apr 2023 at 16:52, James Clark james.clark@arm.com wrote:
There is some duplication between coresight_fixup_device_conns() and coresight_fixup_orphan_conns(). They both do the same thing except for the fact that coresight_fixup_orphan_conns() can't handle iterating over itself.
By making it able to handle fixing up it's own connections the other function can be removed.
Signed-off-by: James Clark james.clark@arm.com
drivers/hwtracing/coresight/coresight-core.c | 84 ++++++++------------ 1 file changed, 32 insertions(+), 52 deletions(-)
diff --git a/drivers/hwtracing/coresight/coresight-core.c b/drivers/hwtracing/coresight/coresight-core.c index 0b738960973b..8d377a59e0be 100644 --- a/drivers/hwtracing/coresight/coresight-core.c +++ b/drivers/hwtracing/coresight/coresight-core.c @@ -1316,42 +1316,46 @@ static int coresight_orphan_match(struct device *dev, void *data) { int i, ret = 0; bool still_orphan = false;
struct coresight_device *csdev, *i_csdev;
struct coresight_device *dst_csdev = data;
struct coresight_device *src_csdev = to_coresight_device(dev); struct coresight_connection *conn;
csdev = data;
i_csdev = to_coresight_device(dev);
/* No need to check oneself */
if (csdev == i_csdev)
return 0;
bool fixup_self = (src_csdev == dst_csdev); /* Move on to another component if no connection is orphan */
if (!i_csdev->orphan)
if (!src_csdev->orphan) return 0; /*
* Circle throuch all the connection of that component. If we find
* an orphan connection whose name matches @csdev, link it.
* Circle through all the connections of that component. If we find
* an orphan connection whose name matches @dst_csdev, link it. */
for (i = 0; i < i_csdev->pdata->nr_outconns; i++) {
conn = i_csdev->pdata->out_conns[i];
/* We have found at least one orphan connection */
if (conn->dest_dev == NULL) {
/* Does it match this newly added device? */
if (conn->dest_fwnode == csdev->dev.fwnode) {
ret = coresight_make_links(i_csdev,
conn, csdev);
if (ret)
return ret;
} else {
/* This component still has an orphan */
still_orphan = true;
}
for (i = 0; i < src_csdev->pdata->nr_outconns; i++) {
conn = src_csdev->pdata->out_conns[i];
/* Skip the port if it's already connected. */
if (conn->dest_dev)
continue;
/*
* If we are at the "new" device, which triggered this search,
* we must find the remote device from the fwnode in the
* connection.
*/
if (fixup_self)
dst_csdev = coresight_find_csdev_by_fwnode(
conn->dest_fwnode);
/* Does it match this newly added device? */
if (dst_csdev && conn->dest_fwnode == dst_csdev->dev.fwnode) {
ret = coresight_make_links(src_csdev, conn, dst_csdev);
if (ret)
return ret;
} else {
/* This component still has an orphan */
still_orphan = true; } }
i_csdev->orphan = still_orphan;
src_csdev->orphan = still_orphan; /* * Returning '0' in case we didn't encounter any error,
@@ -1366,28 +1370,6 @@ static int coresight_fixup_orphan_conns(struct coresight_device *csdev) csdev, coresight_orphan_match); }
-static int coresight_fixup_device_conns(struct coresight_device *csdev) -{
int i, ret = 0;
for (i = 0; i < csdev->pdata->nr_outconns; i++) {
struct coresight_connection *conn = csdev->pdata->out_conns[i];
conn->dest_dev =
coresight_find_csdev_by_fwnode(conn->dest_fwnode);
if (conn->dest_dev && conn->dest_dev->has_conns_grp) {
ret = coresight_make_links(csdev, conn, conn->dest_dev);
if (ret)
break;
} else {
csdev->orphan = true;
}
}
return ret;
-}
static int coresight_remove_match(struct device *dev, void *data) { int i; @@ -1595,7 +1577,7 @@ struct coresight_device *coresight_register(struct coresight_desc *desc) csdev->subtype = desc->subtype; csdev->ops = desc->ops; csdev->access = desc->access;
csdev->orphan = false;
csdev->orphan = true; csdev->dev.type = &coresight_dev_type[desc->type]; csdev->dev.groups = desc->groups;
@@ -1645,8 +1627,6 @@ struct coresight_device *coresight_register(struct coresight_desc *desc) registered = true;
ret = coresight_create_conns_sysfs_group(csdev);
if (!ret)
ret = coresight_fixup_device_conns(csdev); if (!ret) ret = coresight_fixup_orphan_conns(csdev);
-- 2.34.1
Reviewed-by: Mike Leach mike.leach@linaro.org