diff options
| -rw-r--r-- | tools/perf/util/cs-etm.c | 112 | ||||
| -rw-r--r-- | tools/perf/util/cs-etm.h | 4 |
2 files changed, 58 insertions, 58 deletions
diff --git a/tools/perf/util/cs-etm.c b/tools/perf/util/cs-etm.c index aac07f950074..f3a6dfaf3026 100644 --- a/tools/perf/util/cs-etm.c +++ b/tools/perf/util/cs-etm.c | |||
| @@ -136,6 +136,57 @@ static void cs_etm__packet_dump(const char *pkt_string) | |||
| 136 | fflush(stdout); | 136 | fflush(stdout); |
| 137 | } | 137 | } |
| 138 | 138 | ||
| 139 | static void cs_etm__set_trace_param_etmv3(struct cs_etm_trace_params *t_params, | ||
| 140 | struct cs_etm_auxtrace *etm, int idx, | ||
| 141 | u32 etmidr) | ||
| 142 | { | ||
| 143 | u64 **metadata = etm->metadata; | ||
| 144 | |||
| 145 | t_params[idx].protocol = cs_etm__get_v7_protocol_version(etmidr); | ||
| 146 | t_params[idx].etmv3.reg_ctrl = metadata[idx][CS_ETM_ETMCR]; | ||
| 147 | t_params[idx].etmv3.reg_trc_id = metadata[idx][CS_ETM_ETMTRACEIDR]; | ||
| 148 | } | ||
| 149 | |||
| 150 | static void cs_etm__set_trace_param_etmv4(struct cs_etm_trace_params *t_params, | ||
| 151 | struct cs_etm_auxtrace *etm, int idx) | ||
| 152 | { | ||
| 153 | u64 **metadata = etm->metadata; | ||
| 154 | |||
| 155 | t_params[idx].protocol = CS_ETM_PROTO_ETMV4i; | ||
| 156 | t_params[idx].etmv4.reg_idr0 = metadata[idx][CS_ETMV4_TRCIDR0]; | ||
| 157 | t_params[idx].etmv4.reg_idr1 = metadata[idx][CS_ETMV4_TRCIDR1]; | ||
| 158 | t_params[idx].etmv4.reg_idr2 = metadata[idx][CS_ETMV4_TRCIDR2]; | ||
| 159 | t_params[idx].etmv4.reg_idr8 = metadata[idx][CS_ETMV4_TRCIDR8]; | ||
| 160 | t_params[idx].etmv4.reg_configr = metadata[idx][CS_ETMV4_TRCCONFIGR]; | ||
| 161 | t_params[idx].etmv4.reg_traceidr = metadata[idx][CS_ETMV4_TRCTRACEIDR]; | ||
| 162 | } | ||
| 163 | |||
| 164 | static int cs_etm__init_trace_params(struct cs_etm_trace_params *t_params, | ||
| 165 | struct cs_etm_auxtrace *etm) | ||
| 166 | { | ||
| 167 | int i; | ||
| 168 | u32 etmidr; | ||
| 169 | u64 architecture; | ||
| 170 | |||
| 171 | for (i = 0; i < etm->num_cpu; i++) { | ||
| 172 | architecture = etm->metadata[i][CS_ETM_MAGIC]; | ||
| 173 | |||
| 174 | switch (architecture) { | ||
| 175 | case __perf_cs_etmv3_magic: | ||
| 176 | etmidr = etm->metadata[i][CS_ETM_ETMIDR]; | ||
| 177 | cs_etm__set_trace_param_etmv3(t_params, etm, i, etmidr); | ||
| 178 | break; | ||
| 179 | case __perf_cs_etmv4_magic: | ||
| 180 | cs_etm__set_trace_param_etmv4(t_params, etm, i); | ||
| 181 | break; | ||
| 182 | default: | ||
| 183 | return -EINVAL; | ||
| 184 | } | ||
| 185 | } | ||
| 186 | |||
| 187 | return 0; | ||
| 188 | } | ||
| 189 | |||
| 139 | static int cs_etm__init_decoder_params(struct cs_etm_decoder_params *d_params, | 190 | static int cs_etm__init_decoder_params(struct cs_etm_decoder_params *d_params, |
| 140 | struct cs_etm_queue *etmq, | 191 | struct cs_etm_queue *etmq, |
| 141 | enum cs_etm_decoder_operation mode) | 192 | enum cs_etm_decoder_operation mode) |
| @@ -161,7 +212,7 @@ out: | |||
| 161 | static void cs_etm__dump_event(struct cs_etm_auxtrace *etm, | 212 | static void cs_etm__dump_event(struct cs_etm_auxtrace *etm, |
| 162 | struct auxtrace_buffer *buffer) | 213 | struct auxtrace_buffer *buffer) |
| 163 | { | 214 | { |
| 164 | int i, ret; | 215 | int ret; |
| 165 | const char *color = PERF_COLOR_BLUE; | 216 | const char *color = PERF_COLOR_BLUE; |
| 166 | struct cs_etm_decoder_params d_params; | 217 | struct cs_etm_decoder_params d_params; |
| 167 | struct cs_etm_trace_params *t_params; | 218 | struct cs_etm_trace_params *t_params; |
| @@ -179,33 +230,8 @@ static void cs_etm__dump_event(struct cs_etm_auxtrace *etm, | |||
| 179 | if (!t_params) | 230 | if (!t_params) |
| 180 | return; | 231 | return; |
| 181 | 232 | ||
| 182 | for (i = 0; i < etm->num_cpu; i++) { | 233 | if (cs_etm__init_trace_params(t_params, etm)) |
| 183 | if (etm->metadata[i][CS_ETM_MAGIC] == __perf_cs_etmv3_magic) { | 234 | goto out_free; |
| 184 | u32 etmidr = etm->metadata[i][CS_ETM_ETMIDR]; | ||
| 185 | |||
| 186 | t_params[i].protocol = | ||
| 187 | cs_etm__get_v7_protocol_version(etmidr); | ||
| 188 | t_params[i].etmv3.reg_ctrl = | ||
| 189 | etm->metadata[i][CS_ETM_ETMCR]; | ||
| 190 | t_params[i].etmv3.reg_trc_id = | ||
| 191 | etm->metadata[i][CS_ETM_ETMTRACEIDR]; | ||
| 192 | } else if (etm->metadata[i][CS_ETM_MAGIC] == | ||
| 193 | __perf_cs_etmv4_magic) { | ||
| 194 | t_params[i].protocol = CS_ETM_PROTO_ETMV4i; | ||
| 195 | t_params[i].etmv4.reg_idr0 = | ||
| 196 | etm->metadata[i][CS_ETMV4_TRCIDR0]; | ||
| 197 | t_params[i].etmv4.reg_idr1 = | ||
| 198 | etm->metadata[i][CS_ETMV4_TRCIDR1]; | ||
| 199 | t_params[i].etmv4.reg_idr2 = | ||
| 200 | etm->metadata[i][CS_ETMV4_TRCIDR2]; | ||
| 201 | t_params[i].etmv4.reg_idr8 = | ||
| 202 | etm->metadata[i][CS_ETMV4_TRCIDR8]; | ||
| 203 | t_params[i].etmv4.reg_configr = | ||
| 204 | etm->metadata[i][CS_ETMV4_TRCCONFIGR]; | ||
| 205 | t_params[i].etmv4.reg_traceidr = | ||
| 206 | etm->metadata[i][CS_ETMV4_TRCTRACEIDR]; | ||
| 207 | } | ||
| 208 | } | ||
| 209 | 235 | ||
| 210 | /* Set decoder parameters to simply print the trace packets */ | 236 | /* Set decoder parameters to simply print the trace packets */ |
| 211 | if (cs_etm__init_decoder_params(&d_params, NULL, | 237 | if (cs_etm__init_decoder_params(&d_params, NULL, |
| @@ -382,7 +408,6 @@ static u32 cs_etm__mem_access(struct cs_etm_queue *etmq, u64 address, | |||
| 382 | static struct cs_etm_queue *cs_etm__alloc_queue(struct cs_etm_auxtrace *etm, | 408 | static struct cs_etm_queue *cs_etm__alloc_queue(struct cs_etm_auxtrace *etm, |
| 383 | unsigned int queue_nr) | 409 | unsigned int queue_nr) |
| 384 | { | 410 | { |
| 385 | int i; | ||
| 386 | struct cs_etm_decoder_params d_params; | 411 | struct cs_etm_decoder_params d_params; |
| 387 | struct cs_etm_trace_params *t_params = NULL; | 412 | struct cs_etm_trace_params *t_params = NULL; |
| 388 | struct cs_etm_queue *etmq; | 413 | struct cs_etm_queue *etmq; |
| @@ -431,33 +456,8 @@ static struct cs_etm_queue *cs_etm__alloc_queue(struct cs_etm_auxtrace *etm, | |||
| 431 | if (!t_params) | 456 | if (!t_params) |
| 432 | goto out_free; | 457 | goto out_free; |
| 433 | 458 | ||
| 434 | for (i = 0; i < etm->num_cpu; i++) { | 459 | if (cs_etm__init_trace_params(t_params, etm)) |
| 435 | if (etm->metadata[i][CS_ETM_MAGIC] == __perf_cs_etmv3_magic) { | 460 | goto out_free; |
| 436 | u32 etmidr = etm->metadata[i][CS_ETM_ETMIDR]; | ||
| 437 | |||
| 438 | t_params[i].protocol = | ||
| 439 | cs_etm__get_v7_protocol_version(etmidr); | ||
| 440 | t_params[i].etmv3.reg_ctrl = | ||
| 441 | etm->metadata[i][CS_ETM_ETMCR]; | ||
| 442 | t_params[i].etmv3.reg_trc_id = | ||
| 443 | etm->metadata[i][CS_ETM_ETMTRACEIDR]; | ||
| 444 | } else if (etm->metadata[i][CS_ETM_MAGIC] == | ||
| 445 | __perf_cs_etmv4_magic) { | ||
| 446 | t_params[i].protocol = CS_ETM_PROTO_ETMV4i; | ||
| 447 | t_params[i].etmv4.reg_idr0 = | ||
| 448 | etm->metadata[i][CS_ETMV4_TRCIDR0]; | ||
| 449 | t_params[i].etmv4.reg_idr1 = | ||
| 450 | etm->metadata[i][CS_ETMV4_TRCIDR1]; | ||
| 451 | t_params[i].etmv4.reg_idr2 = | ||
| 452 | etm->metadata[i][CS_ETMV4_TRCIDR2]; | ||
| 453 | t_params[i].etmv4.reg_idr8 = | ||
| 454 | etm->metadata[i][CS_ETMV4_TRCIDR8]; | ||
| 455 | t_params[i].etmv4.reg_configr = | ||
| 456 | etm->metadata[i][CS_ETMV4_TRCCONFIGR]; | ||
| 457 | t_params[i].etmv4.reg_traceidr = | ||
| 458 | etm->metadata[i][CS_ETMV4_TRCTRACEIDR]; | ||
| 459 | } | ||
| 460 | } | ||
| 461 | 461 | ||
| 462 | /* Set decoder parameters to simply print the trace packets */ | 462 | /* Set decoder parameters to simply print the trace packets */ |
| 463 | if (cs_etm__init_decoder_params(&d_params, etmq, | 463 | if (cs_etm__init_decoder_params(&d_params, etmq, |
diff --git a/tools/perf/util/cs-etm.h b/tools/perf/util/cs-etm.h index d76126e0e3d0..0e97c196147a 100644 --- a/tools/perf/util/cs-etm.h +++ b/tools/perf/util/cs-etm.h | |||
| @@ -105,8 +105,8 @@ struct intlist *traceid_list; | |||
| 105 | 105 | ||
| 106 | #define CS_ETM_HEADER_SIZE (CS_HEADER_VERSION_0_MAX * sizeof(u64)) | 106 | #define CS_ETM_HEADER_SIZE (CS_HEADER_VERSION_0_MAX * sizeof(u64)) |
| 107 | 107 | ||
| 108 | static const u64 __perf_cs_etmv3_magic = 0x3030303030303030ULL; | 108 | #define __perf_cs_etmv3_magic 0x3030303030303030ULL |
| 109 | static const u64 __perf_cs_etmv4_magic = 0x4040404040404040ULL; | 109 | #define __perf_cs_etmv4_magic 0x4040404040404040ULL |
| 110 | #define CS_ETMV3_PRIV_SIZE (CS_ETM_PRIV_MAX * sizeof(u64)) | 110 | #define CS_ETMV3_PRIV_SIZE (CS_ETM_PRIV_MAX * sizeof(u64)) |
| 111 | #define CS_ETMV4_PRIV_SIZE (CS_ETMV4_PRIV_MAX * sizeof(u64)) | 111 | #define CS_ETMV4_PRIV_SIZE (CS_ETMV4_PRIV_MAX * sizeof(u64)) |
| 112 | 112 | ||
