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