From: Leo Yan <leo.yan@arm.com>
To: James Clark <james.clark@linaro.org>
Cc: lcherian@marvell.com, coresight@lists.linaro.org,
Mike Leach <mike.leach@linaro.org>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Maxime Coquelin <mcoquelin.stm32@gmail.com>,
Alexandre Torgue <alexandre.torgue@foss.st.com>,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com
Subject: Re: [PATCH 4/7] coresight: Add claim tag warnings and debug messages
Date: Thu, 13 Mar 2025 14:40:05 +0000 [thread overview]
Message-ID: <20250313144005.GQ9682@e132581.arm.com> (raw)
In-Reply-To: <20250211103945.967495-5-james.clark@linaro.org>
On Tue, Feb 11, 2025 at 10:39:40AM +0000, James Clark wrote:
>
> Add a dev_dbg() message so that external debugger conflicts are more
> visible. There are multiple reasons for -EBUSY so a message for this
> particular one could be helpful. Add errors for and enumerate all the
> other cases that are impossible.
>
> Signed-off-by: James Clark <james.clark@linaro.org>
> ---
> drivers/hwtracing/coresight/coresight-core.c | 48 ++++++++++++--------
> drivers/hwtracing/coresight/coresight-priv.h | 5 +-
> 2 files changed, 34 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/hwtracing/coresight/coresight-core.c b/drivers/hwtracing/coresight/coresight-core.c
> index 7b53165c93af..7fe5d5d432c4 100644
> --- a/drivers/hwtracing/coresight/coresight-core.c
> +++ b/drivers/hwtracing/coresight/coresight-core.c
> @@ -133,16 +133,6 @@ static inline u32 coresight_read_claim_tags(struct csdev_access *csa)
> csdev_access_relaxed_read32(csa, CORESIGHT_CLAIMCLR));
> }
>
> -static inline bool coresight_is_claimed_self_hosted(struct csdev_access *csa)
> -{
> - return coresight_read_claim_tags(csa) == CORESIGHT_CLAIM_SELF_HOSTED;
> -}
> -
> -static inline bool coresight_is_claimed_any(struct coresight_device *csdev)
> -{
> - return coresight_read_claim_tags(&csdev->access) != 0;
> -}
> -
> static inline void coresight_set_self_claim_tag(struct csdev_access *csa)
> {
> csdev_access_relaxed_write32(csa, CORESIGHT_CLAIM_SELF_HOSTED,
> @@ -169,18 +159,40 @@ static inline void coresight_clear_self_claim_tag(struct csdev_access *csa)
> */
> int coresight_claim_device_unlocked(struct coresight_device *csdev)
> {
> + int tag;
> + struct csdev_access *csa;
> +
> if (WARN_ON(!csdev))
> return -EINVAL;
>
> - if (coresight_is_claimed_any(csdev))
> + csa = &csdev->access;
> + tag = coresight_read_claim_tags(csa);
> +
> + switch (tag) {
> + case CORESIGHT_CLAIM_FREE:
> + coresight_set_self_claim_tag(csa);
> + if (coresight_read_claim_tags(csa) == CORESIGHT_CLAIM_SELF_HOSTED)
> + return 0;
> +
It would be a rare case if a failure happens here. Seems to me, it
would be valuable to print a log for this edge case.
Otherwise, looks good to me.
> + /* There was a race setting the tag, clean up and fail */
> + coresight_clear_self_claim_tag(csa);
> return -EBUSY;
>
> - coresight_set_self_claim_tag(&csdev->access);
> - if (coresight_is_claimed_self_hosted(&csdev->access))
> - return 0;
> - /* There was a race setting the tag, clean up and fail */
> - coresight_clear_self_claim_tag(&csdev->access);
> - return -EBUSY;
> + case CORESIGHT_CLAIM_EXTERNAL:
> + /* External debug is an expected state, so log and report BUSY */
> + dev_dbg(&csdev->dev, "Busy: Claimed by external debugger");
> + return -EBUSY;
> +
> + default:
> + case CORESIGHT_CLAIM_SELF_HOSTED:
> + case CORESIGHT_CLAIM_INVALID:
> + /*
> + * Warn here because we clear a lingering self hosted tag
> + * on probe, so other tag combinations are impossible.
> + */
> + dev_err_once(&csdev->dev, "Invalid claim tag state: %x", tag);
> + return -EBUSY;
> + }
> }
> EXPORT_SYMBOL_GPL(coresight_claim_device_unlocked);
>
> @@ -205,7 +217,7 @@ EXPORT_SYMBOL_GPL(coresight_claim_device);
> */
> void coresight_disclaim_device_unlocked(struct csdev_access *csa)
> {
> - if (coresight_is_claimed_self_hosted(csa))
> + if (coresight_read_claim_tags(csa) == CORESIGHT_CLAIM_SELF_HOSTED)
> coresight_clear_self_claim_tag(csa);
> else
> /*
> diff --git a/drivers/hwtracing/coresight/coresight-priv.h b/drivers/hwtracing/coresight/coresight-priv.h
> index cc7ff1e36ef4..a83113225797 100644
> --- a/drivers/hwtracing/coresight/coresight-priv.h
> +++ b/drivers/hwtracing/coresight/coresight-priv.h
> @@ -36,7 +36,10 @@ extern const struct device_type coresight_dev_type[];
> * See PSCI - ARM DEN 0022D, Section: 6.8.1 Debug and Trace save and restore.
> */
> #define CORESIGHT_CLAIM_MASK GENMASK(1, 0)
> -#define CORESIGHT_CLAIM_SELF_HOSTED BIT(1)
> +#define CORESIGHT_CLAIM_FREE 0
> +#define CORESIGHT_CLAIM_EXTERNAL 1
> +#define CORESIGHT_CLAIM_SELF_HOSTED 2
> +#define CORESIGHT_CLAIM_INVALID 3
>
> #define TIMEOUT_US 100
> #define BMVAL(val, lsb, msb) ((val & GENMASK(msb, lsb)) >> lsb)
> --
> 2.34.1
>
> _______________________________________________
> CoreSight mailing list -- coresight@lists.linaro.org
> To unsubscribe send an email to coresight-leave@lists.linaro.org
next prev parent reply other threads:[~2025-03-13 15:51 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-11 10:39 [PATCH 0/7] coresight: Clear self hosted claim tag on probe James Clark
2025-02-11 10:39 ` [PATCH 1/7] coresight: Rename coresight_{set,clear}_claim_tags() James Clark
2025-03-13 11:24 ` Leo Yan
2025-02-11 10:39 ` [PATCH 2/7] coresight: Convert disclaim functions to take a struct cs_access James Clark
2025-03-13 14:54 ` Leo Yan
2025-03-17 11:36 ` James Clark
2025-03-17 18:29 ` Leo Yan
2025-03-18 9:27 ` James Clark
2025-02-11 10:39 ` [PATCH 3/7] coresight: Only check bottom two claim bits James Clark
2025-03-13 11:46 ` Leo Yan
2025-02-11 10:39 ` [PATCH 4/7] coresight: Add claim tag warnings and debug messages James Clark
2025-03-13 14:40 ` Leo Yan [this message]
2025-03-17 11:56 ` James Clark
2025-02-11 10:39 ` [PATCH 5/7] coresight: Clear self hosted claim tag on probe James Clark
2025-02-12 18:24 ` Mike Leach
2025-02-13 13:20 ` James Clark
2025-03-13 16:04 ` Leo Yan
2025-03-17 15:05 ` James Clark
2025-03-17 18:09 ` Leo Yan
2025-02-11 10:39 ` [PATCH 6/7] coresight: Remove inlines from static function definitions James Clark
2025-03-14 9:50 ` Leo Yan
2025-03-17 15:26 ` James Clark
2025-03-17 17:45 ` Leo Yan
2025-02-11 10:39 ` [PATCH 7/7] coresight: Remove extern from function declarations James Clark
2025-03-13 16:17 ` Leo Yan
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=20250313144005.GQ9682@e132581.arm.com \
--to=leo.yan@arm.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=alexandre.torgue@foss.st.com \
--cc=coresight@lists.linaro.org \
--cc=james.clark@linaro.org \
--cc=lcherian@marvell.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=mcoquelin.stm32@gmail.com \
--cc=mike.leach@linaro.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.