1/*
2 * Copyright 2014, General Dynamics C4 Systems
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 */
6
7#pragma once
8
9#include <config.h>
10#ifdef CONFIG_ENABLE_BENCHMARKS
11
12#define CCNT "p15, 0, %0, c15, c12, 1"
13#define PMCR "p15, 0, %0, c15, c12, 0"
14
15/* these numbers are taking from the document
16 * "Application Note 195
17 *  ARM11 performance monitor unit"
18 */
19#define PMCR_CCNT_IRQ 6
20#define PMCR_OVERFLOW_FLAG 10
21
22static inline void armv_enableOverflowIRQ(void)
23{
24    word_t val;
25    MRC(PMCR, val);
26    val |= BIT(PMCR_CCNT_IRQ);
27    MCR(PMCR, val);
28}
29
30static inline void armv_handleOverflowIRQ(void)
31{
32    word_t pmcr;
33    MRC(PMCR, pmcr);
34    pmcr |= PMCR_OVERFLOW_FLAG;
35    MCR(PMCR, pmcr);
36}
37#endif /* CONFIG_ENABLE_BENCHMARKS */
38