xref: /kernel/linux/linux-6.6/sound/soc/sof/trace.c (revision 62306a36)
1// SPDX-License-Identifier: GPL-2.0-only
2//
3// Copyright(c) 2022 Intel Corporation. All rights reserved.
4
5#include "sof-priv.h"
6
7int sof_fw_trace_init(struct snd_sof_dev *sdev)
8{
9	const struct sof_ipc_fw_tracing_ops *fw_tracing = sof_ipc_get_ops(sdev, fw_tracing);
10
11	if (!fw_tracing) {
12		dev_info(sdev->dev, "Firmware tracing is not available\n");
13		sdev->fw_trace_is_supported = false;
14
15		return 0;
16	}
17
18	return fw_tracing->init(sdev);
19}
20
21void sof_fw_trace_free(struct snd_sof_dev *sdev)
22{
23	if (!sdev->fw_trace_is_supported)
24		return;
25
26	if (sdev->ipc->ops->fw_tracing->free)
27		sdev->ipc->ops->fw_tracing->free(sdev);
28}
29
30void sof_fw_trace_fw_crashed(struct snd_sof_dev *sdev)
31{
32	if (!sdev->fw_trace_is_supported)
33		return;
34
35	if (sdev->ipc->ops->fw_tracing->fw_crashed)
36		sdev->ipc->ops->fw_tracing->fw_crashed(sdev);
37}
38
39void sof_fw_trace_suspend(struct snd_sof_dev *sdev, pm_message_t pm_state)
40{
41	if (!sdev->fw_trace_is_supported)
42		return;
43
44	sdev->ipc->ops->fw_tracing->suspend(sdev, pm_state);
45}
46
47int sof_fw_trace_resume(struct snd_sof_dev *sdev)
48{
49	if (!sdev->fw_trace_is_supported)
50		return 0;
51
52	return sdev->ipc->ops->fw_tracing->resume(sdev);
53}
54