diff --git a/riscv64/corefreqk.c b/riscv64/corefreqk.c index a228539..59f9c7a 100644 --- a/riscv64/corefreqk.c +++ b/riscv64/corefreqk.c @@ -1693,13 +1693,34 @@ static void Controller_Exit(void) static void Generic_Core_Counters_Set(union SAVE_AREA_CORE *Save, CORE_RO *Core) { -/*TODO*/ + register unsigned long long ctr_reg; + __asm__ volatile + ( + "csrr %0, scounteren" + : "=r" (Save->SCOUNTEREN) + : + : "cc", "memory" + ); + ctr_reg = Save->SCOUNTEREN | 0b101; + __asm__ volatile + ( + "csrw scounteren, %0" + : + : "r" (ctr_reg) + : "cc", "memory" + ); } static void Generic_Core_Counters_Clear(union SAVE_AREA_CORE *Save, CORE_RO *Core) { -/*TODO*/ + __asm__ volatile + ( + "csrw scounteren, %0" + : + : "r" (Save->SCOUNTEREN) + : "cc", "memory" + ); } #define Counters_Generic(Core, T) \ diff --git a/riscv64/corefreqk.h b/riscv64/corefreqk.h index cc03aaa..76f9013 100644 --- a/riscv64/corefreqk.h +++ b/riscv64/corefreqk.h @@ -155,6 +155,7 @@ typedef struct union SAVE_AREA_CORE { struct { + unsigned long long SCOUNTEREN; }; } SaveArea; #ifdef CONFIG_CPU_FREQ