mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-22 12:34:19 +00:00
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:
commit
a921da5ed2
4 changed files with 25 additions and 5 deletions
|
@ -496,7 +496,8 @@ enum pm_ret_status pm_api_ioctl(uint32_t device_id, uint32_t ioctl_id,
|
||||||
break;
|
break;
|
||||||
case IOCTL_SET_SGI:
|
case IOCTL_SET_SGI:
|
||||||
/* Get the sgi number */
|
/* Get the sgi number */
|
||||||
if (pm_register_sgi(arg1) != 0) {
|
ret = pm_register_sgi(arg1, arg2);
|
||||||
|
if (ret != 0) {
|
||||||
return PM_RET_ERROR_ARGS;
|
return PM_RET_ERROR_ARGS;
|
||||||
}
|
}
|
||||||
gicd_write_irouter(gicv3_driver_data->gicd_base,
|
gicd_write_irouter(gicv3_driver_data->gicd_base,
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
|
|
||||||
#define PM_GET_CALLBACK_DATA 0xa01U
|
#define PM_GET_CALLBACK_DATA 0xa01U
|
||||||
#define PM_GET_TRUSTZONE_VERSION 0xa03U
|
#define PM_GET_TRUSTZONE_VERSION 0xa03U
|
||||||
|
#define TF_A_PM_REGISTER_SGI 0xa04U
|
||||||
|
|
||||||
/* PM API Versions */
|
/* PM API Versions */
|
||||||
#define PM_API_BASE_VERSION 1U
|
#define PM_API_BASE_VERSION 1U
|
||||||
|
|
|
@ -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
|
* pm_register_sgi() - PM register the IPI interrupt
|
||||||
*
|
*
|
||||||
* @sgi - SGI number to be used for communication.
|
* @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.
|
* @return On success, the initialization function must return 0.
|
||||||
* Any other return value will cause the framework to ignore
|
* Any other return value will cause the framework to ignore
|
||||||
* the service
|
* 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.
|
* 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;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,6 +237,18 @@ static uintptr_t TF_A_specific_handler(uint32_t api_id, uint32_t *pm_arg,
|
||||||
{
|
{
|
||||||
switch (api_id) {
|
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:
|
case PM_GET_CALLBACK_DATA:
|
||||||
{
|
{
|
||||||
uint32_t result[4] = {0};
|
uint32_t result[4] = {0};
|
||||||
|
|
|
@ -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
|
* 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 x4, void *cookie, void *handle,
|
||||||
uint64_t flags);
|
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 */
|
#endif /* PM_SVC_MAIN_H */
|
||||||
|
|
Loading…
Add table
Reference in a new issue