blob: a962a16535c4524d4bbe67650ac85243565b76e3 [file] [log] [blame]
Tingwei Zhang525f1032018-03-05 19:28:08 +08001/* Copyright (c) 2012, 2014-2018, The Linux Foundation. All rights reserved.
Satyajit Desai92d6e0c2016-08-08 18:01:05 -07002 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#ifndef __MSM_MEMORY_DUMP_H
14#define __MSM_MEMORY_DUMP_H
15
16#include <linux/types.h>
17
18enum dump_client_type {
19 MSM_CPU_CTXT = 0,
20 MSM_L1_CACHE,
21 MSM_L2_CACHE,
22 MSM_OCMEM,
23 MSM_TMC_ETFETB,
24 MSM_ETM0_REG,
25 MSM_ETM1_REG,
26 MSM_ETM2_REG,
27 MSM_ETM3_REG,
28 MSM_TMC0_REG, /* TMC_ETR */
29 MSM_TMC1_REG, /* TMC_ETF */
30 MSM_LOG_BUF,
31 MSM_LOG_BUF_FIRST_IDX,
32 MAX_NUM_CLIENTS,
33};
34
35struct msm_client_dump {
36 enum dump_client_type id;
37 unsigned long start_addr;
38 unsigned long end_addr;
39};
40
41#ifdef CONFIG_QCOM_MEMORY_DUMP
42extern int msm_dump_tbl_register(struct msm_client_dump *client_entry);
43#else
44static inline int msm_dump_tbl_register(struct msm_client_dump *entry)
45{
46 return -EIO;
47}
48#endif
49
50
51#if defined(CONFIG_QCOM_MEMORY_DUMP) || defined(CONFIG_QCOM_MEMORY_DUMP_V2)
52extern uint32_t msm_dump_table_version(void);
53#else
54static inline uint32_t msm_dump_table_version(void)
55{
56 return 0;
57}
58#endif
59
60#define MSM_DUMP_MAKE_VERSION(ma, mi) ((ma << 20) | mi)
61#define MSM_DUMP_MAJOR(val) (val >> 20)
62#define MSM_DUMP_MINOR(val) (val & 0xFFFFF)
63
64
Channagoud Kadabie5f8bcf2017-05-31 14:13:49 -070065#define MAX_NUM_ENTRIES 0x150
Satyajit Desai92d6e0c2016-08-08 18:01:05 -070066
67enum msm_dump_data_ids {
68 MSM_DUMP_DATA_CPU_CTX = 0x00,
69 MSM_DUMP_DATA_L1_INST_CACHE = 0x60,
70 MSM_DUMP_DATA_L1_DATA_CACHE = 0x80,
71 MSM_DUMP_DATA_ETM_REG = 0xA0,
72 MSM_DUMP_DATA_L2_CACHE = 0xC0,
73 MSM_DUMP_DATA_L3_CACHE = 0xD0,
74 MSM_DUMP_DATA_OCMEM = 0xE0,
75 MSM_DUMP_DATA_CNSS_WLAN = 0xE1,
76 MSM_DUMP_DATA_WIGIG = 0xE2,
77 MSM_DUMP_DATA_PMIC = 0xE4,
78 MSM_DUMP_DATA_DBGUI_REG = 0xE5,
79 MSM_DUMP_DATA_DCC_REG = 0xE6,
80 MSM_DUMP_DATA_DCC_SRAM = 0xE7,
81 MSM_DUMP_DATA_MISC = 0xE8,
82 MSM_DUMP_DATA_VSENSE = 0xE9,
83 MSM_DUMP_DATA_RPM = 0xEA,
84 MSM_DUMP_DATA_SCANDUMP = 0xEB,
Satyajit Desaia6cc2732017-04-04 14:30:41 -070085 MSM_DUMP_DATA_RPMH = 0xEC,
Channagoud Kadabi28efdd52017-11-06 11:37:08 -080086 MSM_DUMP_DATA_FCM = 0xEE,
Lingutla Chandrasekhara38f1392017-09-12 19:47:22 +053087 MSM_DUMP_DATA_POWER_REGS = 0xED,
Satyajit Desai92d6e0c2016-08-08 18:01:05 -070088 MSM_DUMP_DATA_TMC_ETF = 0xF0,
Satyajit Desai267d8572017-10-26 15:21:07 -070089 MSM_DUMP_DATA_TPDM_SWAO_MCMB = 0xF2,
Tingwei Zhang525f1032018-03-05 19:28:08 +080090 MSM_DUMP_DATA_TMC_ETR_REG = 0x100,
91 MSM_DUMP_DATA_TMC_ETF_REG = 0x101,
Satyajit Desai92d6e0c2016-08-08 18:01:05 -070092 MSM_DUMP_DATA_LOG_BUF = 0x110,
93 MSM_DUMP_DATA_LOG_BUF_FIRST_IDX = 0x111,
Satyajit Desaia6cc2732017-04-04 14:30:41 -070094 MSM_DUMP_DATA_SCANDUMP_PER_CPU = 0x130,
Channagoud Kadabie5f8bcf2017-05-31 14:13:49 -070095 MSM_DUMP_DATA_LLCC_PER_INSTANCE = 0x140,
Satyajit Desai92d6e0c2016-08-08 18:01:05 -070096 MSM_DUMP_DATA_MAX = MAX_NUM_ENTRIES,
97};
98
99enum msm_dump_table_ids {
100 MSM_DUMP_TABLE_APPS,
101 MSM_DUMP_TABLE_MAX = MAX_NUM_ENTRIES,
102};
103
104enum msm_dump_type {
105 MSM_DUMP_TYPE_DATA,
106 MSM_DUMP_TYPE_TABLE,
107};
108
109struct msm_dump_data {
110 uint32_t version;
111 uint32_t magic;
112 char name[32];
113 uint64_t addr;
114 uint64_t len;
115 uint32_t reserved;
116};
117
118struct msm_dump_entry {
119 uint32_t id;
120 char name[32];
121 uint32_t type;
122 uint64_t addr;
123};
124
Tingwei Zhang525f1032018-03-05 19:28:08 +0800125struct dump_vaddr_entry {
126 uint32_t id;
127 void *dump_vaddr;
128 struct msm_dump_data *dump_data_vaddr;
129};
130
131struct msm_mem_dump_vaddr_tbl {
132 uint8_t num_node;
133 struct dump_vaddr_entry *entries;
134};
135
Satyajit Desai92d6e0c2016-08-08 18:01:05 -0700136#ifdef CONFIG_QCOM_MEMORY_DUMP_V2
137extern int msm_dump_data_register(enum msm_dump_table_ids id,
138 struct msm_dump_entry *entry);
Satyajit Desai9276f8342017-10-26 15:01:55 -0700139
Tingwei Zhang525f1032018-03-05 19:28:08 +0800140extern struct dump_vaddr_entry *get_msm_dump_ptr(enum msm_dump_data_ids id);
Satyajit Desai92d6e0c2016-08-08 18:01:05 -0700141#else
142static inline int msm_dump_data_register(enum msm_dump_table_ids id,
143 struct msm_dump_entry *entry)
144{
145 return -EINVAL;
146}
Satyajit Desai9276f8342017-10-26 15:01:55 -0700147
148static inline void *get_msm_dump_ptr(enum msm_dump_data_ids id)
149{
150 return NULL;
151}
Satyajit Desai92d6e0c2016-08-08 18:01:05 -0700152#endif
153
154#endif