coresight: implementing 'cpu_id()' API
authorMathieu Poirier <mathieu.poirier@linaro.org>
Tue, 2 Feb 2016 21:14:01 +0000 (14:14 -0700)
committerMathieu Poirier <mathieu.poirier@linaro.org>
Wed, 1 Jun 2016 21:30:09 +0000 (15:30 -0600)
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: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 52210c8745e418f82f3f0aeeee01d7bc4858812a)

drivers/hwtracing/coresight/coresight-etm3x.c
drivers/hwtracing/coresight/coresight-etm4x.c
include/linux/coresight.h

index 5981fcc699601af4ee6914b6687e38d0cb118e43..aae80e14508d3f15432ce9508bcb65291efaae86 100644 (file)
@@ -315,6 +315,13 @@ static void etm_enable_hw(void *info)
        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)
 {
        struct etm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
@@ -421,6 +428,7 @@ static void etm_disable(struct coresight_device *csdev)
 }
 
 static const struct coresight_ops_source etm_source_ops = {
+       .cpu_id         = etm_cpu_id,
        .trace_id       = etm_trace_id,
        .enable         = etm_enable,
        .disable        = etm_disable,
index 167004f9c42b4616dccdcaf71f9adebcb5c18512..b6ae9cb6ff578fff13fde636b7c2b4af20f0cc7a 100644 (file)
@@ -63,6 +63,13 @@ static bool etm4_arch_supported(u8 arch)
        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)
 {
        struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
@@ -262,6 +269,7 @@ static void etm4_disable(struct coresight_device *csdev)
 }
 
 static const struct coresight_ops_source etm4_source_ops = {
+       .cpu_id         = etm4_cpu_id,
        .trace_id       = etm4_trace_id,
        .enable         = etm4_enable,
        .disable        = etm4_disable,
index a7cabfa23b55823773cb91e9bfd7996ae34f3f97..bf62b265bf52749ae98fca1dd15eb862853cfe9a 100644 (file)
@@ -205,12 +205,15 @@ struct coresight_ops_link {
 /**
  * struct coresight_ops_source - basic operations for a source
  * 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
                to the HW.
  * @enable:    enables tracing for a source.
  * @disable:   disables tracing for a source.
  */
 struct coresight_ops_source {
+       int (*cpu_id)(struct coresight_device *csdev);
        int (*trace_id)(struct coresight_device *csdev);
        int (*enable)(struct coresight_device *csdev);
        void (*disable)(struct coresight_device *csdev);