summaryrefslogtreecommitdiff
path: root/inc
diff options
context:
space:
mode:
authorHsiu-Chang Chen <hsiuchangchen@google.com>2021-11-23 19:05:16 +0800
committerVictor Hsu <hsuvictor@google.com>2021-12-13 17:02:33 +0800
commitaa8d11a216b3aa69ba637fc2118c50fb91cd09ab (patch)
tree2df1873f801feb777b64cdb03cf934647a9cc1dc /inc
parent749813d67d19088575e70e142343b60ffc1bd482 (diff)
downloadcnss2-aa8d11a216b3aa69ba637fc2118c50fb91cd09ab.tar.gz
wcn6740: Implement wlan coredump feature
Bug: 204519778 Change-Id: Ic85052cd12d8e5b02637044998267a39795631b8
Diffstat (limited to 'inc')
-rw-r--r--inc/memory_dump.h135
-rw-r--r--inc/qcom_ramdump.h49
2 files changed, 184 insertions, 0 deletions
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 <linux/errno.h>
+#include <linux/types.h>
+
+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 <linux/kernel.h>
+#include <linux/firmware.h>
+
+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