diff options
author | Julius Werner <jwerner@chromium.org> | 2021-09-14 00:35:47 +0200 |
---|---|---|
committer | TrustedFirmware Code Review <review@review.trustedfirmware.org> | 2021-09-14 00:35:47 +0200 |
commit | 3c8d282b226f69f0f9e38d103cd30f66d065b97f (patch) | |
tree | d5cacd796513a1a5ee0fc008061ad5cb5b4220bd | |
parent | 02950791622f1109aa633baf5977f954f76427c3 (diff) | |
parent | cc35a3771d28a96906f8d0f393ff664924a2d4dc (diff) | |
download | trusted-firmware-a-3c8d282b226f69f0f9e38d103cd30f66d065b97f.tar.gz |
Merge "fix(plat/qti/sc7180): qti smc addition" into integration
-rw-r--r-- | plat/qti/common/src/qti_syscall.c | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/plat/qti/common/src/qti_syscall.c b/plat/qti/common/src/qti_syscall.c index a7601b6577..d8e5be9f60 100644 --- a/plat/qti/common/src/qti_syscall.c +++ b/plat/qti/common/src/qti_syscall.c @@ -21,6 +21,7 @@ #include <qti_plat.h> #include <qti_secure_io_cfg.h> #include <qtiseclib_interface.h> + /* * SIP service - SMC function IDs for SiP Service queries * @@ -29,7 +30,7 @@ #define QTI_SIP_SVC_UID_ID U(0x0200ff01) /* 0x8200ff02 is reserved*/ #define QTI_SIP_SVC_VERSION_ID U(0x0200ff03) - +#define QTI_SIP_SVC_AVAILABLE_ID U(0x02000601) /* * Syscall's to allow Non Secure world accessing peripheral/IO memory * those are secure/proteced BUT not required to be secure. @@ -83,6 +84,22 @@ static bool qti_is_secure_io_access_allowed(u_register_t addr) return false; } +static bool qti_check_syscall_availability(u_register_t smc_fid) +{ + switch (smc_fid) { + case QTI_SIP_SVC_CALL_COUNT_ID: + case QTI_SIP_SVC_UID_ID: + case QTI_SIP_SVC_VERSION_ID: + case QTI_SIP_SVC_AVAILABLE_ID: + case QTI_SIP_SVC_SECURE_IO_READ_ID: + case QTI_SIP_SVC_SECURE_IO_WRITE_ID: + case QTI_SIP_SVC_MEM_ASSIGN_ID: + return true; + default: + return false; + } +} + bool qti_mem_assign_validate_param(memprot_info_t *mem_info, u_register_t u_num_mappings, uint32_t *source_vm_list, @@ -315,6 +332,18 @@ static uintptr_t qti_sip_handler(uint32_t smc_fid, QTI_SIP_SVC_VERSION_MINOR); break; } + case QTI_SIP_SVC_AVAILABLE_ID: + { + if (x1 != 1) { + SMC_RET1(handle, QTI_SIP_INVALID_PARAM); + } + if (qti_check_syscall_availability(x2) == true) { + SMC_RET2(handle, QTI_SIP_SUCCESS, 1); + } else { + SMC_RET2(handle, QTI_SIP_SUCCESS, 0); + } + break; + } case QTI_SIP_SVC_SECURE_IO_READ_ID: { if ((x1 == QTI_SIP_SVC_SECURE_IO_READ_PARAM_ID) && |