ASoC: SOF: amd: Add trace logger support
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> Link: https://lore.kernel.org/r/20211117093734.17407-13-daniel.baluta@oss.nxp.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
efb931cdc4
commit
4627421fb8
|
@ -4,7 +4,7 @@
|
||||||
#
|
#
|
||||||
# Copyright(c) 2021 Advanced Micro Devices, Inc. All rights reserved.
|
# 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
|
snd-sof-amd-renoir-objs := pci-rn.o renoir.o
|
||||||
|
|
||||||
obj-$(CONFIG_SND_SOC_SOF_AMD_COMMON) += snd-sof-amd-acp.o
|
obj-$(CONFIG_SND_SOC_SOF_AMD_COMMON) += snd-sof-amd-acp.o
|
||||||
|
|
|
@ -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);
|
|
@ -139,6 +139,7 @@ struct acp_dev_data {
|
||||||
u8 *data_buf;
|
u8 *data_buf;
|
||||||
struct dma_descriptor dscr_info[ACP_MAX_DESC];
|
struct dma_descriptor dscr_info[ACP_MAX_DESC];
|
||||||
struct acp_dsp_stream stream_buf[ACP_MAX_STREAM];
|
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);
|
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 */
|
/* Machine configuration */
|
||||||
int snd_amd_acp_find_config(struct pci_dev *pci);
|
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
|
#endif
|
||||||
|
|
|
@ -173,6 +173,10 @@ const struct snd_sof_dsp_ops sof_renoir_ops = {
|
||||||
.machine_select = amd_sof_machine_select,
|
.machine_select = amd_sof_machine_select,
|
||||||
.machine_register = sof_machine_register,
|
.machine_register = sof_machine_register,
|
||||||
.machine_unregister = sof_machine_unregister,
|
.machine_unregister = sof_machine_unregister,
|
||||||
|
|
||||||
|
/* Trace Logger */
|
||||||
|
.trace_init = acp_sof_trace_init,
|
||||||
|
.trace_release = acp_sof_trace_release,
|
||||||
};
|
};
|
||||||
EXPORT_SYMBOL(sof_renoir_ops);
|
EXPORT_SYMBOL(sof_renoir_ops);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue