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