1*4f1223e8SApple OSS Distributions #pragma once 2*4f1223e8SApple OSS Distributions 3*4f1223e8SApple OSS Distributions #include <darwintest.h> 4*4f1223e8SApple OSS Distributions 5*4f1223e8SApple OSS Distributions #define TEST_ITERATIONS 10000000 6*4f1223e8SApple OSS Distributions #define ITERATIONS_BETWEEN_LOGS 100000 7*4f1223e8SApple OSS Distributions 8*4f1223e8SApple OSS Distributions #define CNTFREQ_24_MHZ 24000000ULL 9*4f1223e8SApple OSS Distributions #define CNTFREQ_1_GHZ 1000000000ULL 10*4f1223e8SApple OSS Distributions 11*4f1223e8SApple OSS Distributions #if __arm64__ 12*4f1223e8SApple OSS Distributions static void agt_test_helper(bool expect_1ghz)13*4f1223e8SApple OSS Distributionsagt_test_helper(bool expect_1ghz) 14*4f1223e8SApple OSS Distributions { 15*4f1223e8SApple OSS Distributions for (unsigned i = 0; i < TEST_ITERATIONS; i++) { 16*4f1223e8SApple OSS Distributions const uint64_t freq = __builtin_arm_rsr64("CNTFRQ_EL0"); 17*4f1223e8SApple OSS Distributions 18*4f1223e8SApple OSS Distributions if (expect_1ghz) { 19*4f1223e8SApple OSS Distributions T_QUIET; T_ASSERT_EQ(freq, CNTFREQ_1_GHZ, "Expecting CNTFRQ_EL0 reads 1 GHz"); 20*4f1223e8SApple OSS Distributions } else { 21*4f1223e8SApple OSS Distributions T_QUIET; T_ASSERT_EQ(freq, CNTFREQ_24_MHZ, "Expecting CNTFRQ_EL0 reads 24 MHz"); 22*4f1223e8SApple OSS Distributions } 23*4f1223e8SApple OSS Distributions 24*4f1223e8SApple OSS Distributions if (i % ITERATIONS_BETWEEN_LOGS == 0) { 25*4f1223e8SApple OSS Distributions T_LOG("%s: %u iterations ...", __func__, i); 26*4f1223e8SApple OSS Distributions } 27*4f1223e8SApple OSS Distributions } 28*4f1223e8SApple OSS Distributions } 29*4f1223e8SApple OSS Distributions #endif /* __arm64__ */ 30