lkml.org 
[lkml]   [2021]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 12/21] ASoC: SOF: amd: Add trace logger support
    Date
    From: V sujith kumar Reddy <vsreddy@amd.com>

    Add trace support and configure trace stream for ACP firmware.

    Signed-off-by: Vishnuvardhanrao Ravuapati <vishnuvardhanrao.ravulapati@amd.com>
    Signed-off-by: V sujith kumar Reddy <vsreddy@amd.com>
    Reviewed-by: Bard Liao <bard.liao@intel.com>
    Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
    Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
    ---
    sound/soc/sof/amd/Makefile | 2 +-
    sound/soc/sof/amd/acp-trace.c | 84 +++++++++++++++++++++++++++++++++++
    sound/soc/sof/amd/acp.h | 5 +++
    sound/soc/sof/amd/renoir.c | 4 ++
    4 files changed, 94 insertions(+), 1 deletion(-)
    create mode 100644 sound/soc/sof/amd/acp-trace.c

    diff --git a/sound/soc/sof/amd/Makefile b/sound/soc/sof/amd/Makefile
    index b27ce50014b8..7b9f1a0af3c8 100644
    --- a/sound/soc/sof/amd/Makefile
    +++ b/sound/soc/sof/amd/Makefile
    @@ -4,7 +4,7 @@
    #
    # Copyright(c) 2021 Advanced Micro Devices, Inc. All rights reserved.

    -snd-sof-amd-acp-objs := acp.o acp-loader.o acp-ipc.o acp-pcm.o acp-stream.o
    +snd-sof-amd-acp-objs := acp.o acp-loader.o acp-ipc.o acp-pcm.o acp-stream.o acp-trace.o
    snd-sof-amd-renoir-objs := pci-rn.o renoir.o

    obj-$(CONFIG_SND_SOC_SOF_AMD_COMMON) += snd-sof-amd-acp.o
    diff --git a/sound/soc/sof/amd/acp-trace.c b/sound/soc/sof/amd/acp-trace.c
    new file mode 100644
    index 000000000000..fa4da8947186
    --- /dev/null
    +++ b/sound/soc/sof/amd/acp-trace.c
    @@ -0,0 +1,84 @@
    +// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
    +//
    +// This file is provided under a dual BSD/GPLv2 license. When using or
    +// redistributing this file, you may do so under either license.
    +//
    +// Copyright(c) 2021 Advanced Micro Devices, Inc. All rights reserved.
    +//
    +// Authors: Vishnuvardhanrao Ravuapati <vishnuvardhanrao.ravulapati@amd.com>
    +// V Sujith Kumar Reddy <Vsujithkumar.Reddy@amd.com>
    +
    +/*This file support Host TRACE Logger driver callback for SOF FW */
    +
    +#include "acp.h"
    +
    +#define ACP_LOGGER_STREAM 8
    +#define NUM_PAGES 16
    +
    +int acp_sof_trace_release(struct snd_sof_dev *sdev)
    +{
    + struct acp_dsp_stream *stream;
    + struct acp_dev_data *adata;
    + int ret;
    +
    + adata = sdev->pdata->hw_pdata;
    + stream = adata->dtrace_stream;
    + ret = acp_dsp_stream_put(sdev, stream);
    + if (ret < 0) {
    + dev_err(sdev->dev, "Failed to release trace stream\n");
    + return ret;
    + }
    +
    + adata->dtrace_stream = NULL;
    + return 0;
    +}
    +EXPORT_SYMBOL_NS(acp_sof_trace_release, SND_SOC_SOF_AMD_COMMON);
    +
    +static int acp_sof_trace_prepare(struct snd_sof_dev *sdev,
    + struct sof_ipc_dma_trace_params_ext *params)
    +{
    + struct acp_dsp_stream *stream;
    + struct acp_dev_data *adata;
    + int ret;
    +
    + adata = sdev->pdata->hw_pdata;
    + stream = adata->dtrace_stream;
    + stream->dmab = &sdev->dmatb;
    + stream->num_pages = NUM_PAGES;
    +
    + ret = acp_dsp_stream_config(sdev, stream);
    + if (ret < 0) {
    + dev_err(sdev->dev, "Failed to configure trace stream\n");
    + return ret;
    + }
    +
    + params->buffer.phy_addr = stream->reg_offset;
    + params->stream_tag = stream->stream_tag;
    +
    + return 0;
    +}
    +
    +int acp_sof_trace_init(struct snd_sof_dev *sdev, u32 *stream_tag)
    +{
    + struct sof_ipc_dma_trace_params_ext *params;
    + struct acp_dsp_stream *stream;
    + struct acp_dev_data *adata;
    + int ret;
    +
    + adata = sdev->pdata->hw_pdata;
    + stream = acp_dsp_stream_get(sdev, ACP_LOGGER_STREAM);
    + if (!stream)
    + return -ENODEV;
    +
    + adata->dtrace_stream = stream;
    + params = container_of(stream_tag, struct sof_ipc_dma_trace_params_ext, stream_tag);
    + ret = acp_sof_trace_prepare(sdev, params);
    + if (ret < 0) {
    + acp_dsp_stream_put(sdev, stream);
    + return ret;
    + }
    +
    + *stream_tag = stream->stream_tag;
    + return 0;
    +}
    +EXPORT_SYMBOL_NS(acp_sof_trace_init, SND_SOC_SOF_AMD_COMMON);
    diff --git a/sound/soc/sof/amd/acp.h b/sound/soc/sof/amd/acp.h
    index 5f6e9eff116a..fd923f72a01a 100644
    --- a/sound/soc/sof/amd/acp.h
    +++ b/sound/soc/sof/amd/acp.h
    @@ -139,6 +139,7 @@ struct acp_dev_data {
    u8 *data_buf;
    struct dma_descriptor dscr_info[ACP_MAX_DESC];
    struct acp_dsp_stream stream_buf[ACP_MAX_STREAM];
    + struct acp_dsp_stream *dtrace_stream;
    };

    void memcpy_to_scratch(struct snd_sof_dev *sdev, u32 offset, unsigned int *src, size_t bytes);
    @@ -197,4 +198,8 @@ extern const struct snd_sof_dsp_ops sof_renoir_ops;

    /* Machine configuration */
    int snd_amd_acp_find_config(struct pci_dev *pci);
    +
    +/* Trace */
    +int acp_sof_trace_init(struct snd_sof_dev *sdev, u32 *stream_tag);
    +int acp_sof_trace_release(struct snd_sof_dev *sdev);
    #endif
    diff --git a/sound/soc/sof/amd/renoir.c b/sound/soc/sof/amd/renoir.c
    index 3cd269bfe75d..43037109e130 100644
    --- a/sound/soc/sof/amd/renoir.c
    +++ b/sound/soc/sof/amd/renoir.c
    @@ -173,6 +173,10 @@ const struct snd_sof_dsp_ops sof_renoir_ops = {
    .machine_select = amd_sof_machine_select,
    .machine_register = sof_machine_register,
    .machine_unregister = sof_machine_unregister,
    +
    + /* Trace Logger */
    + .trace_init = acp_sof_trace_init,
    + .trace_release = acp_sof_trace_release,
    };
    EXPORT_SYMBOL(sof_renoir_ops);

    --
    2.27.0
    \
     
     \ /
      Last update: 2021-11-17 10:40    [W:4.475 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site