blob: 791fc6805feea971a0d04036975ee8e72bcca82f [file] [log] [blame]
AlexeiFedorov65d06532023-05-17 19:01:36 +01001/*
2 * SPDX-License-Identifier: BSD-3-Clause
3 * SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
4 */
5
6#include <CppUTest/CommandLineTestRunner.h>
7#include <CppUTest/TestHarness.h>
8
9extern "C" {
10#include <arch_helpers.h>
11#include <debug.h>
12#include <host_utils.h>
13#include <psci.h>
14#include <rsi-logger.h>
15#include <smc-rsi.h>
16#include <stdlib.h>
17#include <string.h>
18#include <test_helpers.h>
19#include <utils_def.h>
20}
21
22#define LOG_SUCCESS 0U
23#define LOG_ERROR 1U
24#define LOG_RANDOM 2U
25
26TEST_GROUP(rsi_logger_tests) {
27 TEST_SETUP()
28 {
29 test_helpers_init();
30
31 /* Enable the platform with support for multiple PEs */
32 test_helpers_rmm_start(true);
33
34 /* Make sure current CPU Id is 0 (primary processor) */
35 host_util_set_cpuid(0U);
36 test_helpers_expect_assert_fail(false);
37 }
38 TEST_TEARDOWN()
39 {}
40};
41
AlexeiFedorov77a8f572023-07-20 16:16:03 +010042#if (RSI_LOG_LEVEL > LOG_LEVEL_NONE) && (RSI_LOG_LEVEL <= LOG_LEVEL)
AlexeiFedorov65d06532023-05-17 19:01:36 +010043static void rsi_log_test(unsigned int id, unsigned int status)
44{
45 unsigned long args[10];
46 unsigned long regs[5];
47 unsigned int i;
48
49 /* Fill input arguments */
50 for (i = 0U; i < ARRAY_SIZE(args); i++) {
51 args[i] = rand();
52 }
53
54 /* Fill output values */
55 switch (status) {
56 case LOG_SUCCESS:
57 regs[0] = (id == SMC_RSI_ABI_VERSION) ?
58 RSI_ABI_VERSION : RSI_SUCCESS;
59 break;
60 case LOG_ERROR:
61 regs[0] = (id == SMC_RSI_ABI_VERSION) ?
62 RSI_ABI_VERSION :
63 test_helpers_get_rand_in_range(RSI_ERROR_INPUT, RSI_INCOMPLETE);
64 break;
65 default:
66 regs[0] = rand();
67 }
68
69 for (i = 1U; i < ARRAY_SIZE(regs); i++) {
70 regs[i] = rand();
71 }
72
73 rsi_log_on_exit(id, args, regs, true);
74}
75
76TEST(rsi_logger_tests, RSI_LOGGER_TC1)
77{
78 unsigned int status, id;
79
80 for (status = LOG_SUCCESS; status <= LOG_RANDOM; status++) {
81 for (id = SMC_RSI_ABI_VERSION; id <= SMC_RSI_HOST_CALL; id++) {
Javier Almansa Sobrino654ebf32023-06-13 10:51:39 +010082 rsi_log_test(id, status);
AlexeiFedorov65d06532023-05-17 19:01:36 +010083 }
84 }
85
86 rsi_log_test(SMC32_PSCI_FID_MIN, LOG_RANDOM);
87 rsi_log_test(SMC64_PSCI_FID_MAX, LOG_RANDOM);
88 rsi_log_test(SMC64_PSCI_FID_MAX + rand(), LOG_RANDOM);
89
90 TEST_EXIT;
91}
AlexeiFedorov77a8f572023-07-20 16:16:03 +010092#else
93IGNORE_TEST(rsi_logger_tests, RSI_LOGGER_TC1)
94{
95}
96#endif