Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/soc/intel/avs/debug.h
29270 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* Copyright(c) 2024-2025 Intel Corporation
4
*
5
* Authors: Cezary Rojewski <[email protected]>
6
* Amadeusz Slawinski <[email protected]>
7
*/
8
9
#ifndef __SOUND_SOC_INTEL_AVS_DEBUG_H
10
#define __SOUND_SOC_INTEL_AVS_DEBUG_H
11
12
#include "messages.h"
13
#include "registers.h"
14
15
struct avs_dev;
16
17
#define avs_log_buffer_size(adev) \
18
((adev)->fw_cfg.trace_log_bytes / (adev)->hw_cfg.dsp_cores)
19
20
#define avs_log_buffer_addr(adev, core) \
21
({ \
22
s32 __offset = avs_dsp_op(adev, log_buffer_offset, core); \
23
(__offset < 0) ? NULL : \
24
(avs_sram_addr(adev, AVS_DEBUG_WINDOW) + __offset); \
25
})
26
27
static inline int avs_log_buffer_status_locked(struct avs_dev *adev, union avs_notify_msg *msg)
28
{
29
unsigned long flags;
30
int ret;
31
32
spin_lock_irqsave(&adev->trace_lock, flags);
33
ret = avs_dsp_op(adev, log_buffer_status, msg);
34
spin_unlock_irqrestore(&adev->trace_lock, flags);
35
36
return ret;
37
}
38
39
struct avs_apl_log_buffer_layout {
40
u32 read_ptr;
41
u32 write_ptr;
42
u8 buffer[];
43
} __packed;
44
static_assert(sizeof(struct avs_apl_log_buffer_layout) == 8);
45
46
#define avs_apl_log_payload_size(adev) \
47
(avs_log_buffer_size(adev) - sizeof(struct avs_apl_log_buffer_layout))
48
49
#define avs_apl_log_payload_addr(addr) \
50
(addr + sizeof(struct avs_apl_log_buffer_layout))
51
52
#ifdef CONFIG_DEBUG_FS
53
int avs_register_probe_component(struct avs_dev *adev, const char *name);
54
55
#define AVS_SET_ENABLE_LOGS_OP(name) \
56
.enable_logs = avs_##name##_enable_logs
57
58
bool avs_logging_fw(struct avs_dev *adev);
59
void avs_dump_fw_log(struct avs_dev *adev, const void __iomem *src, unsigned int len);
60
void avs_dump_fw_log_wakeup(struct avs_dev *adev, const void __iomem *src, unsigned int len);
61
62
void avs_debugfs_init(struct avs_dev *adev);
63
void avs_debugfs_exit(struct avs_dev *adev);
64
65
#else
66
static inline int avs_register_probe_component(struct avs_dev *adev, const char *name)
67
{
68
return -EOPNOTSUPP;
69
}
70
71
#define AVS_SET_ENABLE_LOGS_OP(name)
72
73
static inline bool avs_logging_fw(struct avs_dev *adev)
74
{
75
return false;
76
}
77
78
static inline void avs_dump_fw_log(struct avs_dev *adev, const void __iomem *src, unsigned int len)
79
{
80
}
81
82
static inline void avs_dump_fw_log_wakeup(struct avs_dev *adev, const void __iomem *src,
83
unsigned int len)
84
{
85
}
86
87
static inline void avs_debugfs_init(struct avs_dev *adev) { }
88
static inline void avs_debugfs_exit(struct avs_dev *adev) { }
89
#endif
90
91
#endif
92
93