From: zhang.chunyan@linaro.org (Chunyan Zhang)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V4 1/4] stm class: provision for statically assigned masterIDs
Date: Tue, 1 Mar 2016 14:35:06 +0800 [thread overview]
Message-ID: <1456814109-21311-2-git-send-email-zhang.chunyan@linaro.org> (raw)
In-Reply-To: <1456814109-21311-1-git-send-email-zhang.chunyan@linaro.org>
From: Mathieu Poirier <mathieu.poirier@linaro.org>
Some architecture like ARM assign masterIDs at the HW design
phase. Those are therefore unreachable to users, making masterID
management in the generic STM core irrelevant.
In this kind of configuration channels are shared between masters
rather than being allocated on a per master basis.
This patch adds a new 'mshared' flag to struct stm_data that tells the
core that this specific STM device doesn't need explicit masterID
management. In the core sw_start/end of masterID are set to '1',
i.e there is only one masterID to deal with.
Also this patch depends on [1], so that the number of masterID
is '1' too.
Finally the lower and upper bound for masterIDs as presented
in ($SYSFS)/class/stm/XYZ.stm/masters and
($SYSFS)/../stp-policy/XYZ.stm.my_policy/some_device/masters
are set to '-1'. That way users can't confuse them with
architecture where masterID management is required (where any
other value would be valid).
[1] https://lkml.org/lkml/2015/12/22/348
Signed-off-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Signed-off-by: Chunyan Zhang <zhang.chunyan@linaro.org>
---
drivers/hwtracing/stm/core.c | 18 ++++++++++++++++--
drivers/hwtracing/stm/policy.c | 18 ++++++++++++++++--
include/linux/stm.h | 8 ++++++++
3 files changed, 40 insertions(+), 4 deletions(-)
diff --git a/drivers/hwtracing/stm/core.c b/drivers/hwtracing/stm/core.c
index b6445d9..7f71d54 100644
--- a/drivers/hwtracing/stm/core.c
+++ b/drivers/hwtracing/stm/core.c
@@ -44,9 +44,15 @@ static ssize_t masters_show(struct device *dev,
char *buf)
{
struct stm_device *stm = to_stm_device(dev);
- int ret;
+ int ret, sw_start, sw_end;
+
+ sw_start = stm->data->sw_start;
+ sw_end = stm->data->sw_end;
- ret = sprintf(buf, "%u %u\n", stm->data->sw_start, stm->data->sw_end);
+ if (stm->data->mshared)
+ sw_start = sw_end = STM_SHARED_MASTERID;
+
+ ret = sprintf(buf, "%d %d\n", sw_start, sw_end);
return ret;
}
@@ -618,7 +624,15 @@ int stm_register_device(struct device *parent, struct stm_data *stm_data,
if (!stm_data->packet || !stm_data->sw_nchannels)
return -EINVAL;
+ /*
+ * MasterIDs are assigned at HW design phase. As such the core is
+ * using a single master for interaction with this device.
+ */
+ if (stm_data->mshared)
+ stm_data->sw_start = stm_data->sw_end = 1;
+
nmasters = stm_data->sw_end - stm_data->sw_start;
+
stm = kzalloc(sizeof(*stm) + nmasters * sizeof(void *), GFP_KERNEL);
if (!stm)
return -ENOMEM;
diff --git a/drivers/hwtracing/stm/policy.c b/drivers/hwtracing/stm/policy.c
index 17a1416..19455db 100644
--- a/drivers/hwtracing/stm/policy.c
+++ b/drivers/hwtracing/stm/policy.c
@@ -80,10 +80,17 @@ static ssize_t
stp_policy_node_masters_show(struct config_item *item, char *page)
{
struct stp_policy_node *policy_node = to_stp_policy_node(item);
+ struct stm_device *stm = policy_node->policy->stm;
+ int first_master, last_master;
ssize_t count;
- count = sprintf(page, "%u %u\n", policy_node->first_master,
- policy_node->last_master);
+ first_master = policy_node->first_master;
+ last_master = policy_node->last_master;
+
+ if (stm && stm->data->mshared)
+ first_master = last_master = STM_SHARED_MASTERID;
+
+ count = sprintf(page, "%d %d\n", first_master, last_master);
return count;
}
@@ -106,6 +113,13 @@ stp_policy_node_masters_store(struct config_item *item, const char *page,
if (!stm)
goto unlock;
+ /*
+ * masterIDs are allocated in HW, no point in trying to
+ * change their values.
+ */
+ if (stm->data->mshared)
+ goto unlock;
+
/* must be within [sw_start..sw_end], which is an inclusive range */
if (first > INT_MAX || last > INT_MAX || first > last ||
first < stm->data->sw_start ||
diff --git a/include/linux/stm.h b/include/linux/stm.h
index 9d0083d..6fac8b1 100644
--- a/include/linux/stm.h
+++ b/include/linux/stm.h
@@ -18,6 +18,11 @@
#include <linux/device.h>
/**
+ * The masterIDs are set in hardware and can't be queried
+ */
+#define STM_SHARED_MASTERID -1
+
+/**
* enum stp_packet_type - STP packets that an STM driver sends
*/
enum stp_packet_type {
@@ -46,6 +51,8 @@ struct stm_device;
* struct stm_data - STM device description and callbacks
* @name: device name
* @stm: internal structure, only used by stm class code
+ * @mshared: true if masterIDs are assigned in HW. If so @sw_start
+ * and @sw_end are set to '1' by the core.
* @sw_start: first STP master available to software
* @sw_end: last STP master available to software
* @sw_nchannels: number of STP channels per master
@@ -71,6 +78,7 @@ struct stm_device;
struct stm_data {
const char *name;
struct stm_device *stm;
+ bool mshared;
unsigned int sw_start;
unsigned int sw_end;
unsigned int sw_nchannels;
--
1.9.1
next prev parent reply other threads:[~2016-03-01 6:35 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-01 6:35 [PATCH V4 0/4] Introduce CoreSight STM support Chunyan Zhang
2016-03-01 6:35 ` Chunyan Zhang [this message]
2016-03-01 6:35 ` [PATCH V4 2/4] Documentations: Add explanations of the case for non-configurable masters Chunyan Zhang
2016-03-01 6:35 ` [PATCH V4 3/4] coresight-stm: Bindings for System Trace Macrocell Chunyan Zhang
2016-03-01 6:35 ` [PATCH V4 4/4] coresight-stm: adding driver for CoreSight STM component Chunyan Zhang
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=1456814109-21311-2-git-send-email-zhang.chunyan@linaro.org \
--to=zhang.chunyan@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
/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).