Page MenuHomePhabricator

Macro TRND_SUPPORT can't work together with SPM_MM
Open, Needs TriagePublic

Description

if "SPM_MM" and" TRND_SUPPORT"macro defined at the same time ,
that will cause TRNG can't be used in latest Linux kernel.

std_svc_setup.c code as below:

#if SPM_MM
/*
* Dispatch SPM calls to SPM SMC handler and return its return
* value
*/
if (is_spm_mm_fid(smc_fid)) {
return spm_mm_smc_handler(smc_fid, x1, x2, x3, x4, cookie,
handle, flags);
}
#endif
...................
#if TRNG_SUPPORT
if (is_trng_fid(smc_fid)) {
return trng_smc_handler(smc_fid, x1, x2, x3, x4, cookie, handle,
flags);
}
#endif

spm_mm_svc.h code as below,range defined is 0xc4000040-0xc400007f as 64bit:
/

* These macros are used to identify SPM-MM calls using the SMC function ID */
#define SPM_MM_FID_MASK U(0xffff)
#define SPM_MM_FID_MIN_VALUE U(0x40)
#define SPM_MM_FID_MAX_VALUE U(0x7f)
#define is_spm_mm_fid(_fid)
((((_fid) & SPM_MM_FID_MASK) >= SPM_MM_FID_MIN_VALUE)
(((_fid) & SPM_MM_FID_MASK) <= SPM_MM_FID_MAX_VALUE))

trng _svc.h TRNG defined as below:

/* SMC function IDs for TRNG queries */
#define ARM_TRNG_VERSION U(0x84000050)
#define ARM_TRNG_FEATURES U(0x84000051)
#define ARM_TRNG_GET_UUID U(0x84000052)
#define ARM_TRNG_RND32 U(0x84000053)
#define ARM_TRNG_RND64 U(0xc4000053)

spm_mm_svc range(40-7f)covered Trng's range(50-5f) ,that will cause a Trng call can't be handled anyway.

in <<ARM DEN 0028E SMC Calling Convention 1.4 2022>>
6.3 Implemented Standard Secure Service Calls

so pls check them.
Thanks a lot !!

Event Timeline