xref: /linux/sound/soc/sof/ipc4-telemetry.h (revision 4b132aacb0768ac1e652cf517097ea6f237214b9)
1 /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
2 /*
3  * This file is provided under a dual BSD/GPLv2 license.  When using or
4  * redistributing this file, you may do so under either license.
5  *
6  * Copyright(c) 2023 Intel Corporation
7  */
8 
9 #ifndef __SOUND_SOC_SOF_IPC4_TELEMETRY_H
10 #define __SOUND_SOC_SOF_IPC4_TELEMETRY_H
11 
12 /* Target code */
13 enum sof_ipc4_coredump_tgt_code {
14 	COREDUMP_TGT_UNKNOWN = 0,
15 	COREDUMP_TGT_X86,
16 	COREDUMP_TGT_X86_64,
17 	COREDUMP_TGT_ARM_CORTEX_M,
18 	COREDUMP_TGT_RISC_V,
19 	COREDUMP_TGT_XTENSA,
20 };
21 
22 #define COREDUMP_ARCH_HDR_ID 'A'
23 #define COREDUMP_HDR_ID0 'Z'
24 #define COREDUMP_HDR_ID1 'E'
25 
26 #define XTENSA_BLOCK_HDR_VER		2
27 #define XTENSA_CORE_DUMP_SEPARATOR	0x0DEC0DEB
28 #define XTENSA_CORE_AR_REGS_COUNT	16
29 #define XTENSA_SOC_INTEL_ADSP		3
30 #define XTENSA_TOOL_CHAIN_ZEPHYR	1
31 #define XTENSA_TOOL_CHAIN_XCC		2
32 
33 /* Coredump header */
34 struct sof_ipc4_coredump_hdr {
35 	/* 'Z', 'E' as identifier of file */
36 	char id[2];
37 
38 	/* Identify the version of the header */
39 	u16 hdr_version;
40 
41 	/* Indicate which target (e.g. architecture or SoC) */
42 	u16 tgt_code;
43 
44 	/* Size of uintptr_t in power of 2. (e.g. 5 for 32-bit, 6 for 64-bit) */
45 	u8 ptr_size_bits;
46 
47 	u8 flag;
48 
49 	/* Reason for the fatal error */
50 	u32 reason;
51 } __packed;
52 
53 /* Architecture-specific block header */
54 struct sof_ipc4_coredump_arch_hdr {
55 	/* COREDUMP_ARCH_HDR_ID to indicate this is a architecture-specific block */
56 	char id;
57 
58 	/* Identify the version of this block */
59 	u16 hdr_version;
60 
61 	/* Number of bytes following the header */
62 	u16 num_bytes;
63 } __packed;
64 
65 struct sof_ipc4_telemetry_slot_data {
66 	u32 separator;
67 	struct sof_ipc4_coredump_hdr hdr;
68 	struct sof_ipc4_coredump_arch_hdr arch_hdr;
69 	u32 arch_data[];
70 } __packed;
71 
72 void sof_ipc4_create_exception_debugfs_node(struct snd_sof_dev *sdev);
73 #endif
74