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