GNU Linux-libre 5.19-rc6-gnu
[releases.git] / drivers / hwtracing / coresight / coresight-self-hosted-trace.h
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 */