blob: 1ae38a70967a20f62f4daa2322453e9e0a9429a2 [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)
AlexeiFedorovd416f142025-05-15 13:53:30 +010043static void rsi_log_test(unsigned int id, unsigned int status, bool ret_to_rec)
AlexeiFedorov65d06532023-05-17 19:01:36 +010044{
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:
AlexeiFedorov1d9e9972023-09-15 14:59:57 +010057 regs[0] = RSI_SUCCESS;
AlexeiFedorov65d06532023-05-17 19:01:36 +010058 break;
59 case LOG_ERROR:
AlexeiFedorov1d9e9972023-09-15 14:59:57 +010060 regs[0] = test_helpers_get_rand_in_range(RSI_ERROR_INPUT, RSI_INCOMPLETE);
AlexeiFedorov65d06532023-05-17 19:01:36 +010061 break;
62 default:
63 regs[0] = rand();
64 }
65
66 for (i = 1U; i < ARRAY_SIZE(regs); i++) {
67 regs[i] = rand();
68 }
69
AlexeiFedorovd416f142025-05-15 13:53:30 +010070 rsi_log_on_exit(id, args, regs, ret_to_rec);
AlexeiFedorov65d06532023-05-17 19:01:36 +010071}
72
73TEST(rsi_logger_tests, RSI_LOGGER_TC1)
74{
75 unsigned int status, id;
76
AlexeiFedorovd416f142025-05-15 13:53:30 +010077 for (unsigned int i = 0U; i < 2U; i++) {
78 bool ret_to_rec = ((i & 1U) != 0U);
AlexeiFedorov65d06532023-05-17 19:01:36 +010079
AlexeiFedorovd416f142025-05-15 13:53:30 +010080 for (status = LOG_SUCCESS; status <= LOG_RANDOM; status++) {
81 for (id = SMC_RSI_VERSION; id <= SMC_RSI_PLANE_REG_WRITE; id++) {
82 rsi_log_test(id, status, ret_to_rec);
83 }
84 }
85
86 rsi_log_test(SMC32_PSCI_FID_MIN, LOG_RANDOM, ret_to_rec);
87 rsi_log_test(SMC64_PSCI_FID_MAX, LOG_RANDOM, ret_to_rec);
88 rsi_log_test(SMC64_PSCI_FID_MAX + rand(), LOG_RANDOM, ret_to_rec);
89 }
AlexeiFedorov65d06532023-05-17 19:01:36 +010090
91 TEST_EXIT;
92}
AlexeiFedorov77a8f572023-07-20 16:16:03 +010093#else
94IGNORE_TEST(rsi_logger_tests, RSI_LOGGER_TC1)
95{
96}
97#endif