blob: bcf1c388a35fd29a29b03a303777819aa00c92cc [file] [log] [blame]
J-Alves0e1e7ca2021-01-25 14:11:06 +00001/*
Shruti Gupta38133fa2023-04-19 17:00:38 +01002 * Copyright (c) 2023, Arm Limited. All rights reserved.
J-Alves0e1e7ca2021-01-25 14:11:06 +00003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
J-Alveseeb25472021-03-11 09:54:21 +00007#include "cactus_message_loop.h"
J-Alves0e1e7ca2021-01-25 14:11:06 +00008#include "cactus_test_cmds.h"
Shruti Gupta38133fa2023-04-19 17:00:38 +01009#include <fpu.h>
Olivier Deprez19626b42023-12-21 18:29:05 +010010#include <spm_helpers.h>
J-Alves0e1e7ca2021-01-25 14:11:06 +000011#include "spm_common.h"
12
13/*
Shruti Gupta38133fa2023-04-19 17:00:38 +010014 * Note Test must exercise FILL and COMPARE command in
15 * sequence and on same CPU.
16 */
Arunachalam Ganapathy7e514f62023-08-30 13:27:36 +010017static fpu_state_t sp_fpu_state_write;
18static fpu_state_t sp_fpu_state_read;
Shruti Gupta38133fa2023-04-19 17:00:38 +010019static unsigned int core_pos;
20/*
J-Alves0e1e7ca2021-01-25 14:11:06 +000021 * Fill SIMD vectors from secure world side with a unique value.
J-Alves0e1e7ca2021-01-25 14:11:06 +000022 */
23CACTUS_CMD_HANDLER(req_simd_fill, CACTUS_REQ_SIMD_FILL_CMD)
24{
Olivier Deprez19626b42023-12-21 18:29:05 +010025 /* Get vCPU index for currently running vCPU. */
26 core_pos = spm_get_my_core_pos();
Arunachalam Ganapathy7e514f62023-08-30 13:27:36 +010027 fpu_state_write_rand(&sp_fpu_state_write);
J-Alves0e1e7ca2021-01-25 14:11:06 +000028 return cactus_response(ffa_dir_msg_dest(*args),
29 ffa_dir_msg_source(*args),
30 CACTUS_SUCCESS);
31}
Shruti Gupta38133fa2023-04-19 17:00:38 +010032
33/*
34 * compare FPU state(SIMD vectors, FPCR, FPSR) from secure world side with the previous
35 * SIMD_SECURE_VALUE unique value.
36 */
37CACTUS_CMD_HANDLER(req_simd_compare, CACTUS_CMP_SIMD_VALUE_CMD)
38{
39 bool test_succeed = false;
40
Olivier Deprez19626b42023-12-21 18:29:05 +010041 /* Get vCPU index for currently running vCPU. */
42 unsigned int core_pos1 = spm_get_my_core_pos();
Shruti Gupta38133fa2023-04-19 17:00:38 +010043 if (core_pos1 == core_pos) {
Arunachalam Ganapathy7e514f62023-08-30 13:27:36 +010044 fpu_state_read(&sp_fpu_state_read);
45 if (fpu_state_compare(&sp_fpu_state_write,
46 &sp_fpu_state_read) == 0) {
47 test_succeed = true;
48 }
Shruti Gupta38133fa2023-04-19 17:00:38 +010049 }
50 return cactus_response(ffa_dir_msg_dest(*args),
51 ffa_dir_msg_source(*args),
52 test_succeed ? CACTUS_SUCCESS : CACTUS_ERROR);
53}