xref: /kernel/linux/linux-6.6/sound/soc/sof/trace.c (revision 62306a36)
162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci//
362306a36Sopenharmony_ci// Copyright(c) 2022 Intel Corporation. All rights reserved.
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include "sof-priv.h"
662306a36Sopenharmony_ci
762306a36Sopenharmony_ciint sof_fw_trace_init(struct snd_sof_dev *sdev)
862306a36Sopenharmony_ci{
962306a36Sopenharmony_ci	const struct sof_ipc_fw_tracing_ops *fw_tracing = sof_ipc_get_ops(sdev, fw_tracing);
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci	if (!fw_tracing) {
1262306a36Sopenharmony_ci		dev_info(sdev->dev, "Firmware tracing is not available\n");
1362306a36Sopenharmony_ci		sdev->fw_trace_is_supported = false;
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci		return 0;
1662306a36Sopenharmony_ci	}
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci	return fw_tracing->init(sdev);
1962306a36Sopenharmony_ci}
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_civoid sof_fw_trace_free(struct snd_sof_dev *sdev)
2262306a36Sopenharmony_ci{
2362306a36Sopenharmony_ci	if (!sdev->fw_trace_is_supported)
2462306a36Sopenharmony_ci		return;
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci	if (sdev->ipc->ops->fw_tracing->free)
2762306a36Sopenharmony_ci		sdev->ipc->ops->fw_tracing->free(sdev);
2862306a36Sopenharmony_ci}
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_civoid sof_fw_trace_fw_crashed(struct snd_sof_dev *sdev)
3162306a36Sopenharmony_ci{
3262306a36Sopenharmony_ci	if (!sdev->fw_trace_is_supported)
3362306a36Sopenharmony_ci		return;
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci	if (sdev->ipc->ops->fw_tracing->fw_crashed)
3662306a36Sopenharmony_ci		sdev->ipc->ops->fw_tracing->fw_crashed(sdev);
3762306a36Sopenharmony_ci}
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_civoid sof_fw_trace_suspend(struct snd_sof_dev *sdev, pm_message_t pm_state)
4062306a36Sopenharmony_ci{
4162306a36Sopenharmony_ci	if (!sdev->fw_trace_is_supported)
4262306a36Sopenharmony_ci		return;
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci	sdev->ipc->ops->fw_tracing->suspend(sdev, pm_state);
4562306a36Sopenharmony_ci}
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciint sof_fw_trace_resume(struct snd_sof_dev *sdev)
4862306a36Sopenharmony_ci{
4962306a36Sopenharmony_ci	if (!sdev->fw_trace_is_supported)
5062306a36Sopenharmony_ci		return 0;
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci	return sdev->ipc->ops->fw_tracing->resume(sdev);
5362306a36Sopenharmony_ci}
54