[PATCH 2/2] coresight: tmc: Configure AXI write burst size
Mike Leach
mike.leach at linaro.org
Thu Sep 2 09:29:21 PDT 2021
On Wed, 1 Sept 2021 at 14:12, Tanmay Jagdale <tanmay at marvell.com> wrote:
>
> The current driver sets the write burst size initiated by TMC-ETR on
> AXI bus to a fixed value of 16. Make this configurable by reading the
> value specified in fwnode. If not specified, then default to 16.
>
> Introduced a "max_burst_size" variable in tmc_drvdata structure to
> facilitate this change.
>
> Signed-off-by: Tanmay Jagdale <tanmay at marvell.com>
> ---
> .../hwtracing/coresight/coresight-tmc-core.c | 21 +++++++++++++++++--
> .../hwtracing/coresight/coresight-tmc-etr.c | 3 ++-
> drivers/hwtracing/coresight/coresight-tmc.h | 6 +++++-
> 3 files changed, 26 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/hwtracing/coresight/coresight-tmc-core.c b/drivers/hwtracing/coresight/coresight-tmc-core.c
> index 74c6323d4d6a..d0276af82494 100644
> --- a/drivers/hwtracing/coresight/coresight-tmc-core.c
> +++ b/drivers/hwtracing/coresight/coresight-tmc-core.c
> @@ -432,6 +432,21 @@ static u32 tmc_etr_get_default_buffer_size(struct device *dev)
> return size;
> }
>
> +static u32 tmc_etr_get_max_burst_size(struct device *dev)
> +{
> + u32 burst_size;
> +
> + if (fwnode_property_read_u32(dev->fwnode, "arm,max-burst-size",
> + &burst_size))
> + return TMC_AXICTL_WR_BURST_16;
> +
> + /* Only permissible values are 0 to 15 */
> + if (burst_size > 0xF)
> + burst_size = TMC_AXICTL_WR_BURST_16;
> +
> + return burst_size;
> +}
> +
> static int tmc_probe(struct amba_device *adev, const struct amba_id *id)
> {
> int ret = 0;
> @@ -469,10 +484,12 @@ static int tmc_probe(struct amba_device *adev, const struct amba_id *id)
> /* This device is not associated with a session */
> drvdata->pid = -1;
>
> - if (drvdata->config_type == TMC_CONFIG_TYPE_ETR)
> + if (drvdata->config_type == TMC_CONFIG_TYPE_ETR) {
> drvdata->size = tmc_etr_get_default_buffer_size(dev);
> - else
> + drvdata->max_burst_size = tmc_etr_get_max_burst_size(dev);
> + } else {
> drvdata->size = readl_relaxed(drvdata->base + TMC_RSZ) * 4;
> + }
>
> desc.dev = dev;
> desc.groups = coresight_tmc_groups;
> diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtracing/coresight/coresight-tmc-etr.c
> index acdb59e0e661..0ac2a611110b 100644
> --- a/drivers/hwtracing/coresight/coresight-tmc-etr.c
> +++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c
> @@ -982,7 +982,8 @@ static void __tmc_etr_enable_hw(struct tmc_drvdata *drvdata)
>
> axictl = readl_relaxed(drvdata->base + TMC_AXICTL);
> axictl &= ~TMC_AXICTL_CLEAR_MASK;
> - axictl |= (TMC_AXICTL_PROT_CTL_B1 | TMC_AXICTL_WR_BURST_16);
> + axictl |= TMC_AXICTL_PROT_CTL_B1;
> + axictl |= TMC_AXICTL_WR_BURST(drvdata->max_burst_size);
> axictl |= TMC_AXICTL_AXCACHE_OS;
>
> if (tmc_etr_has_cap(drvdata, TMC_ETR_AXI_ARCACHE)) {
> diff --git a/drivers/hwtracing/coresight/coresight-tmc.h b/drivers/hwtracing/coresight/coresight-tmc.h
> index b91ec7dde7bc..6bec20a392b3 100644
> --- a/drivers/hwtracing/coresight/coresight-tmc.h
> +++ b/drivers/hwtracing/coresight/coresight-tmc.h
> @@ -70,7 +70,8 @@
> #define TMC_AXICTL_PROT_CTL_B0 BIT(0)
> #define TMC_AXICTL_PROT_CTL_B1 BIT(1)
> #define TMC_AXICTL_SCT_GAT_MODE BIT(7)
> -#define TMC_AXICTL_WR_BURST_16 0xF00
> +#define TMC_AXICTL_WR_BURST(v) (((v) & 0xf) << 8)
> +#define TMC_AXICTL_WR_BURST_16 0xf
> /* Write-back Read and Write-allocate */
> #define TMC_AXICTL_AXCACHE_OS (0xf << 2)
> #define TMC_AXICTL_ARCACHE_OS (0xf << 16)
> @@ -174,6 +175,8 @@ struct etr_buf {
> * @etr_buf: details of buffer used in TMC-ETR
> * @len: size of the available trace for ETF/ETB.
> * @size: trace buffer size for this TMC (common for all modes).
> + * @max_burst_size: The maximum burst size that can be initiated by
> + * TMC-ETR on AXI bus.
> * @mode: how this TMC is being used.
> * @config_type: TMC variant, must be of type @tmc_config_type.
> * @memwidth: width of the memory interface databus, in bytes.
> @@ -198,6 +201,7 @@ struct tmc_drvdata {
> };
> u32 len;
> u32 size;
> + u32 max_burst_size;
> u32 mode;
> enum tmc_config_type config_type;
> enum tmc_mem_intf_width memwidth;
> --
> 2.25.1
>
Reviewed-by: Mike Leach <mike.leach at linaro.org>
--
Mike Leach
Principal Engineer, ARM Ltd.
Manchester Design Centre. UK
More information about the linux-arm-kernel
mailing list