Index: linux/tests/cycles.h =================================================================== --- /dev/null +++ linux/tests/cycles.h @@ -0,0 +1,30 @@ + +#define CYCLES read_pmccntr() +// #define CYCLES get_cycles() + + +static void arm_pmu_mode(bool on) +{ + u64 val = read_pmcr() & ~ARMV8_PMU_PMCR_MASK; + + val |= ARMV8_PMU_PMCR_LP | ARMV8_PMU_PMCR_P | ARMV8_PMU_PMCR_C | ARMV8_PMU_PMCR_LC; + + if (on) { + /* Enable counter */ + write_sysreg_s(0x08000000, SYS_PMCCFILTR_EL0); /* BIT 27 set. NSH */ + write_sysreg_s(0x80000000, SYS_PMINTENCLR_EL1); /* Disable Interrupt on overflow */ + write_sysreg_s(0x8000000f, SYS_PMCNTENSET_EL0); /* Enable Counters */ +// write_sysreq_s(0x00000005, SYS_PMUSERENR_EL0); /* User access allowed */ + write_sysreg_s(0x8000000f, SYS_PMOVSCLR_EL0); /* Disable and clear overflow */ + + val |= ARMV8_PMU_PMCR_E; + } + + isb(); + write_pmcr(val); + +} + +#define CYCLES_ENABLE arm_pmu_mode(true) +#define CYCLES_DISABLE arm_pmu_mode(false) +