blob: 904b23b22244875e232d68f6690a8ecbabf776e2 [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
42static void rsi_log_test(unsigned int id, unsigned int status)
43{
44 unsigned long args[10];
45 unsigned long regs[5];
46 unsigned int i;
47
48 /* Fill input arguments */
49 for (i = 0U; i < ARRAY_SIZE(args); i++) {
50 args[i] = rand();
51 }
52
53 /* Fill output values */
54 switch (status) {
55 case LOG_SUCCESS:
56 regs[0] = (id == SMC_RSI_ABI_VERSION) ?
57 RSI_ABI_VERSION : RSI_SUCCESS;
58 break;
59 case LOG_ERROR:
60 regs[0] = (id == SMC_RSI_ABI_VERSION) ?
61 RSI_ABI_VERSION :
62 test_helpers_get_rand_in_range(RSI_ERROR_INPUT, RSI_INCOMPLETE);
63 break;
64 default:
65 regs[0] = rand();
66 }
67
68 for (i = 1U; i < ARRAY_SIZE(regs); i++) {
69 regs[i] = rand();
70 }
71
72 rsi_log_on_exit(id, args, regs, true);
73}
74
75TEST(rsi_logger_tests, RSI_LOGGER_TC1)
76{
77 unsigned int status, id;
78
79 for (status = LOG_SUCCESS; status <= LOG_RANDOM; status++) {
80 for (id = SMC_RSI_ABI_VERSION; id <= SMC_RSI_HOST_CALL; id++) {
81 rsi_log_test(id, status);
82 }
83 }
84
85 rsi_log_test(SMC32_PSCI_FID_MIN, LOG_RANDOM);
86 rsi_log_test(SMC64_PSCI_FID_MAX, LOG_RANDOM);
87 rsi_log_test(SMC64_PSCI_FID_MAX + rand(), LOG_RANDOM);
88
89 TEST_EXIT;
90}