blob: 6c8af0c2d7b8377aaac9c45e754fea369e9a0676 [file] [log] [blame]
/*
* Copyright (c) 2024, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "cactus_message_loop.h"
#include "cactus_test_cmds.h"
#include "debug.h"
uint32_t ms_to_ticks(uint64_t ms)
{
return ms * read_cntfrq_el0() / 1000;
}
CACTUS_CMD_HANDLER(set_virtual_timer, CACTUS_SET_ARCH_TIMER_CMD)
{
uint64_t deadline_ms = cactus_get_timer_deadline(*args);
uint64_t wait_time = cactus_get_timer_wait_time(*args);
uint32_t ticks = ms_to_ticks(deadline_ms);
write_cntp_ctl_el0(0);
write_cntp_tval_el0(ticks);
write_cntp_ctl_el0(1);
if (wait_time != 0U) {
waitms(wait_time);
}
return cactus_response(ffa_dir_msg_dest(*args),
ffa_dir_msg_source(*args),
CACTUS_SUCCESS);
}