linux-stable/sound/soc/sof/ipc4-telemetry.h
Rander Wang ab05061d25
ASoC: SOF: ipc4: add definition of telemetry slot for exception handling
Core dump includes hardware platform information, cpu registers and
exception call stack. FW saves core dump to telemetry slot in shared
memory window for host in the event of FW exception. This patch creates
exception node in debugfs for user to dump telemetry data.

Signed-off-by: Rander Wang <rander.wang@intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://lore.kernel.org/r/20230919092416.4137-5-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
2023-09-19 13:48:47 +01:00

73 lines
1.8 KiB
C

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