blob: 9b4c29c87955828f21ef95562eb378ec7ed641b5 [file] [log] [blame]
Dimitris Papastamos525c37a2017-11-13 09:49:45 +00001/*
johpow01fa59c6f2020-10-02 13:41:11 -05002 * Copyright (c) 2017-2021, ARM Limited and Contributors. All rights reserved.
Dimitris Papastamos525c37a2017-11-13 09:49:45 +00003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
Antonio Nino Diaz033b4bb2018-10-25 16:52:26 +01007#ifndef AMU_PRIVATE_H
8#define AMU_PRIVATE_H
Dimitris Papastamos525c37a2017-11-13 09:49:45 +00009
10#include <stdint.h>
11
Chris Kayf13c6b52021-05-24 21:00:07 +010012#include <lib/cassert.h>
13#include <lib/extensions/amu.h>
14#include <lib/utils_def.h>
15
16#include <platform_def.h>
17
Chris Kaya40141d2021-05-25 12:33:18 +010018#define AMU_GROUP0_MAX_COUNTERS U(16)
Chris Kayf13c6b52021-05-24 21:00:07 +010019
Chris Kay925fda42021-05-25 10:42:56 +010020#if ENABLE_AMU_AUXILIARY_COUNTERS
Chris Kayf13c6b52021-05-24 21:00:07 +010021#define AMU_GROUP1_COUNTERS_MASK U(0)
22
23/* Calculate number of group 1 counters */
24#if (AMU_GROUP1_COUNTERS_MASK & (1 << 15))
25#define AMU_GROUP1_NR_COUNTERS 16U
26#elif (AMU_GROUP1_COUNTERS_MASK & (1 << 14))
27#define AMU_GROUP1_NR_COUNTERS 15U
28#elif (AMU_GROUP1_COUNTERS_MASK & (1 << 13))
29#define AMU_GROUP1_NR_COUNTERS 14U
30#elif (AMU_GROUP1_COUNTERS_MASK & (1 << 12))
31#define AMU_GROUP1_NR_COUNTERS 13U
32#elif (AMU_GROUP1_COUNTERS_MASK & (1 << 11))
33#define AMU_GROUP1_NR_COUNTERS 12U
34#elif (AMU_GROUP1_COUNTERS_MASK & (1 << 10))
35#define AMU_GROUP1_NR_COUNTERS 11U
36#elif (AMU_GROUP1_COUNTERS_MASK & (1 << 9))
37#define AMU_GROUP1_NR_COUNTERS 10U
38#elif (AMU_GROUP1_COUNTERS_MASK & (1 << 8))
39#define AMU_GROUP1_NR_COUNTERS 9U
40#elif (AMU_GROUP1_COUNTERS_MASK & (1 << 7))
41#define AMU_GROUP1_NR_COUNTERS 8U
42#elif (AMU_GROUP1_COUNTERS_MASK & (1 << 6))
43#define AMU_GROUP1_NR_COUNTERS 7U
44#elif (AMU_GROUP1_COUNTERS_MASK & (1 << 5))
45#define AMU_GROUP1_NR_COUNTERS 6U
46#elif (AMU_GROUP1_COUNTERS_MASK & (1 << 4))
47#define AMU_GROUP1_NR_COUNTERS 5U
48#elif (AMU_GROUP1_COUNTERS_MASK & (1 << 3))
49#define AMU_GROUP1_NR_COUNTERS 4U
50#elif (AMU_GROUP1_COUNTERS_MASK & (1 << 2))
51#define AMU_GROUP1_NR_COUNTERS 3U
52#elif (AMU_GROUP1_COUNTERS_MASK & (1 << 1))
53#define AMU_GROUP1_NR_COUNTERS 2U
54#elif (AMU_GROUP1_COUNTERS_MASK & (1 << 0))
55#define AMU_GROUP1_NR_COUNTERS 1U
56#else
57#define AMU_GROUP1_NR_COUNTERS 0U
58#endif
59
60CASSERT(AMU_GROUP1_COUNTERS_MASK <= 0xffff, invalid_amu_group1_counters_mask);
Chris Kay925fda42021-05-25 10:42:56 +010061#endif
Chris Kayf13c6b52021-05-24 21:00:07 +010062
63struct amu_ctx {
Chris Kaya40141d2021-05-25 12:33:18 +010064 uint64_t group0_cnts[AMU_GROUP0_MAX_COUNTERS];
Chris Kayf13c6b52021-05-24 21:00:07 +010065#if __aarch64__
66 /* Architected event counter 1 does not have an offset register. */
Chris Kaya40141d2021-05-25 12:33:18 +010067 uint64_t group0_voffsets[AMU_GROUP0_MAX_COUNTERS-1];
Chris Kayf13c6b52021-05-24 21:00:07 +010068#endif
69
Chris Kay925fda42021-05-25 10:42:56 +010070#if ENABLE_AMU_AUXILIARY_COUNTERS
Chris Kayf13c6b52021-05-24 21:00:07 +010071 uint64_t group1_cnts[AMU_GROUP1_NR_COUNTERS];
72#if __aarch64__
73 uint64_t group1_voffsets[AMU_GROUP1_NR_COUNTERS];
74#endif
75#endif
76};
77
Alexei Fedorov7e6306b2020-07-14 08:17:56 +010078uint64_t amu_group0_cnt_read_internal(unsigned int idx);
79void amu_group0_cnt_write_internal(unsigned int idx, uint64_t val);
Dimitris Papastamos525c37a2017-11-13 09:49:45 +000080
Chris Kay925fda42021-05-25 10:42:56 +010081#if ENABLE_AMU_AUXILIARY_COUNTERS
Alexei Fedorov7e6306b2020-07-14 08:17:56 +010082uint64_t amu_group1_cnt_read_internal(unsigned int idx);
83void amu_group1_cnt_write_internal(unsigned int idx, uint64_t val);
84void amu_group1_set_evtype_internal(unsigned int idx, unsigned int val);
Chris Kay925fda42021-05-25 10:42:56 +010085#endif
Dimitris Papastamos525c37a2017-11-13 09:49:45 +000086
johpow01fa59c6f2020-10-02 13:41:11 -050087#if __aarch64__
88uint64_t amu_group0_voffset_read_internal(unsigned int idx);
89void amu_group0_voffset_write_internal(unsigned int idx, uint64_t val);
90
Chris Kay925fda42021-05-25 10:42:56 +010091#if ENABLE_AMU_AUXILIARY_COUNTERS
johpow01fa59c6f2020-10-02 13:41:11 -050092uint64_t amu_group1_voffset_read_internal(unsigned int idx);
93void amu_group1_voffset_write_internal(unsigned int idx, uint64_t val);
94#endif
Chris Kay925fda42021-05-25 10:42:56 +010095#endif
johpow01fa59c6f2020-10-02 13:41:11 -050096
Antonio Nino Diaz033b4bb2018-10-25 16:52:26 +010097#endif /* AMU_PRIVATE_H */