From aa8d11a216b3aa69ba637fc2118c50fb91cd09ab Mon Sep 17 00:00:00 2001 From: Hsiu-Chang Chen Date: Tue, 23 Nov 2021 19:05:16 +0800 Subject: wcn6740: Implement wlan coredump feature Bug: 204519778 Change-Id: Ic85052cd12d8e5b02637044998267a39795631b8 --- inc/memory_dump.h | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++ inc/qcom_ramdump.h | 49 +++++++++++++++++++ 2 files changed, 184 insertions(+) create mode 100644 inc/memory_dump.h create mode 100644 inc/qcom_ramdump.h (limited to 'inc') diff --git a/inc/memory_dump.h b/inc/memory_dump.h new file mode 100644 index 0000000..6db796b --- /dev/null +++ b/inc/memory_dump.h @@ -0,0 +1,135 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2012, 2014-2017, 2019-2020, The Linux Foundation. All rights reserved. + */ + +#ifndef __MSM_MEMORY_DUMP_H +#define __MSM_MEMORY_DUMP_H + +#include +#include + +enum dump_client_type { + MSM_CPU_CTXT = 0, + MSM_L1_CACHE, + MSM_L2_CACHE, + MSM_OCMEM, + MSM_TMC_ETFETB, + MSM_ETM0_REG, + MSM_ETM1_REG, + MSM_ETM2_REG, + MSM_ETM3_REG, + MSM_TMC0_REG, /* TMC_ETR */ + MSM_TMC1_REG, /* TMC_ETF */ + MSM_LOG_BUF, + MSM_LOG_BUF_FIRST_IDX, + MAX_NUM_CLIENTS, +}; + +struct msm_client_dump { + enum dump_client_type id; + unsigned long start_addr; + unsigned long end_addr; +}; + +#ifdef CONFIG_QCOM_MEMORY_DUMP +extern int msm_dump_tbl_register(struct msm_client_dump *client_entry); +#else +static inline int msm_dump_tbl_register(struct msm_client_dump *entry) +{ + return -EIO; +} +#endif + + +#if IS_ENABLED(CONFIG_QCOM_MEMORY_DUMP_V2) +extern uint32_t msm_dump_table_version(void); +#else +static inline uint32_t msm_dump_table_version(void) +{ + return 0; +} +#endif + +#define MSM_DUMP_MAKE_VERSION(ma, mi) ((ma << 20) | mi) +#define MSM_DUMP_MAJOR(val) (val >> 20) +#define MSM_DUMP_MINOR(val) (val & 0xFFFFF) + + +#define MAX_NUM_ENTRIES 0x150 + +enum msm_dump_data_ids { + MSM_DUMP_DATA_CPU_CTX = 0x00, + MSM_DUMP_DATA_L1_INST_CACHE = 0x60, + MSM_DUMP_DATA_L1_DATA_CACHE = 0x80, + MSM_DUMP_DATA_ETM_REG = 0xA0, + MSM_DUMP_DATA_L2_CACHE = 0xC0, + MSM_DUMP_DATA_L3_CACHE = 0xD0, + MSM_DUMP_DATA_OCMEM = 0xE0, + MSM_DUMP_DATA_CNSS_WLAN = 0xE1, + MSM_DUMP_DATA_WIGIG = 0xE2, + MSM_DUMP_DATA_PMIC = 0xE4, + MSM_DUMP_DATA_DBGUI_REG = 0xE5, + MSM_DUMP_DATA_DCC_REG = 0xE6, + MSM_DUMP_DATA_DCC_SRAM = 0xE7, + MSM_DUMP_DATA_MISC = 0xE8, + MSM_DUMP_DATA_VSENSE = 0xE9, + MSM_DUMP_DATA_RPM = 0xEA, + MSM_DUMP_DATA_SCANDUMP = 0xEB, + MSM_DUMP_DATA_RPMH = 0xEC, + MSM_DUMP_DATA_TMC_ETF = 0xF0, + MSM_DUMP_DATA_TMC_ETF_SWAO = 0xF1, + MSM_DUMP_DATA_TMC_REG = 0x100, + MSM_DUMP_DATA_TMC_ETF_SWAO_REG = 0x102, + MSM_DUMP_DATA_LOG_BUF = 0x110, + MSM_DUMP_DATA_LOG_BUF_FIRST_IDX = 0x111, + MSM_DUMP_DATA_SCANDUMP_PER_CPU = 0x130, + MSM_DUMP_DATA_LLCC_PER_INSTANCE = 0x140, + MSM_DUMP_DATA_MAX = MAX_NUM_ENTRIES, +}; + +enum msm_dump_table_ids { + MSM_DUMP_TABLE_APPS, + MSM_DUMP_TABLE_MAX = MAX_NUM_ENTRIES, +}; + +enum msm_dump_type { + MSM_DUMP_TYPE_DATA, + MSM_DUMP_TYPE_TABLE, +}; + +struct msm_dump_data { + uint32_t version; + uint32_t magic; + char name[32]; + uint64_t addr; + uint64_t len; + uint32_t reserved; +}; + +struct msm_dump_entry { + uint32_t id; + char name[32]; + uint32_t type; + uint64_t addr; +}; + +#if IS_ENABLED(CONFIG_QCOM_MEMORY_DUMP_V2) +extern int msm_dump_data_register(enum msm_dump_table_ids id, + struct msm_dump_entry *entry); +extern int msm_dump_data_register_nominidump(enum msm_dump_table_ids id, + struct msm_dump_entry *entry); +#else +static inline int msm_dump_data_register(enum msm_dump_table_ids id, + struct msm_dump_entry *entry) +{ + return -EINVAL; +} +static inline int msm_dump_data_register_nominidump(enum msm_dump_table_ids id, + struct msm_dump_entry *entry) +{ + return -EINVAL; +} +#endif + +#endif diff --git a/inc/qcom_ramdump.h b/inc/qcom_ramdump.h new file mode 100644 index 0000000..9b56dc3 --- /dev/null +++ b/inc/qcom_ramdump.h @@ -0,0 +1,49 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved. + */ + +#ifndef _QCOM_RAMDUMP_HEADER +#define _QCOM_RAMDUMP_HEADER +#include +#include + +struct device; + +struct qcom_dump_segment { + struct list_head node; + dma_addr_t da; + void *va; + size_t size; +}; + +#if IS_ENABLED(CONFIG_QCOM_RAMDUMP) +extern int qcom_elf_dump(struct list_head *segs, struct device *dev); +extern int qcom_dump(struct list_head *head, struct device *dev); +extern int qcom_fw_elf_dump(struct firmware *fw, struct device *dev); +extern bool dump_enabled(void); +#ifdef CONFIG_WCN_GOOGLE +extern void cnss_register_sscd(void); +extern void cnss_unregister_sscd(void); +extern void sscd_release(struct device *dev); +#endif +#else +static inline int qcom_elf_dump(struct list_head *segs, struct device *dev) +{ + return -ENODEV; +} +static inline int qcom_dump(struct list_head *head, struct device *dev) +{ + return -ENODEV; +} +static inline int qcom_fw_elf_dump(struct firmware *fw, struct device *dev) +{ + return -ENODEV; +} +static inline bool dump_enabled(void) +{ + return false; +} +#endif /* CONFIG_QCOM_RAMDUMP */ + +#endif -- cgit v1.2.3