From: mathieu.poirier@linaro.org (Mathieu Poirier)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 05/12] coresight tmc: Add helpers for accessing 64bit registers
Date: Wed, 14 Jun 2017 11:49:04 -0600 [thread overview]
Message-ID: <20170614174904.GA22030@xps15> (raw)
In-Reply-To: <1497278211-5001-6-git-send-email-suzuki.poulose@arm.com>
On Mon, Jun 12, 2017 at 03:36:44PM +0100, Suzuki K Poulose wrote:
> Coresight TMC splits 64bit registers into a pair of 32bit registers
> (e.g DBA, RRP, RWP). Provide helpers to read/write to these registers.
I'm good with this patch but please specify these changes are to support the
SoC-600 suite. That way when we look back at this set in a couple of years we
don't loose hair thinking we've been carrying bugs all this time.
>
> Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
> ---
> drivers/hwtracing/coresight/coresight-priv.h | 8 ++++++++
> drivers/hwtracing/coresight/coresight-tmc-etf.c | 8 ++++----
> drivers/hwtracing/coresight/coresight-tmc-etr.c | 8 ++++----
> drivers/hwtracing/coresight/coresight-tmc.h | 19 +++++++++++++++++++
> 4 files changed, 35 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/hwtracing/coresight/coresight-priv.h b/drivers/hwtracing/coresight/coresight-priv.h
> index b62dc6a..1a16964 100644
> --- a/drivers/hwtracing/coresight/coresight-priv.h
> +++ b/drivers/hwtracing/coresight/coresight-priv.h
> @@ -123,6 +123,14 @@ coresight_read_reg_pair(void __iomem *addr, s32 lo_offset, s32 hi_offset)
> return val;
> }
>
> +static inline void coresight_write_reg_pair(void __iomem *addr, u64 val,
> + s32 lo_offset, s32 hi_offset)
> +{
> + writel_relaxed((u32)val, addr + lo_offset);
> + if (hi_offset >= 0)
> + writel_relaxed((u32)(val >> 32), addr + hi_offset);
> +}
> +
> void coresight_disable_path(struct list_head *path);
> int coresight_enable_path(struct list_head *path, u32 mode);
> struct coresight_device *coresight_get_sink(struct list_head *path);
> diff --git a/drivers/hwtracing/coresight/coresight-tmc-etf.c b/drivers/hwtracing/coresight/coresight-tmc-etf.c
> index e3b9fb8..aecd712 100644
> --- a/drivers/hwtracing/coresight/coresight-tmc-etf.c
> +++ b/drivers/hwtracing/coresight/coresight-tmc-etf.c
> @@ -371,7 +371,7 @@ static void tmc_update_etf_buffer(struct coresight_device *csdev,
> {
> int i, cur;
> u32 *buf_ptr;
> - u32 read_ptr, write_ptr;
> + u64 read_ptr, write_ptr;
> u32 status, to_read;
> unsigned long offset;
> struct cs_buffers *buf = sink_config;
> @@ -388,8 +388,8 @@ static void tmc_update_etf_buffer(struct coresight_device *csdev,
>
> tmc_flush_and_stop(drvdata);
>
> - read_ptr = readl_relaxed(drvdata->base + TMC_RRP);
> - write_ptr = readl_relaxed(drvdata->base + TMC_RWP);
> + read_ptr = tmc_read_rrp(drvdata);
> + write_ptr = tmc_read_rwp(drvdata);
>
> /*
> * Get a hold of the status register and see if a wrap around
> @@ -441,7 +441,7 @@ static void tmc_update_etf_buffer(struct coresight_device *csdev,
> if (read_ptr > (drvdata->size - 1))
> read_ptr -= drvdata->size;
> /* Tell the HW */
> - writel_relaxed(read_ptr, drvdata->base + TMC_RRP);
> + tmc_write_rrp(drvdata, read_ptr);
> perf_aux_output_flag(handle, PERF_AUX_FLAG_TRUNCATED);
> }
>
> diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtracing/coresight/coresight-tmc-etr.c
> index 5d31269..ff11b92 100644
> --- a/drivers/hwtracing/coresight/coresight-tmc-etr.c
> +++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c
> @@ -44,9 +44,8 @@ static void tmc_etr_enable_hw(struct tmc_drvdata *drvdata)
> ~(TMC_AXICTL_PROT_CTL_B0 | TMC_AXICTL_PROT_CTL_B1)) |
> TMC_AXICTL_PROT_CTL_B1;
> writel_relaxed(axictl, drvdata->base + TMC_AXICTL);
> + tmc_write_dba(drvdata, drvdata->paddr);
>
> - writel_relaxed(drvdata->paddr, drvdata->base + TMC_DBALO);
> - writel_relaxed(0x0, drvdata->base + TMC_DBAHI);
> writel_relaxed(TMC_FFCR_EN_FMT | TMC_FFCR_EN_TI |
> TMC_FFCR_FON_FLIN | TMC_FFCR_FON_TRIG_EVT |
> TMC_FFCR_TRIGON_TRIGIN,
> @@ -59,9 +58,10 @@ static void tmc_etr_enable_hw(struct tmc_drvdata *drvdata)
>
> static void tmc_etr_dump_hw(struct tmc_drvdata *drvdata)
> {
> - u32 rwp, val;
> + u64 rwp;
> + u32 val;
>
> - rwp = readl_relaxed(drvdata->base + TMC_RWP);
> + rwp = tmc_read_rwp(drvdata);
> val = readl_relaxed(drvdata->base + TMC_STS);
>
> /*
> diff --git a/drivers/hwtracing/coresight/coresight-tmc.h b/drivers/hwtracing/coresight/coresight-tmc.h
> index 51c0185..c78de00 100644
> --- a/drivers/hwtracing/coresight/coresight-tmc.h
> +++ b/drivers/hwtracing/coresight/coresight-tmc.h
> @@ -18,6 +18,7 @@
> #ifndef _CORESIGHT_TMC_H
> #define _CORESIGHT_TMC_H
>
> +#include <linux/io.h>
> #include <linux/miscdevice.h>
>
> #define TMC_RSZ 0x004
> @@ -139,4 +140,22 @@ extern const struct coresight_ops tmc_etf_cs_ops;
> int tmc_read_prepare_etr(struct tmc_drvdata *drvdata);
> int tmc_read_unprepare_etr(struct tmc_drvdata *drvdata);
> extern const struct coresight_ops tmc_etr_cs_ops;
> +
> +
> +#define TMC_REG_PAIR(name, lo_off, hi_off) \
> +static inline u64 \
> +tmc_read_##name(struct tmc_drvdata *drvdata) \
> +{ \
> + return coresight_read_reg_pair(drvdata->base, lo_off, hi_off); \
> +} \
> +static inline void \
> +tmc_write_##name(struct tmc_drvdata *drvdata, u64 val) \
> +{ \
> + coresight_write_reg_pair(drvdata->base, val, lo_off, hi_off); \
> +}
> +
> +TMC_REG_PAIR(rrp, TMC_RRP, TMC_RRPHI)
> +TMC_REG_PAIR(rwp, TMC_RWP, TMC_RWPHI)
> +TMC_REG_PAIR(dba, TMC_DBALO, TMC_DBAHI)
> +
> #endif
> --
> 2.7.4
>
WARNING: multiple messages have this Message-ID (diff)
From: Mathieu Poirier <mathieu.poirier@linaro.org>
To: Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 05/12] coresight tmc: Add helpers for accessing 64bit registers
Date: Wed, 14 Jun 2017 11:49:04 -0600 [thread overview]
Message-ID: <20170614174904.GA22030@xps15> (raw)
In-Reply-To: <1497278211-5001-6-git-send-email-suzuki.poulose@arm.com>
On Mon, Jun 12, 2017 at 03:36:44PM +0100, Suzuki K Poulose wrote:
> Coresight TMC splits 64bit registers into a pair of 32bit registers
> (e.g DBA, RRP, RWP). Provide helpers to read/write to these registers.
I'm good with this patch but please specify these changes are to support the
SoC-600 suite. That way when we look back at this set in a couple of years we
don't loose hair thinking we've been carrying bugs all this time.
>
> Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
> ---
> drivers/hwtracing/coresight/coresight-priv.h | 8 ++++++++
> drivers/hwtracing/coresight/coresight-tmc-etf.c | 8 ++++----
> drivers/hwtracing/coresight/coresight-tmc-etr.c | 8 ++++----
> drivers/hwtracing/coresight/coresight-tmc.h | 19 +++++++++++++++++++
> 4 files changed, 35 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/hwtracing/coresight/coresight-priv.h b/drivers/hwtracing/coresight/coresight-priv.h
> index b62dc6a..1a16964 100644
> --- a/drivers/hwtracing/coresight/coresight-priv.h
> +++ b/drivers/hwtracing/coresight/coresight-priv.h
> @@ -123,6 +123,14 @@ coresight_read_reg_pair(void __iomem *addr, s32 lo_offset, s32 hi_offset)
> return val;
> }
>
> +static inline void coresight_write_reg_pair(void __iomem *addr, u64 val,
> + s32 lo_offset, s32 hi_offset)
> +{
> + writel_relaxed((u32)val, addr + lo_offset);
> + if (hi_offset >= 0)
> + writel_relaxed((u32)(val >> 32), addr + hi_offset);
> +}
> +
> void coresight_disable_path(struct list_head *path);
> int coresight_enable_path(struct list_head *path, u32 mode);
> struct coresight_device *coresight_get_sink(struct list_head *path);
> diff --git a/drivers/hwtracing/coresight/coresight-tmc-etf.c b/drivers/hwtracing/coresight/coresight-tmc-etf.c
> index e3b9fb8..aecd712 100644
> --- a/drivers/hwtracing/coresight/coresight-tmc-etf.c
> +++ b/drivers/hwtracing/coresight/coresight-tmc-etf.c
> @@ -371,7 +371,7 @@ static void tmc_update_etf_buffer(struct coresight_device *csdev,
> {
> int i, cur;
> u32 *buf_ptr;
> - u32 read_ptr, write_ptr;
> + u64 read_ptr, write_ptr;
> u32 status, to_read;
> unsigned long offset;
> struct cs_buffers *buf = sink_config;
> @@ -388,8 +388,8 @@ static void tmc_update_etf_buffer(struct coresight_device *csdev,
>
> tmc_flush_and_stop(drvdata);
>
> - read_ptr = readl_relaxed(drvdata->base + TMC_RRP);
> - write_ptr = readl_relaxed(drvdata->base + TMC_RWP);
> + read_ptr = tmc_read_rrp(drvdata);
> + write_ptr = tmc_read_rwp(drvdata);
>
> /*
> * Get a hold of the status register and see if a wrap around
> @@ -441,7 +441,7 @@ static void tmc_update_etf_buffer(struct coresight_device *csdev,
> if (read_ptr > (drvdata->size - 1))
> read_ptr -= drvdata->size;
> /* Tell the HW */
> - writel_relaxed(read_ptr, drvdata->base + TMC_RRP);
> + tmc_write_rrp(drvdata, read_ptr);
> perf_aux_output_flag(handle, PERF_AUX_FLAG_TRUNCATED);
> }
>
> diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtracing/coresight/coresight-tmc-etr.c
> index 5d31269..ff11b92 100644
> --- a/drivers/hwtracing/coresight/coresight-tmc-etr.c
> +++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c
> @@ -44,9 +44,8 @@ static void tmc_etr_enable_hw(struct tmc_drvdata *drvdata)
> ~(TMC_AXICTL_PROT_CTL_B0 | TMC_AXICTL_PROT_CTL_B1)) |
> TMC_AXICTL_PROT_CTL_B1;
> writel_relaxed(axictl, drvdata->base + TMC_AXICTL);
> + tmc_write_dba(drvdata, drvdata->paddr);
>
> - writel_relaxed(drvdata->paddr, drvdata->base + TMC_DBALO);
> - writel_relaxed(0x0, drvdata->base + TMC_DBAHI);
> writel_relaxed(TMC_FFCR_EN_FMT | TMC_FFCR_EN_TI |
> TMC_FFCR_FON_FLIN | TMC_FFCR_FON_TRIG_EVT |
> TMC_FFCR_TRIGON_TRIGIN,
> @@ -59,9 +58,10 @@ static void tmc_etr_enable_hw(struct tmc_drvdata *drvdata)
>
> static void tmc_etr_dump_hw(struct tmc_drvdata *drvdata)
> {
> - u32 rwp, val;
> + u64 rwp;
> + u32 val;
>
> - rwp = readl_relaxed(drvdata->base + TMC_RWP);
> + rwp = tmc_read_rwp(drvdata);
> val = readl_relaxed(drvdata->base + TMC_STS);
>
> /*
> diff --git a/drivers/hwtracing/coresight/coresight-tmc.h b/drivers/hwtracing/coresight/coresight-tmc.h
> index 51c0185..c78de00 100644
> --- a/drivers/hwtracing/coresight/coresight-tmc.h
> +++ b/drivers/hwtracing/coresight/coresight-tmc.h
> @@ -18,6 +18,7 @@
> #ifndef _CORESIGHT_TMC_H
> #define _CORESIGHT_TMC_H
>
> +#include <linux/io.h>
> #include <linux/miscdevice.h>
>
> #define TMC_RSZ 0x004
> @@ -139,4 +140,22 @@ extern const struct coresight_ops tmc_etf_cs_ops;
> int tmc_read_prepare_etr(struct tmc_drvdata *drvdata);
> int tmc_read_unprepare_etr(struct tmc_drvdata *drvdata);
> extern const struct coresight_ops tmc_etr_cs_ops;
> +
> +
> +#define TMC_REG_PAIR(name, lo_off, hi_off) \
> +static inline u64 \
> +tmc_read_##name(struct tmc_drvdata *drvdata) \
> +{ \
> + return coresight_read_reg_pair(drvdata->base, lo_off, hi_off); \
> +} \
> +static inline void \
> +tmc_write_##name(struct tmc_drvdata *drvdata, u64 val) \
> +{ \
> + coresight_write_reg_pair(drvdata->base, val, lo_off, hi_off); \
> +}
> +
> +TMC_REG_PAIR(rrp, TMC_RRP, TMC_RRPHI)
> +TMC_REG_PAIR(rwp, TMC_RWP, TMC_RWPHI)
> +TMC_REG_PAIR(dba, TMC_DBALO, TMC_DBAHI)
> +
> #endif
> --
> 2.7.4
>
next prev parent reply other threads:[~2017-06-14 17:49 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-12 14:36 [PATCH 00/12] coresight: Support for ARM Coresight SoC-600 Suzuki K Poulose
2017-06-12 14:36 ` Suzuki K Poulose
2017-06-12 14:36 ` [PATCH 01/12] coresight replicator: Cleanup programmable replicator naming Suzuki K Poulose
2017-06-12 14:36 ` Suzuki K Poulose
2017-06-13 16:55 ` Mathieu Poirier
2017-06-13 16:55 ` Mathieu Poirier
2017-06-13 16:55 ` Mathieu Poirier
2017-06-13 17:56 ` Suzuki K Poulose
2017-06-13 17:56 ` Suzuki K Poulose
2017-06-18 14:04 ` Rob Herring
2017-06-18 14:04 ` Rob Herring
2017-06-20 16:44 ` Mathieu Poirier
2017-06-20 16:44 ` Mathieu Poirier
2017-06-20 16:44 ` Mathieu Poirier
2017-06-22 3:21 ` Rob Herring
2017-06-22 3:21 ` Rob Herring
2017-06-22 3:21 ` Rob Herring
2017-06-12 14:36 ` [PATCH 02/12] arm64: dts: juno: Use the new coresight replicator string Suzuki K Poulose
2017-06-12 14:36 ` Suzuki K Poulose
2017-06-12 14:36 ` [PATCH 03/12] coresight: Extend the PIDR mask to cover relevant bits in PIDR2 Suzuki K Poulose
2017-06-12 14:36 ` Suzuki K Poulose
2017-06-13 17:53 ` Mathieu Poirier
2017-06-13 17:53 ` Mathieu Poirier
2017-06-13 17:55 ` Suzuki K Poulose
2017-06-13 17:55 ` Suzuki K Poulose
2017-06-13 19:06 ` Mathieu Poirier
2017-06-13 19:06 ` Mathieu Poirier
2017-06-12 14:36 ` [PATCH 04/12] coresight: Add support for reading 64bit registers Suzuki K Poulose
2017-06-12 14:36 ` Suzuki K Poulose
2017-06-13 17:45 ` Mathieu Poirier
2017-06-13 17:45 ` Mathieu Poirier
2017-06-13 17:57 ` Suzuki K Poulose
2017-06-13 17:57 ` Suzuki K Poulose
2017-06-12 14:36 ` [PATCH 05/12] coresight tmc: Add helpers for accessing " Suzuki K Poulose
2017-06-12 14:36 ` Suzuki K Poulose
2017-06-14 17:49 ` Mathieu Poirier [this message]
2017-06-14 17:49 ` Mathieu Poirier
2017-06-15 10:13 ` Suzuki K Poulose
2017-06-15 10:13 ` Suzuki K Poulose
2017-06-15 13:29 ` Mike Leach
2017-06-15 13:29 ` Mike Leach
2017-06-15 14:24 ` Mathieu Poirier
2017-06-15 14:24 ` Mathieu Poirier
2017-06-12 14:36 ` [PATCH 06/12] coresight tmc: Expose DBA and AXICTL Suzuki K Poulose
2017-06-12 14:36 ` Suzuki K Poulose
2017-06-14 17:50 ` Mathieu Poirier
2017-06-14 17:50 ` Mathieu Poirier
2017-06-15 10:19 ` Suzuki K Poulose
2017-06-15 10:19 ` Suzuki K Poulose
2017-06-12 14:36 ` [PATCH 07/12] coresight replicator: Expose replicator management registers Suzuki K Poulose
2017-06-12 14:36 ` Suzuki K Poulose
2017-06-14 17:54 ` Mathieu Poirier
2017-06-14 17:54 ` Mathieu Poirier
2017-06-15 10:23 ` Suzuki K Poulose
2017-06-15 10:23 ` Suzuki K Poulose
2017-06-12 14:36 ` [PATCH 08/12] coresight tmc: Handle configuration types properly Suzuki K Poulose
2017-06-12 14:36 ` Suzuki K Poulose
2017-06-14 17:59 ` Mathieu Poirier
2017-06-14 17:59 ` Mathieu Poirier
2017-06-15 10:25 ` Suzuki K Poulose
2017-06-15 10:25 ` Suzuki K Poulose
2017-06-15 14:33 ` Mathieu Poirier
2017-06-15 14:33 ` Mathieu Poirier
2017-06-12 14:36 ` [PATCH 09/12] coresight tmc: Add capability information Suzuki K Poulose
2017-06-12 14:36 ` Suzuki K Poulose
2017-06-14 18:22 ` Mathieu Poirier
2017-06-14 18:22 ` Mathieu Poirier
2017-06-15 10:30 ` Suzuki K Poulose
2017-06-15 10:30 ` Suzuki K Poulose
2017-06-15 14:37 ` Mathieu Poirier
2017-06-15 14:37 ` Mathieu Poirier
2017-06-12 14:36 ` [PATCH 10/12] coresight tmc: Support for save-restore in ETR Suzuki K Poulose
2017-06-12 14:36 ` Suzuki K Poulose
2017-06-12 14:36 ` [PATCH 11/12] coresight tmc: Add support for Coresight SoC 600 TMC Suzuki K Poulose
2017-06-12 14:36 ` Suzuki K Poulose
2017-06-14 18:25 ` Mathieu Poirier
2017-06-14 18:25 ` Mathieu Poirier
2017-06-15 10:31 ` Suzuki K Poulose
2017-06-15 10:31 ` Suzuki K Poulose
2017-06-12 14:36 ` [PATCH 12/12] coresight: Add support for Coresight SoC 600 components Suzuki K Poulose
2017-06-12 14:36 ` Suzuki K Poulose
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=20170614174904.GA22030@xps15 \
--to=mathieu.poirier@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 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.