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 !!