| /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ | |
| /* | |
| * This file is provided under a dual BSD/GPLv2 license. When using or | |
| * redistributing this file, you may do so under either license. | |
| * | |
| * Copyright(c) 2023 Intel Corporation | |
| */ | |
| #ifndef __SOUND_SOC_SOF_IPC4_TELEMETRY_H | |
| #define __SOUND_SOC_SOF_IPC4_TELEMETRY_H | |
| /* Target code */ | |
| enum sof_ipc4_coredump_tgt_code { | |
| COREDUMP_TGT_UNKNOWN = 0, | |
| COREDUMP_TGT_X86, | |
| COREDUMP_TGT_X86_64, | |
| COREDUMP_TGT_ARM_CORTEX_M, | |
| COREDUMP_TGT_RISC_V, | |
| COREDUMP_TGT_XTENSA, | |
| }; | |
| #define COREDUMP_ARCH_HDR_ID 'A' | |
| #define COREDUMP_HDR_ID0 'Z' | |
| #define COREDUMP_HDR_ID1 'E' | |
| #define XTENSA_BLOCK_HDR_VER 2 | |
| #define XTENSA_CORE_DUMP_SEPARATOR 0x0DEC0DEB | |
| #define XTENSA_CORE_AR_REGS_COUNT 16 | |
| #define XTENSA_SOC_INTEL_ADSP 3 | |
| #define XTENSA_TOOL_CHAIN_ZEPHYR 1 | |
| #define XTENSA_TOOL_CHAIN_XCC 2 | |
| /* Coredump header */ | |
| struct sof_ipc4_coredump_hdr { | |
| /* 'Z', 'E' as identifier of file */ | |
| char id[2]; | |
| /* Identify the version of the header */ | |
| u16 hdr_version; | |
| /* Indicate which target (e.g. architecture or SoC) */ | |
| u16 tgt_code; | |
| /* Size of uintptr_t in power of 2. (e.g. 5 for 32-bit, 6 for 64-bit) */ | |
| u8 ptr_size_bits; | |
| u8 flag; | |
| /* Reason for the fatal error */ | |
| u32 reason; | |
| } __packed; | |
| /* Architecture-specific block header */ | |
| struct sof_ipc4_coredump_arch_hdr { | |
| /* COREDUMP_ARCH_HDR_ID to indicate this is a architecture-specific block */ | |
| char id; | |
| /* Identify the version of this block */ | |
| u16 hdr_version; | |
| /* Number of bytes following the header */ | |
| u16 num_bytes; | |
| } __packed; | |
| struct sof_ipc4_telemetry_slot_data { | |
| u32 separator; | |
| struct sof_ipc4_coredump_hdr hdr; | |
| struct sof_ipc4_coredump_arch_hdr arch_hdr; | |
| u32 arch_data[]; | |
| } __packed; | |
| void sof_ipc4_create_exception_debugfs_node(struct snd_sof_dev *sdev); | |
| #endif |