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. All rights reserved. |
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 | |