1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Arm v8 Self-Hosted trace support.
4  *
5  * Copyright (C) 2021 ARM Ltd.
6  */
7 
8 #ifndef __CORESIGHT_SELF_HOSTED_TRACE_H
9 #define __CORESIGHT_SELF_HOSTED_TRACE_H
10 
11 #include <asm/sysreg.h>
12 
13 static inline u64 read_trfcr(void)
14 {
15 	return read_sysreg_s(SYS_TRFCR_EL1);
16 }
17 
18 static inline void write_trfcr(u64 val)
19 {
20 	write_sysreg_s(val, SYS_TRFCR_EL1);
21 	isb();
22 }
23 
24 static inline u64 cpu_prohibit_trace(void)
25 {
26 	u64 trfcr = read_trfcr();
27 
28 	/* Prohibit tracing at EL0 & the kernel EL */
29 	write_trfcr(trfcr & ~(TRFCR_ELx_ExTRE | TRFCR_ELx_E0TRE));
30 	/* Return the original value of the TRFCR */
31 	return trfcr;
32 }
33 #endif /*  __CORESIGHT_SELF_HOSTED_TRACE_H */
34