Yes, the problem is in comparing logic and masks used.
From: David Daney <daviddaney@microsoft.com>
Sent: Monday, November 10, 2025 7:38 PM
To: Sureshkumar Ponnusamy <sponnusamy@microsoft.com>; tf-a-owner@lists.trustedfirmware.org
Cc: Giri Mudusuru <girimudusuru@microsoft.com>; Kun Qin <Kun.Qin@microsoft.com>
Subject: Re: Question about SPM-MM SMC function ids
According to the DEN0060A specification the only values used are:
MM_VERSION: 0x8400 0040
MM_COMMUNICATE: 0x8400 0041/0xC400 0041
These don't overlap with the TRNG function IDs defined in DEN0098
David.
From: Sureshkumar Ponnusamy <sponnusamy@microsoft.com>
Sent: Monday, November 10, 2025 7:32 PM
To: tf-a-owner@lists.trustedfirmware.org <tf-a-owner@lists.trustedfirmware.org>
Cc: Giri Mudusuru <girimudusuru@microsoft.com>; David Daney <daviddaney@microsoft.com>; Kun Qin <Kun.Qin@microsoft.com>
Subject: Question about SPM-MM SMC function ids
Hi Manish, Levi Yun , TF-A community ,
I am facing an issue when enabling SPM-MM feature and it looks like there is a minor issue with the SMC ID range check.
When SPM-MM is enabled, I cannot use the TRNG SMC services.
/* 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))
Here, the SPM-MM SMC ID range spans from 0x40 to 0x7F, which overlaps with the TRNG SMC service IDs:
/* 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)
Could you please clarify the rationale behind including the TRNG SMC IDs within the SPM-MM ID range? If this overlap was unintentional, we have to fix it.
Looking forward to your insights and feedback on this matter.
Thanks
Suresh