From: Mike Leach <mike.leach@linaro.org>
To: mike.leach@linaro.org, mathieu.poirier@linaro.org,
linux-arm-kernel@lists.infradead.org, coresight@lists.linaro.org,
linux-doc@vger.kernel.org
Cc: suzuki.poulose@arm.com, corbet@lwn.net, gregkh@linuxfoundation.org
Subject: [PATCH v2 04/11] coresight: etm4x: Fix issues with start-stop logic.
Date: Thu, 29 Aug 2019 22:33:14 +0100 [thread overview]
Message-ID: <20190829213321.4092-5-mike.leach@linaro.org> (raw)
In-Reply-To: <20190829213321.4092-1-mike.leach@linaro.org>
Fixes the following issues when using the ETMv4 start-stop logic.
1) Setting a start or a stop address should not automatically set the
start-stop status to 'on'. The value set by the user in 'mode' must
be respected or start instances could be missed.
2) Missing API for controlling TRCVIPCSSCTLR - start stop control by
PE comparators.
3) Default ETM configuration sets a trace all range, and correctly sets
the start-stop status bit. This was not being correctly reflected in
the 'mode' parameter.
Signed-off-by: Mike Leach <mike.leach@linaro.org>
---
.../coresight/coresight-etm4x-sysfs.c | 39 +++++++++++++++++--
drivers/hwtracing/coresight/coresight-etm4x.c | 1 +
2 files changed, 36 insertions(+), 4 deletions(-)
diff --git a/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c b/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c
index b520f3c1521f..11730a194951 100644
--- a/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c
+++ b/drivers/hwtracing/coresight/coresight-etm4x-sysfs.c
@@ -217,6 +217,7 @@ static ssize_t reset_store(struct device *dev,
/* No start-stop filtering for ViewInst */
config->vissctlr = 0x0;
+ config->vipcssctlr = 0x0;
/* Disable seq events */
for (i = 0; i < drvdata->nrseqstate-1; i++)
@@ -1059,8 +1060,6 @@ static ssize_t addr_start_store(struct device *dev,
config->addr_val[idx] = (u64)val;
config->addr_type[idx] = ETM_ADDR_TYPE_START;
config->vissctlr |= BIT(idx);
- /* SSSTATUS, bit[9] - turn on start/stop logic */
- config->vinst_ctrl |= BIT(9);
spin_unlock(&drvdata->spinlock);
return size;
}
@@ -1116,8 +1115,6 @@ static ssize_t addr_stop_store(struct device *dev,
config->addr_val[idx] = (u64)val;
config->addr_type[idx] = ETM_ADDR_TYPE_STOP;
config->vissctlr |= BIT(idx + 16);
- /* SSSTATUS, bit[9] - turn on start/stop logic */
- config->vinst_ctrl |= BIT(9);
spin_unlock(&drvdata->spinlock);
return size;
}
@@ -1274,6 +1271,39 @@ static ssize_t addr_exlevel_s_ns_store(struct device *dev,
}
static DEVICE_ATTR_RW(addr_exlevel_s_ns);
+static ssize_t vinst_pe_cmp_start_stop_show(struct device *dev,
+ struct device_attribute *attr,
+ char *buf)
+{
+ unsigned long val;
+ struct etmv4_drvdata *drvdata = dev_get_drvdata(dev->parent);
+ struct etmv4_config *config = &drvdata->config;
+
+ if (!drvdata->nr_pe_cmp)
+ return -EINVAL;
+ val = config->vipcssctlr;
+ return scnprintf(buf, PAGE_SIZE, "%#lx\n", val);
+}
+static ssize_t vinst_pe_cmp_start_stop_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t size)
+{
+ unsigned long val;
+ struct etmv4_drvdata *drvdata = dev_get_drvdata(dev->parent);
+ struct etmv4_config *config = &drvdata->config;
+
+ if (kstrtoul(buf, 16, &val))
+ return -EINVAL;
+ if (!drvdata->nr_pe_cmp)
+ return -EINVAL;
+
+ spin_lock(&drvdata->spinlock);
+ config->vipcssctlr = val;
+ spin_unlock(&drvdata->spinlock);
+ return size;
+}
+static DEVICE_ATTR_RW(vinst_pe_cmp_start_stop);
+
static ssize_t seq_idx_show(struct device *dev,
struct device_attribute *attr,
char *buf)
@@ -2080,6 +2110,7 @@ static struct attribute *coresight_etmv4_attrs[] = {
&dev_attr_addr_ctxtype.attr,
&dev_attr_addr_context.attr,
&dev_attr_addr_exlevel_s_ns.attr,
+ &dev_attr_vinst_pe_cmp_start_stop.attr,
&dev_attr_seq_idx.attr,
&dev_attr_seq_state.attr,
&dev_attr_seq_event.attr,
diff --git a/drivers/hwtracing/coresight/coresight-etm4x.c b/drivers/hwtracing/coresight/coresight-etm4x.c
index 52b8876de157..d8b078d0cc7f 100644
--- a/drivers/hwtracing/coresight/coresight-etm4x.c
+++ b/drivers/hwtracing/coresight/coresight-etm4x.c
@@ -868,6 +868,7 @@ static void etm4_set_default_filter(struct etmv4_config *config)
* in the started state
*/
config->vinst_ctrl |= BIT(9);
+ config->mode |= ETM_MODE_VIEWINST_STARTSTOP;
/* No start-stop filtering for ViewInst */
config->vissctlr = 0x0;
--
2.17.1
next prev parent reply other threads:[~2019-08-29 21:33 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-29 21:33 [PATCH v2 00/11] coresight: etm4x: Fixes and updates for sysfs API Mike Leach
2019-08-29 21:33 ` [PATCH v2 01/11] coresight: etm4x: Fixes for ETM v4.4 architecture updates Mike Leach
2019-08-29 21:33 ` [PATCH v2 02/11] coresight: etm4x: Fix input validation for sysfs Mike Leach
2019-09-17 9:33 ` Suzuki K Poulose
2019-08-29 21:33 ` [PATCH v2 03/11] coresight: etm4x: Add missing API to set EL match on address filters Mike Leach
2019-09-17 9:31 ` Suzuki K Poulose
2019-10-26 20:26 ` [PATCH] coresight: etm4x: Fix BMVAL misuse Rikard Falkeborn
2019-10-30 15:19 ` Mathieu Poirier
2019-08-29 21:33 ` Mike Leach [this message]
2019-08-29 21:33 ` [PATCH v2 05/11] coresight: etm4x: Improve usability of sysfs - include/exclude addr Mike Leach
2019-08-29 21:33 ` [PATCH v2 06/11] coresight: etm4x: Improve usability of sysfs - CID and VMID masks Mike Leach
2019-08-29 21:33 ` [PATCH v2 07/11] coresight: etm4x: Add view comparator settings API to sysfs Mike Leach
2019-08-29 21:33 ` [PATCH v2 08/11] coresight: etm4x: Add missing single-shot control " Mike Leach
2019-08-29 21:33 ` [PATCH v2 09/11] coresight: etm4x: docs: Update ABI doc for sysfs features added Mike Leach
2019-09-03 19:42 ` Mathieu Poirier
2019-09-03 19:59 ` Greg KH
2019-09-03 22:51 ` Mathieu Poirier
2019-09-04 5:48 ` Greg KH
2019-09-04 16:05 ` Mathieu Poirier
2019-09-04 16:17 ` Greg KH
2019-09-04 19:47 ` Mathieu Poirier
2019-08-29 21:33 ` [PATCH v2 10/11] coresight: docs: Create common sub-directory for coresight trace Mike Leach
2019-08-29 21:33 ` [PATCH v2 11/11] coresight: etm4x: docs: Adds detailed document for programming etm4x Mike Leach
2019-09-03 19:38 ` Mathieu Poirier
2019-09-03 22:46 ` Mike Leach
2019-09-04 16:09 ` Mathieu Poirier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190829213321.4092-5-mike.leach@linaro.org \
--to=mike.leach@linaro.org \
--cc=corbet@lwn.net \
--cc=coresight@lists.linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=mathieu.poirier@linaro.org \
--cc=suzuki.poulose@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).