diff --git a/services/spd/trusty/smcall.h b/services/spd/trusty/smcall.h index a1d91e5af..2abcee62f 100644 --- a/services/spd/trusty/smcall.h +++ b/services/spd/trusty/smcall.h @@ -94,5 +94,6 @@ #define SMC_SC_VDEV_RESET SMC_STDCALL_NR(SMC_ENTITY_TRUSTED_OS, 23) #define SMC_SC_VDEV_KICK_VQ SMC_STDCALL_NR(SMC_ENTITY_TRUSTED_OS, 24) +#define SMC_SC_SET_ROT_PARAMS SMC_STDCALL_NR(SMC_ENTITY_TRUSTED_OS, 65535) #endif /* __LIB_SM_SMCALL_H */ diff --git a/services/spd/trusty/trusty.c b/services/spd/trusty/trusty.c index 750c3b0c3..976087c9e 100644 --- a/services/spd/trusty/trusty.c +++ b/services/spd/trusty/trusty.c @@ -237,6 +237,18 @@ static uint64_t trusty_smc_handler(uint32_t smc_fid, { struct args ret; uint32_t vmid = 0; + entry_point_info_t *ep_info = bl31_plat_get_next_image_ep_info(SECURE); + + /* + * Return success for SET_ROT_PARAMS if Trusty is not present, as + * Verified Boot is not even supported and returning success here + * would not compromise the boot process. + */ + if (!ep_info && (smc_fid == SMC_SC_SET_ROT_PARAMS)) { + SMC_RET1(handle, 0); + } else if (!ep_info) { + SMC_RET1(handle, SMC_UNK); + } if (is_caller_secure(flags)) { if (smc_fid == SMC_SC_NS_RETURN) {