18a9fd832SMathieu Poirier /* SPDX-License-Identifier: GPL-2.0 */ 2a818c563SMathieu Poirier /* 3a818c563SMathieu Poirier * Copyright(C) 2015 Linaro Limited. All rights reserved. 4a818c563SMathieu Poirier * Author: Mathieu Poirier <mathieu.poirier@linaro.org> 5a818c563SMathieu Poirier */ 6a818c563SMathieu Poirier 7a818c563SMathieu Poirier #ifndef INCLUDE__UTIL_PERF_CS_ETM_H__ 8a818c563SMathieu Poirier #define INCLUDE__UTIL_PERF_CS_ETM_H__ 9a818c563SMathieu Poirier 10440a23b3SMathieu Poirier #include "util/event.h" 11440a23b3SMathieu Poirier #include "util/session.h" 12440a23b3SMathieu Poirier 13a818c563SMathieu Poirier /* Versionning header in case things need tro change in the future. That way 14a818c563SMathieu Poirier * decoding of old snapshot is still possible. 15a818c563SMathieu Poirier */ 16a818c563SMathieu Poirier enum { 17a818c563SMathieu Poirier /* Starting with 0x0 */ 18a818c563SMathieu Poirier CS_HEADER_VERSION_0, 19a818c563SMathieu Poirier /* PMU->type (32 bit), total # of CPUs (32 bit) */ 20a818c563SMathieu Poirier CS_PMU_TYPE_CPUS, 21a818c563SMathieu Poirier CS_ETM_SNAPSHOT, 22a818c563SMathieu Poirier CS_HEADER_VERSION_0_MAX, 23a818c563SMathieu Poirier }; 24a818c563SMathieu Poirier 25a818c563SMathieu Poirier /* Beginning of header common to both ETMv3 and V4 */ 26a818c563SMathieu Poirier enum { 27a818c563SMathieu Poirier CS_ETM_MAGIC, 28a818c563SMathieu Poirier CS_ETM_CPU, 29a818c563SMathieu Poirier }; 30a818c563SMathieu Poirier 31a818c563SMathieu Poirier /* ETMv3/PTM metadata */ 32a818c563SMathieu Poirier enum { 33a818c563SMathieu Poirier /* Dynamic, configurable parameters */ 34a818c563SMathieu Poirier CS_ETM_ETMCR = CS_ETM_CPU + 1, 35a818c563SMathieu Poirier CS_ETM_ETMTRACEIDR, 36a818c563SMathieu Poirier /* RO, taken from sysFS */ 37a818c563SMathieu Poirier CS_ETM_ETMCCER, 38a818c563SMathieu Poirier CS_ETM_ETMIDR, 39a818c563SMathieu Poirier CS_ETM_PRIV_MAX, 40a818c563SMathieu Poirier }; 41a818c563SMathieu Poirier 42a818c563SMathieu Poirier /* ETMv4 metadata */ 43a818c563SMathieu Poirier enum { 44a818c563SMathieu Poirier /* Dynamic, configurable parameters */ 45a818c563SMathieu Poirier CS_ETMV4_TRCCONFIGR = CS_ETM_CPU + 1, 46a818c563SMathieu Poirier CS_ETMV4_TRCTRACEIDR, 47a818c563SMathieu Poirier /* RO, taken from sysFS */ 48a818c563SMathieu Poirier CS_ETMV4_TRCIDR0, 49a818c563SMathieu Poirier CS_ETMV4_TRCIDR1, 50a818c563SMathieu Poirier CS_ETMV4_TRCIDR2, 51a818c563SMathieu Poirier CS_ETMV4_TRCIDR8, 52a818c563SMathieu Poirier CS_ETMV4_TRCAUTHSTATUS, 53a818c563SMathieu Poirier CS_ETMV4_PRIV_MAX, 54a818c563SMathieu Poirier }; 55a818c563SMathieu Poirier 5695c6fe97SLeo Yan /* RB tree for quick conversion between traceID and metadata pointers */ 57cd8bfd8cSTor Jeremiassen struct intlist *traceid_list; 58cd8bfd8cSTor Jeremiassen 59a818c563SMathieu Poirier #define KiB(x) ((x) * 1024) 60a818c563SMathieu Poirier #define MiB(x) ((x) * 1024 * 1024) 61a818c563SMathieu Poirier 62a818c563SMathieu Poirier #define CS_ETM_HEADER_SIZE (CS_HEADER_VERSION_0_MAX * sizeof(u64)) 63a818c563SMathieu Poirier 64a818c563SMathieu Poirier static const u64 __perf_cs_etmv3_magic = 0x3030303030303030ULL; 65a818c563SMathieu Poirier static const u64 __perf_cs_etmv4_magic = 0x4040404040404040ULL; 66a818c563SMathieu Poirier #define CS_ETMV3_PRIV_SIZE (CS_ETM_PRIV_MAX * sizeof(u64)) 67a818c563SMathieu Poirier #define CS_ETMV4_PRIV_SIZE (CS_ETMV4_PRIV_MAX * sizeof(u64)) 68a818c563SMathieu Poirier 69440a23b3SMathieu Poirier #ifdef HAVE_CSTRACE_SUPPORT 70440a23b3SMathieu Poirier int cs_etm__process_auxtrace_info(union perf_event *event, 71440a23b3SMathieu Poirier struct perf_session *session); 7295c6fe97SLeo Yan int cs_etm__get_cpu(u8 trace_chan_id, int *cpu); 73440a23b3SMathieu Poirier #else 74440a23b3SMathieu Poirier static inline int 75440a23b3SMathieu Poirier cs_etm__process_auxtrace_info(union perf_event *event __maybe_unused, 76440a23b3SMathieu Poirier struct perf_session *session __maybe_unused) 77440a23b3SMathieu Poirier { 78440a23b3SMathieu Poirier return -1; 79440a23b3SMathieu Poirier } 8095c6fe97SLeo Yan 8195c6fe97SLeo Yan static inline int cs_etm__get_cpu(u8 trace_chan_id __maybe_unused, 8295c6fe97SLeo Yan int *cpu __maybe_unused) 8395c6fe97SLeo Yan { 8495c6fe97SLeo Yan return -1; 8595c6fe97SLeo Yan } 86440a23b3SMathieu Poirier #endif 87440a23b3SMathieu Poirier 88a818c563SMathieu Poirier #endif 89