Commit 52210c87 authored by Mathieu Poirier's avatar Mathieu Poirier Committed by Greg Kroah-Hartman

coresight: implementing 'cpu_id()' API

Other than plainly parsing the device tree there is no way to
know which CPU a tracer is affined to.  As such adding an
interface to lookup the CPU field enclosed in the etm_drvdata
structure that was initialised at boot time.
Signed-off-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent b15f0fb6
...@@ -315,6 +315,13 @@ static void etm_enable_hw(void *info) ...@@ -315,6 +315,13 @@ static void etm_enable_hw(void *info)
dev_dbg(drvdata->dev, "cpu: %d enable smp call done\n", drvdata->cpu); dev_dbg(drvdata->dev, "cpu: %d enable smp call done\n", drvdata->cpu);
} }
static int etm_cpu_id(struct coresight_device *csdev)
{
struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
return drvdata->cpu;
}
static int etm_trace_id(struct coresight_device *csdev) static int etm_trace_id(struct coresight_device *csdev)
{ {
struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
...@@ -421,6 +428,7 @@ static void etm_disable(struct coresight_device *csdev) ...@@ -421,6 +428,7 @@ static void etm_disable(struct coresight_device *csdev)
} }
static const struct coresight_ops_source etm_source_ops = { static const struct coresight_ops_source etm_source_ops = {
.cpu_id = etm_cpu_id,
.trace_id = etm_trace_id, .trace_id = etm_trace_id,
.enable = etm_enable, .enable = etm_enable,
.disable = etm_disable, .disable = etm_disable,
......
...@@ -63,6 +63,13 @@ static bool etm4_arch_supported(u8 arch) ...@@ -63,6 +63,13 @@ static bool etm4_arch_supported(u8 arch)
return true; return true;
} }
static int etm4_cpu_id(struct coresight_device *csdev)
{
struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
return drvdata->cpu;
}
static int etm4_trace_id(struct coresight_device *csdev) static int etm4_trace_id(struct coresight_device *csdev)
{ {
struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
...@@ -262,6 +269,7 @@ static void etm4_disable(struct coresight_device *csdev) ...@@ -262,6 +269,7 @@ static void etm4_disable(struct coresight_device *csdev)
} }
static const struct coresight_ops_source etm4_source_ops = { static const struct coresight_ops_source etm4_source_ops = {
.cpu_id = etm4_cpu_id,
.trace_id = etm4_trace_id, .trace_id = etm4_trace_id,
.enable = etm4_enable, .enable = etm4_enable,
.disable = etm4_disable, .disable = etm4_disable,
......
...@@ -205,12 +205,15 @@ struct coresight_ops_link { ...@@ -205,12 +205,15 @@ struct coresight_ops_link {
/** /**
* struct coresight_ops_source - basic operations for a source * struct coresight_ops_source - basic operations for a source
* Operations available for sources. * Operations available for sources.
* @cpu_id: returns the value of the CPU number this component
* is associated to.
* @trace_id: returns the value of the component's trace ID as known * @trace_id: returns the value of the component's trace ID as known
to the HW. to the HW.
* @enable: enables tracing for a source. * @enable: enables tracing for a source.
* @disable: disables tracing for a source. * @disable: disables tracing for a source.
*/ */
struct coresight_ops_source { struct coresight_ops_source {
int (*cpu_id)(struct coresight_device *csdev);
int (*trace_id)(struct coresight_device *csdev); int (*trace_id)(struct coresight_device *csdev);
int (*enable)(struct coresight_device *csdev); int (*enable)(struct coresight_device *csdev);
void (*disable)(struct coresight_device *csdev); void (*disable)(struct coresight_device *csdev);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment