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