blob: 124cc4e83de2354ae7247cccc95738fc428265b8 [file] [log] [blame]
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02001/*
Arvind Ram Prakash13887ac2024-01-04 15:22:52 -06002 * Copyright (c) 2018-2024, Arm Limited. All rights reserved.
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
J-Alvesd708c032020-11-19 12:14:21 +00007#ifndef TEST_HELPERS_H__
8#define TEST_HELPERS_H__
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02009
Joel Hutton8790f022019-03-15 14:47:02 +000010#include <arch_features.h>
J-Alvesf7535f42021-07-30 11:58:41 +010011#include <plat_topology.h>
J-Alves8f08a052020-05-26 17:14:40 +010012#include <psci.h>
Jayanth Dodderi Chidanandb3ffd3c2023-02-13 12:15:11 +000013#include <sme.h>
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +020014#include <tftf_lib.h>
15#include <trusted_os.h>
16#include <tsp.h>
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +020017#include <uuid_utils.h>
Max Shvetsov103e0562021-02-04 16:58:31 +000018#include <uuid.h>
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +020019
20typedef struct {
21 uintptr_t addr;
22 size_t size;
23 unsigned int attr;
24 void *arg;
25} map_args_unmap_t;
26
27typedef test_result_t (*test_function_arg_t)(void *arg);
28
Deepika Bhavnanic249d5e2020-02-06 16:29:45 -060029#ifndef __aarch64__
Joel Hutton8790f022019-03-15 14:47:02 +000030#define SKIP_TEST_IF_AARCH32() \
31 do { \
32 tftf_testcase_printf("Test not supported on aarch32\n"); \
33 return TEST_RESULT_SKIPPED; \
34 } while (0)
35#else
36#define SKIP_TEST_IF_AARCH32()
37#endif
38
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +020039#define SKIP_TEST_IF_LESS_THAN_N_CLUSTERS(n) \
40 do { \
41 unsigned int clusters_cnt; \
42 clusters_cnt = tftf_get_total_clusters_count(); \
43 if (clusters_cnt < (n)) { \
44 tftf_testcase_printf( \
45 "Need at least %u clusters, only found %u\n", \
46 (n), clusters_cnt); \
47 return TEST_RESULT_SKIPPED; \
48 } \
49 } while (0)
50
51#define SKIP_TEST_IF_LESS_THAN_N_CPUS(n) \
52 do { \
53 unsigned int cpus_cnt; \
54 cpus_cnt = tftf_get_total_cpus_count(); \
55 if (cpus_cnt < (n)) { \
56 tftf_testcase_printf( \
57 "Need at least %u CPUs, only found %u\n", \
58 (n), cpus_cnt); \
59 return TEST_RESULT_SKIPPED; \
60 } \
61 } while (0)
62
63#define SKIP_TEST_IF_TRUSTED_OS_NOT_PRESENT() \
64 do { \
65 uuid_t tos_uuid; \
66 \
67 if (!is_trusted_os_present(&tos_uuid)) { \
68 tftf_testcase_printf("No Trusted OS detected\n"); \
69 return TEST_RESULT_SKIPPED; \
70 } \
71 } while (0)
72
73#define SKIP_TEST_IF_TSP_NOT_PRESENT() \
74 do { \
75 uuid_t tos_uuid; \
76 char tos_uuid_str[UUID_STR_SIZE]; \
77 \
78 if (!is_trusted_os_present(&tos_uuid)) { \
79 tftf_testcase_printf("No Trusted OS detected\n"); \
80 return TEST_RESULT_SKIPPED; \
81 } \
82 \
83 if (!uuid_equal(&tos_uuid, &tsp_uuid)) { \
84 tftf_testcase_printf( \
85 "Trusted OS is not the TSP, its UUID is: %s\n", \
86 uuid_to_str(&tos_uuid, tos_uuid_str)); \
87 return TEST_RESULT_SKIPPED; \
88 } \
89 } while (0)
90
Boyan Karatotev566f07d2024-10-25 13:31:48 +010091#define SKIP_TEST_IF_SMCCC_VERSION_LT(major, minor) \
92 do { \
93 smc_args args = {0}; \
94 smc_ret_values ret; \
95 args.fid = SMCCC_VERSION; \
96 ret = tftf_smc(&args); \
97 if ((int32_t)ret.ret0 < MAKE_SMCCC_VERSION(major, minor)) { \
98 tftf_testcase_printf( \
99 "Unexpected SMCCC version: 0x%x\n", \
100 (int)ret.ret0); \
101 return TEST_RESULT_SKIPPED; \
102 } \
103 } while (0)
104
Boyan Karatotev7b7ca222024-10-25 13:33:18 +0100105#define SKIP_TEST_IF_SMCCC_FUNC_NOT_SUPPORTED(func) \
106 do { \
107 smc_ret_values ret; \
108 smc_args args = {0}; \
109 args.fid = SMCCC_ARCH_FEATURES; \
110 args.arg1 = func; \
111 ret = tftf_smc(&args); \
112 if ((int)ret.ret0 == SMC_ARCH_CALL_NOT_SUPPORTED) { \
113 tftf_testcase_printf( \
114 #func " is not implemented\n"); \
115 return TEST_RESULT_SKIPPED; \
116 } \
117 } while (0)
118
Daniel Boulby0e4629f2021-10-26 14:01:23 +0100119#define SKIP_TEST_IF_DIT_NOT_SUPPORTED() \
120 do { \
121 if (!is_armv8_4_dit_present()) { \
122 tftf_testcase_printf( \
123 "DIT not supported\n"); \
124 return TEST_RESULT_SKIPPED; \
125 } \
126 } while (0)
127
Joel Hutton8790f022019-03-15 14:47:02 +0000128#define SKIP_TEST_IF_PAUTH_NOT_SUPPORTED() \
129 do { \
130 if (!is_armv8_3_pauth_present()) { \
131 tftf_testcase_printf( \
132 "Pointer Authentication not supported\n"); \
133 return TEST_RESULT_SKIPPED; \
134 } \
135 } while (0)
136
Jimmy Brisson90f1d5c2020-04-16 10:54:51 -0500137#define SKIP_TEST_IF_FGT_NOT_SUPPORTED() \
138 do { \
139 if (!is_armv8_6_fgt_present()) { \
140 tftf_testcase_printf( \
141 "Fine Grained Traps not supported\n"); \
142 return TEST_RESULT_SKIPPED; \
143 } \
144 } while (0)
145
Arvind Ram Prakash2f2c9592024-06-06 16:34:28 -0500146#define SKIP_TEST_IF_DEBUGV8P9_NOT_SUPPORTED() \
147 do { \
148 if (arch_get_debug_version() != \
149 ID_AA64DFR0_V8_9_DEBUG_ARCH_SUPPORTED) { \
150 tftf_testcase_printf( \
151 "Debugv8p9 not supported\n"); \
152 return TEST_RESULT_SKIPPED; \
153 } \
154 } while (0)
155
Arvind Ram Prakash94963d42024-06-13 17:19:56 -0500156#define SKIP_TEST_IF_FGT2_NOT_SUPPORTED() \
157 do { \
158 if (!is_armv8_9_fgt2_present()) { \
159 tftf_testcase_printf( \
160 "Fine Grained Traps 2 not supported\n"); \
161 return TEST_RESULT_SKIPPED; \
162 } \
163 } while (0)
164
Max Shvetsov959be332021-03-16 14:18:13 +0000165#define SKIP_TEST_IF_SVE_NOT_SUPPORTED() \
166 do { \
167 if (!is_armv8_2_sve_present()) { \
168 tftf_testcase_printf("SVE not supported\n"); \
169 return TEST_RESULT_SKIPPED; \
170 } \
171 } while (0)
172
Jimmy Brisson945095a2020-04-16 10:54:59 -0500173#define SKIP_TEST_IF_ECV_NOT_SELF_SYNC() \
174 do { \
175 if (get_armv8_6_ecv_support() != \
176 ID_AA64MMFR0_EL1_ECV_SELF_SYNCH) { \
177 tftf_testcase_printf("ARMv8.6-ECV not supported\n"); \
178 return TEST_RESULT_SKIPPED; \
179 } \
180 } while (0)
181
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200182#define SKIP_TEST_IF_MM_NOT_PRESENT() \
183 do { \
184 smc_args version_smc = { MM_VERSION_AARCH32 }; \
185 smc_ret_values smc_ret = tftf_smc(&version_smc); \
186 uint32_t version = smc_ret.ret0; \
187 \
188 if (version == (uint32_t) SMC_UNKNOWN) { \
189 tftf_testcase_printf("SPM not detected.\n"); \
190 return TEST_RESULT_SKIPPED; \
191 } \
192 } while (0)
193
Sandrine Bailleux277fb762019-10-08 12:10:45 +0200194#define SKIP_TEST_IF_MTE_SUPPORT_LESS_THAN(n) \
195 do { \
196 if (get_armv8_5_mte_support() < (n)) { \
197 tftf_testcase_printf( \
198 "Memory Tagging Extension not supported\n"); \
199 return TEST_RESULT_SKIPPED; \
200 } \
201 } while (0)
202
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200203#define SKIP_TEST_IF_MM_VERSION_LESS_THAN(major, minor) \
204 do { \
205 smc_args version_smc = { MM_VERSION_AARCH32 }; \
206 smc_ret_values smc_ret = tftf_smc(&version_smc); \
207 uint32_t version = smc_ret.ret0; \
208 \
209 if (version == (uint32_t) SMC_UNKNOWN) { \
210 tftf_testcase_printf("SPM not detected.\n"); \
211 return TEST_RESULT_SKIPPED; \
212 } \
213 \
214 if (version < MM_VERSION_FORM(major, minor)) { \
J-Alves8f08a052020-05-26 17:14:40 +0100215 tftf_testcase_printf("MM_VERSION returned %u.%u\n" \
216 "The required version is %u.%u\n", \
217 version >> MM_VERSION_MAJOR_SHIFT, \
218 version & MM_VERSION_MINOR_MASK, \
219 major, minor); \
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200220 return TEST_RESULT_SKIPPED; \
221 } \
222 \
J-Alves8f08a052020-05-26 17:14:40 +0100223 VERBOSE("MM_VERSION returned %u.%u\n", \
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200224 version >> MM_VERSION_MAJOR_SHIFT, \
225 version & MM_VERSION_MINOR_MASK); \
226 } while (0)
227
Petre-Ionut Tudorf68ebdb2019-09-18 16:13:00 +0100228#define SKIP_TEST_IF_ARCH_DEBUG_VERSION_LESS_THAN(version) \
229 do { \
Petre-Ionut Tudorf1a45f72019-10-08 16:51:45 +0100230 uint32_t debug_ver = arch_get_debug_version(); \
Petre-Ionut Tudorf68ebdb2019-09-18 16:13:00 +0100231 \
Petre-Ionut Tudorf1a45f72019-10-08 16:51:45 +0100232 if (debug_ver < version) { \
Petre-Ionut Tudorf68ebdb2019-09-18 16:13:00 +0100233 tftf_testcase_printf("Debug version returned %d\n" \
234 "The required version is %d\n", \
Petre-Ionut Tudorf1a45f72019-10-08 16:51:45 +0100235 debug_ver, \
Petre-Ionut Tudorf68ebdb2019-09-18 16:13:00 +0100236 version); \
237 return TEST_RESULT_SKIPPED; \
238 } \
239 } while (0)
240
Manish V Badarkhe87c03d12021-07-06 22:57:11 +0100241#define SKIP_TEST_IF_TRBE_NOT_SUPPORTED() \
242 do { \
Boyan Karatotev4e282422024-10-25 14:34:13 +0100243 if (!is_feat_trbe_present()) { \
Manish V Badarkhe87c03d12021-07-06 22:57:11 +0100244 tftf_testcase_printf("ARMv9-TRBE not supported\n"); \
245 return TEST_RESULT_SKIPPED; \
246 } \
247 } while (false)
248
Manish V Badarkhe2c518e52021-07-08 16:36:57 +0100249#define SKIP_TEST_IF_TRF_NOT_SUPPORTED() \
250 do { \
251 if (!get_armv8_4_trf_support()) { \
252 tftf_testcase_printf("ARMv8.4-TRF not supported\n"); \
253 return TEST_RESULT_SKIPPED; \
254 } \
255 } while (false)
256
Manish V Badarkhe6d0e1b62021-07-09 13:58:28 +0100257#define SKIP_TEST_IF_SYS_REG_TRACE_NOT_SUPPORTED() \
258 do { \
259 if (!get_armv8_0_sys_reg_trace_support()) { \
260 tftf_testcase_printf("ARMv8-system register" \
261 "trace not supported\n"); \
262 return TEST_RESULT_SKIPPED; \
263 } \
264 } while (false)
265
Manish V Badarkhe82e1a252022-01-04 13:45:31 +0000266#define SKIP_TEST_IF_AFP_NOT_SUPPORTED() \
267 do { \
268 if (!get_feat_afp_present()) { \
Manish V Badarkheb31bc752021-12-24 08:52:52 +0000269 tftf_testcase_printf("ARMv8.7-afp not supported\n"); \
Manish V Badarkhe82e1a252022-01-04 13:45:31 +0000270 return TEST_RESULT_SKIPPED; \
271 } \
272 } while (false)
273
Arvind Ram Prakash13887ac2024-01-04 15:22:52 -0600274#define SKIP_TEST_IF_MPAM_NOT_SUPPORTED() \
275 do { \
276 if(!is_feat_mpam_supported()){ \
277 tftf_testcase_printf("ARMv8.4-mpam not supported\n"); \
278 return TEST_RESULT_SKIPPED; \
279 } \
280 } while (false)
281
Federico Recanati6328fb02022-01-14 15:48:16 +0100282#ifdef __aarch64__
Federico Recanatid3749b02022-01-14 15:44:45 +0100283#define SKIP_TEST_IF_PA_SIZE_LESS_THAN(n) \
284 do { \
285 static const unsigned int pa_range_bits_arr[] = { \
286 PARANGE_0000, PARANGE_0001, PARANGE_0010, PARANGE_0011,\
287 PARANGE_0100, PARANGE_0101, PARANGE_0110 \
288 }; \
289 if (pa_range_bits_arr[get_pa_range()] < n) { \
290 tftf_testcase_printf("PA size less than %d bit\n", n); \
291 return TEST_RESULT_SKIPPED; \
292 } \
293 } while (false)
Federico Recanati6328fb02022-01-14 15:48:16 +0100294#else
295#define SKIP_TEST_IF_PA_SIZE_LESS_THAN(n) \
296 do { \
297 return TEST_RESULT_SKIPPED; \
298 } while (false)
299#endif
Federico Recanatid3749b02022-01-14 15:44:45 +0100300
johpow018c3da8b2022-01-31 18:14:41 -0600301#define SKIP_TEST_IF_BRBE_NOT_SUPPORTED() \
302 do { \
303 if (!get_feat_brbe_support()) { \
304 tftf_testcase_printf("FEAT_BRBE not supported\n"); \
305 return TEST_RESULT_SKIPPED; \
306 } \
307 } while (false)
308
Manish V Badarkheb31bc752021-12-24 08:52:52 +0000309#define SKIP_TEST_IF_WFXT_NOT_SUPPORTED() \
310 do { \
311 if (!get_feat_wfxt_present()) { \
312 tftf_testcase_printf("ARMv8.7-WFxT not supported\n"); \
313 return TEST_RESULT_SKIPPED; \
314 } \
315 } while (false)
316
Juan Pablo Conde9303f4d2022-07-25 16:38:01 -0400317#define SKIP_TEST_IF_RNG_TRAP_NOT_SUPPORTED() \
318 do { \
319 if (!is_feat_rng_trap_present()) { \
320 tftf_testcase_printf("ARMv8.5-RNG_TRAP not" \
321 "supported\n"); \
322 return TEST_RESULT_SKIPPED; \
323 } \
324 } while (false)
325
Boyan Karatotev35e3ca02022-10-10 16:39:45 +0100326#define SKIP_TEST_IF_PMUV3_NOT_SUPPORTED() \
327 do { \
328 if (!get_feat_pmuv3_supported()) { \
329 tftf_testcase_printf("FEAT_PMUv3 not supported\n"); \
330 return TEST_RESULT_SKIPPED; \
331 } \
332 } while (false)
333
Jayanth Dodderi Chidanandb3ffd3c2023-02-13 12:15:11 +0000334#define SKIP_TEST_IF_SME_NOT_SUPPORTED() \
335 do { \
336 if(!is_feat_sme_supported()) { \
337 tftf_testcase_printf("FEAT_SME not supported\n"); \
338 return TEST_RESULT_SKIPPED; \
339 } \
340 } while (false)
341
Jayanth Dodderi Chidanand95d5d272023-01-16 17:58:47 +0000342#define SKIP_TEST_IF_SME2_NOT_SUPPORTED() \
343 do { \
344 if(!is_feat_sme2_supported()) { \
345 tftf_testcase_printf("FEAT_SME2 not supported\n"); \
346 return TEST_RESULT_SKIPPED; \
347 } \
348 } while (false)
349
Arvind Ram Prakash1ab21e52024-11-12 10:52:08 -0600350#define SKIP_TEST_IF_FPMR_NOT_SUPPORTED() \
351 do { \
352 if(!is_feat_fpmr_present()) { \
353 tftf_testcase_printf("FEAT_FPMR not supported\n"); \
354 return TEST_RESULT_SKIPPED; \
355 } \
356 } while (false)
357
Igor Podgainõid1a7f4d2024-11-26 12:50:47 +0100358#define SKIP_TEST_IF_SCTLR2_NOT_SUPPORTED() \
359 do { \
360 if (!is_feat_sctlr2_supported()) { \
361 tftf_testcase_printf("FEAT_SCTLR2 not supported\n"); \
362 return TEST_RESULT_SKIPPED; \
363 } \
364 } while (false)
365
366#define SKIP_TEST_IF_THE_NOT_SUPPORTED() \
367 do { \
368 if (!is_feat_the_supported()) { \
369 tftf_testcase_printf("FEAT_THE not supported\n"); \
370 return TEST_RESULT_SKIPPED; \
371 } \
372 } while (false)
373
374#define SKIP_TEST_IF_D128_NOT_SUPPORTED() \
375 do { \
376 if (!is_feat_d128_supported()) { \
377 tftf_testcase_printf("FEAT_D128 not supported\n"); \
378 return TEST_RESULT_SKIPPED; \
379 } \
380 } while (false)
381
Arunachalam Ganapathy4b221112023-04-05 14:19:03 +0100382#define SKIP_TEST_IF_RME_NOT_SUPPORTED_OR_RMM_IS_TRP() \
383 do { \
Shruti Gupta40de8ec2023-10-12 21:45:12 +0100384 u_register_t retrmm = 0U; \
Arunachalam Ganapathy4b221112023-04-05 14:19:03 +0100385 \
386 if (!get_armv9_2_feat_rme_support()) { \
387 tftf_testcase_printf("FEAT_RME not supported\n"); \
388 return TEST_RESULT_SKIPPED; \
389 } \
390 \
391 host_rmi_init_cmp_result(); \
Shruti Gupta40de8ec2023-10-12 21:45:12 +0100392 retrmm = host_rmi_version(RMI_ABI_VERSION_VAL); \
Arunachalam Ganapathy4b221112023-04-05 14:19:03 +0100393 \
394 VERBOSE("RMM version is: %lu.%lu\n", \
395 RMI_ABI_VERSION_GET_MAJOR(retrmm), \
396 RMI_ABI_VERSION_GET_MINOR(retrmm)); \
397 \
398 /* \
399 * TODO: Remove this once SMC_RMM_REALM_CREATE is implemented \
400 * in TRP. For the moment skip the test if RMM is TRP, TRP \
401 * version is always 0. \
402 */ \
403 if (retrmm == 0U) { \
404 tftf_testcase_printf("RMM is TRP\n"); \
405 return TEST_RESULT_SKIPPED; \
406 } \
407 } while (false)
408
Jayanth Dodderi Chidanandcd6c94b2022-02-15 17:19:05 +0000409#define SKIP_TEST_IF_LS64_NOT_SUPPORTED() \
410 do { \
411 if (get_feat_ls64_support() == \
412 ID_AA64ISAR1_LS64_NOT_SUPPORTED) { \
413 tftf_testcase_printf("ARMv8.7-ls64 not supported"); \
414 return TEST_RESULT_SKIPPED; \
415 } \
416 } while (false)
417
Andre Przywara72b7ce12024-11-04 13:44:39 +0000418#define SKIP_TEST_IF_LS64_ACCDATA_NOT_SUPPORTED() \
419 do { \
420 if (get_feat_ls64_support() < \
421 ID_AA64ISAR1_LS64_ACCDATA_SUPPORTED) { \
422 tftf_testcase_printf("ARMv8.7-ls64-accdata not supported"); \
423 return TEST_RESULT_SKIPPED; \
424 } \
425 } while (false)
426
Javier Almansa Sobrino7c78f7b2024-10-25 11:44:32 +0100427#define SKIP_TEST_IF_DOUBLE_FAULT2_NOT_SUPPORTED() \
428 do { \
429 if (is_feat_double_fault2_present() == false) { \
430 return TEST_RESULT_SKIPPED; \
431 } \
432 } while (false)
433
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200434/* Helper macro to verify if system suspend API is supported */
435#define is_psci_sys_susp_supported() \
J-Alves8f08a052020-05-26 17:14:40 +0100436 (tftf_get_psci_feature_info(SMC_PSCI_SYSTEM_SUSPEND) \
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200437 == PSCI_E_SUCCESS)
438
439/* Helper macro to verify if PSCI_STAT_COUNT API is supported */
440#define is_psci_stat_count_supported() \
J-Alves8f08a052020-05-26 17:14:40 +0100441 (tftf_get_psci_feature_info(SMC_PSCI_STAT_COUNT) \
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200442 == PSCI_E_SUCCESS)
443
444/*
445 * Helper function to verify the system state is ready for system
446 * suspend. i.e., a single CPU is running and all other CPUs are powered off.
447 * Returns 1 if the system is ready to suspend, 0 otherwise.
448 */
449int is_sys_suspend_state_ready(void);
450
451/*
452 * Helper function to reset the system. This function shouldn't return.
453 * It is not marked with __dead to help the test to catch some error in
454 * TF
455 */
456void psci_system_reset(void);
457
458/*
459 * Helper function that enables/disables the mem_protect mechanism
460 */
461int psci_mem_protect(int val);
462
463
464/*
465 * Helper function to call PSCI MEM_PROTECT_CHECK
466 */
467int psci_mem_protect_check(uintptr_t addr, size_t size);
468
469
470/*
471 * Helper function to get a sentinel address that can be used to test mem_protect
472 */
473unsigned char *psci_mem_prot_get_sentinel(void);
474
475/*
476 * Helper function to memory map and unmap a region needed by a test.
477 *
478 * Return TEST_RESULT_FAIL if the memory could not be successfully mapped or
479 * unmapped. Otherwise, return the test functions's result.
480 */
481test_result_t map_test_unmap(const map_args_unmap_t *args,
482 test_function_arg_t test);
483
J-Alvesf1126f22020-11-02 17:28:20 +0000484/*
nabkah019ea16642022-03-01 19:39:59 +0000485 * Utility function to wait for all CPUs other than the caller to be
486 * OFF.
487 */
488void wait_for_non_lead_cpus(void);
489
490/*
491 * Utility function to wait for a given CPU other than the caller to be
492 * OFF.
493 */
494void wait_for_core_to_turn_off(unsigned int mpidr);
AlexeiFedorov2f30f102023-03-13 19:37:46 +0000495
496/* Generate 64-bit random number */
497unsigned long long rand64(void);
498
Arvind Ram Prakash81916212024-08-15 15:08:23 -0500499/* TRBE Errata */
500#define CORTEX_A520_MIDR U(0x410FD800)
501#define CORTEX_X4_MIDR U(0x410FD821)
502#define RXPX_RANGE(x, y, z) (((x >= y) && (x <= z)) ? true : false)
503bool is_trbe_errata_affected_core(void);
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +0200504#endif /* __TEST_HELPERS_H__ */