| /* SPDX-License-Identifier: GPL-2.0 */ | 
 | /* | 
 |  * Copyright(C) 2015 Linaro Limited. All rights reserved. | 
 |  * Author: Mathieu Poirier <mathieu.poirier@linaro.org> | 
 |  */ | 
 |  | 
 | #ifndef _LINUX_CORESIGHT_PMU_H | 
 | #define _LINUX_CORESIGHT_PMU_H | 
 |  | 
 | #define CORESIGHT_ETM_PMU_NAME "cs_etm" | 
 | #define CORESIGHT_ETM_PMU_SEED  0x10 | 
 |  | 
 | /* | 
 |  * Below are the definition of bit offsets for perf option, and works as | 
 |  * arbitrary values for all ETM versions. | 
 |  * | 
 |  * Most of them are orignally from ETMv3.5/PTM's ETMCR config, therefore, | 
 |  * ETMv3.5/PTM doesn't define ETMCR config bits with prefix "ETM3_" and | 
 |  * directly use below macros as config bits. | 
 |  */ | 
 | #define ETM_OPT_CYCACC		12 | 
 | #define ETM_OPT_CTXTID		14 | 
 | #define ETM_OPT_CTXTID2		15 | 
 | #define ETM_OPT_TS		28 | 
 | #define ETM_OPT_RETSTK		29 | 
 |  | 
 | /* ETMv4 CONFIGR programming bits for the ETM OPTs */ | 
 | #define ETM4_CFG_BIT_CYCACC	4 | 
 | #define ETM4_CFG_BIT_CTXTID	6 | 
 | #define ETM4_CFG_BIT_VMID	7 | 
 | #define ETM4_CFG_BIT_TS		11 | 
 | #define ETM4_CFG_BIT_RETSTK	12 | 
 | #define ETM4_CFG_BIT_VMID_OPT	15 | 
 |  | 
 | static inline int coresight_get_trace_id(int cpu) | 
 | { | 
 | 	/* | 
 | 	 * A trace ID of value 0 is invalid, so let's start at some | 
 | 	 * random value that fits in 7 bits and go from there.  Since | 
 | 	 * the common convention is to have data trace IDs be I(N) + 1, | 
 | 	 * set instruction trace IDs as a function of the CPU number. | 
 | 	 */ | 
 | 	return (CORESIGHT_ETM_PMU_SEED + (cpu * 2)); | 
 | } | 
 |  | 
 | #endif |