diff options
| author | Govindraj Raja <govindraj.raja@arm.com> | 2026-01-06 16:56:06 +0000 |
|---|---|---|
| committer | TrustedFirmware Code Review <review@review.trustedfirmware.org> | 2026-01-06 16:56:06 +0000 |
| commit | 8f54a00aec6c317957aa86b3835c062292025d65 (patch) | |
| tree | 26b8f18404612884b9f736eeee452858f0c42769 | |
| parent | d934b937c036eae5e2329ae579f543f9b1c57a80 (diff) | |
| parent | 6c79953cd6d9a93d3c71796be0e056b4fbb3c72c (diff) | |
| download | arm-trusted-firmware-8f54a00aec6c317957aa86b3835c062292025d65.tar.gz arm-trusted-firmware-8f54a00aec6c317957aa86b3835c062292025d65.zip | |
Merge "feat(spm-mm): fix wrong range of SPM_MM" into integration
| -rw-r--r-- | include/services/spm_mm_svc.h | 23 | ||||
| -rw-r--r-- | services/std_svc/spm/spm_mm/spm_mm_main.c | 22 |
2 files changed, 35 insertions, 10 deletions
diff --git a/include/services/spm_mm_svc.h b/include/services/spm_mm_svc.h index 6086c0f9a..5fe84678d 100644 --- a/include/services/spm_mm_svc.h +++ b/include/services/spm_mm_svc.h @@ -38,18 +38,19 @@ #define SPM_MM_VERSION_COMPILED SPM_MM_VERSION_FORM(SPM_MM_VERSION_MAJOR, \ SPM_MM_VERSION_MINOR) -/* 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)) - +/* + * These macros are used to identify MM calls using the SMC function ID + * See the SMCCC spec's Table 6-4: Reserved Standard Secure Service Call range. + */ +#define MM_FID_MASK U(0xffff) +#define MM_FID_MIN_VALUE U(0x40) +#define MM_FID_MAX_VALUE U(0x4f) /* * SMC IDs defined in [1] for accessing MM services from the Non-secure world. - * These FIDs occupy the range 0x40 - 0x5f. - * [1] DEN0060A_ARM_MM_Interface_Specification.pdf + * These FIDs occupy the range 0x40 - 0x4f. + * [1] DEN0028 - SMC Calling Convention. + * Table 6-4: Reserved Standard Secure Service Call range + * [2] DEN0060A - Management Mode Interface Specification. */ #define MM_VERSION_AARCH32 U(0x84000040) #define MM_COMMUNICATE_AARCH64 U(0xC4000041) @@ -137,6 +138,8 @@ uint64_t spm_mm_tpm_start_handler(uint32_t smc_fid, void *handle, uint64_t flags); +bool is_spm_mm_fid(uint32_t smc_fid); + #endif /* __ASSEMBLER__ */ #endif /* SPM_MM_SVC_H */ diff --git a/services/std_svc/spm/spm_mm/spm_mm_main.c b/services/std_svc/spm/spm_mm/spm_mm_main.c index c204987a0..939e31ad6 100644 --- a/services/std_svc/spm/spm_mm/spm_mm_main.c +++ b/services/std_svc/spm/spm_mm/spm_mm_main.c @@ -395,3 +395,25 @@ uint64_t spm_mm_smc_handler(uint32_t smc_fid, SMC_RET1(handle, SMC_UNK); } + +bool is_spm_mm_fid(uint32_t smc_fid) +{ + uint32_t fid = smc_fid & MM_FID_MASK; + + if ((fid >= MM_FID_MIN_VALUE) && + (fid <= MM_FID_MAX_VALUE)) { + return true; + } + + switch (smc_fid) { + case SPM_MM_VERSION_AARCH32: + case MM_SP_EVENT_COMPLETE_AARCH64: + case MM_SP_MEMORY_ATTRIBUTES_GET_AARCH64: + case MM_SP_MEMORY_ATTRIBUTES_SET_AARCH64: + return true; + default: + break; + } + + return false; +} |
