Merge changes If2408af3,If485ff27 into integration

* changes:
  feat(versal): add SMCCC call TF_A_PM_REGISTER_SGI
  feat(versal): add support to reset SGI
This commit is contained in:
Madhukar Pappireddy 2022-05-13 18:13:33 +02:00 committed by TrustedFirmware Code Review
commit a921da5ed2
4 changed files with 25 additions and 5 deletions

View File

@ -496,7 +496,8 @@ enum pm_ret_status pm_api_ioctl(uint32_t device_id, uint32_t ioctl_id,
break;
case IOCTL_SET_SGI:
/* Get the sgi number */
if (pm_register_sgi(arg1) != 0) {
ret = pm_register_sgi(arg1, arg2);
if (ret != 0) {
return PM_RET_ERROR_ARGS;
}
gicd_write_irouter(gicv3_driver_data->gicd_base,

View File

@ -35,6 +35,7 @@
#define PM_GET_CALLBACK_DATA 0xa01U
#define PM_GET_TRUSTZONE_VERSION 0xa03U
#define TF_A_PM_REGISTER_SGI 0xa04U
/* PM API Versions */
#define PM_API_BASE_VERSION 1U

View File

@ -51,6 +51,7 @@ static uint64_t ipi_fiq_handler(uint32_t id, uint32_t flags, void *handle,
* pm_register_sgi() - PM register the IPI interrupt
*
* @sgi - SGI number to be used for communication.
* @reset - Reset to invalid SGI when reset=1.
* @return On success, the initialization function must return 0.
* Any other return value will cause the framework to ignore
* the service
@ -58,9 +59,14 @@ static uint64_t ipi_fiq_handler(uint32_t id, uint32_t flags, void *handle,
* Update the SGI number to be used.
*
*/
int pm_register_sgi(unsigned int sgi_num)
int pm_register_sgi(unsigned int sgi_num, unsigned int reset)
{
if ((unsigned int)sgi != (unsigned int)INVALID_SGI) {
if (reset == 1U) {
sgi = INVALID_SGI;
return 0;
}
if (sgi != INVALID_SGI) {
return -EBUSY;
}
@ -231,6 +237,18 @@ static uintptr_t TF_A_specific_handler(uint32_t api_id, uint32_t *pm_arg,
{
switch (api_id) {
case TF_A_PM_REGISTER_SGI:
{
int ret;
ret = pm_register_sgi(pm_arg[0], pm_arg[1]);
if (ret != 0) {
SMC_RET1(handle, (uint32_t)PM_RET_ERROR_ARGS);
}
SMC_RET1(handle, (uint32_t)PM_RET_SUCCESS);
}
case PM_GET_CALLBACK_DATA:
{
uint32_t result[4] = {0};

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2019, Xilinx, Inc. All rights reserved.
* Copyright (c) 2019-2022, Xilinx, Inc. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@ -14,5 +14,5 @@ uint64_t pm_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3,
uint64_t x4, void *cookie, void *handle,
uint64_t flags);
int pm_register_sgi(unsigned int sgi_num);
int pm_register_sgi(unsigned int sgi_num, unsigned int reset);
#endif /* PM_SVC_MAIN_H */