xref: /xnu-11215.61.5/tests/apple_generic_timer.h (revision 4f1223e81cd707a65cc109d0b8ad6653699da3c4)
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 Distributions agt_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