@@ -17,6 +17,7 @@
#include <linux/cpumask.h>
#include <asm/smp_plat.h>
+#include "coresight-priv.h"
/*
* coresight_alloc_conns: Allocate connections record for each output
* port from the device.
@@ -304,7 +305,7 @@ EXPORT_SYMBOL_GPL(coresight_get_cpu);
struct coresight_platform_data *
coresight_get_platform_data(struct device *dev)
{
- struct coresight_platform_data *pdata;
+ struct coresight_platform_data *pdata, *ret = NULL;
struct fwnode_handle *fwnode = dev_fwnode(dev);
if (IS_ERR_OR_NULL(fwnode))
@@ -315,8 +316,13 @@ coresight_get_platform_data(struct device *dev)
return ERR_PTR(-ENOMEM);
if (is_of_node(fwnode))
- return of_get_coresight_platform_data(dev, pdata);
+ ret = of_get_coresight_platform_data(dev, pdata);
- return ERR_PTR(-ENOENT);
+ if (!IS_ERR_OR_NULL(ret))
+ return pdata;
+
+ /* Cleanup the connection information */
+ coresight_release_platform_data(pdata);
+ return ret;
}
EXPORT_SYMBOL_GPL(coresight_get_platform_data);
@@ -200,4 +200,8 @@ static inline void *coresight_get_uci_data(const struct amba_id *id)
return 0;
}
+static inline void
+coresight_release_platform_data(struct coresight_platform_data *pdata)
+{}
+
#endif
@@ -1248,6 +1248,8 @@ struct coresight_device *coresight_register(struct coresight_desc *desc)
err_free_csdev:
kfree(csdev);
err_out:
+ /* Cleanup the connection information */
+ coresight_release_platform_data(desc->pdata);
return ERR_PTR(ret);
}
EXPORT_SYMBOL_GPL(coresight_register);
@@ -1257,6 +1259,7 @@ void coresight_unregister(struct coresight_device *csdev)
etm_perf_del_symlink_sink(csdev);
/* Remove references of that device in the topology */
coresight_remove_conns(csdev);
+ coresight_release_platform_data(csdev->pdata);
device_unregister(&csdev->dev);
}
EXPORT_SYMBOL_GPL(coresight_unregister);
Add a helper to clean up the platform specific data provided by the firmware. This will be later used for dropping the necessary references when we switch to the fwnode handles for tracking connections. Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com> --- drivers/hwtracing/coresight/coresight-platform.c | 12 +++++++++--- drivers/hwtracing/coresight/coresight-priv.h | 4 ++++ drivers/hwtracing/coresight/coresight.c | 3 +++ 3 files changed, 16 insertions(+), 3 deletions(-)