#include <config.h>
#ifdef CONFIG_ENABLE_BENCHMARKS
#include <arch/benchmark.h>
#ifdef CONFIG_ARM_ENABLE_PMU_OVERFLOW_INTERRUPT
uint64_t ccnt_num_overflows;
#endif
void
armv_init_ccnt(void)
{
uint32_t val, pmcr;
#ifdef CONFIG_ARM_ENABLE_PMU_OVERFLOW_INTERRUPT
val = BIT(31);
asm volatile (
"mcr p15, 0, %0, c9, c14, 1\n"
:
: "r" (val)
);
#endif
val = 1;
asm volatile (
"mcr p15, 0, %0, c9, c14, 0\n"
:
: "r" (val)
);
pmcr = (1 << 2) | 1;
asm volatile (
"mcr p15, 0, %0, c9, c12, 0\n"
:
: "r" (pmcr)
);
val = BIT(31);
asm volatile (
"mcr p15, 0, %0, c9, c12, 1\n"
:
: "r" (val)
);
}
#endif