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