summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLucian Paul-Trifu <lucian.paultrifu@gmail.com>2022-09-01 11:20:06 +0100
committerLucian Paul-Trifu <lucian.paultrifu@gmail.com>2022-09-02 15:14:36 +0100
commit28a2e802dc56ad3c2cea814a752bd8218678bcd6 (patch)
treec987381d3925cb235d05e7df3820310bfaaa7975
parentf9d78ea6f1b80654aec7e62e27bbc63b7f5ace67 (diff)
downloadarm-trusted-firmware-28a2e802dc56ad3c2cea814a752bd8218678bcd6.tar.gz
feat(spmc): Dispatch FFA_FEATURES queries of FF-A Notifications
Change-Id: I25250c8581d422bd20590586f061983fe0ba8853
-rw-r--r--services/std_svc/spm/el3_spmc/spmc_main.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/services/std_svc/spm/el3_spmc/spmc_main.c b/services/std_svc/spm/el3_spmc/spmc_main.c
index 78f67f1a7..a11edb38d 100644
--- a/services/std_svc/spm/el3_spmc/spmc_main.c
+++ b/services/std_svc/spm/el3_spmc/spmc_main.c
@@ -1053,7 +1053,23 @@ static uint64_t ffa_features_handler(uint32_t smc_fid,
/* Check if a Feature ID was requested. */
if ((function_id & FFA_FEATURES_BIT31_MASK) == 0U) {
- /* We currently don't support any additional features. */
+ uint32_t feat_id = (uint32_t)x1;
+
+ if (secure_origin) {
+ switch (feat_id) {
+ default:
+ break;
+ }
+ } else {
+ switch (feat_id) {
+ case FFA_FEAT_SCHED_RECEIVER_INT:
+ return spmc_ffa_features_schedule_receiver_int(handle);
+
+ default:
+ break;
+ }
+ }
+
return spmc_ffa_error_return(handle, FFA_ERROR_NOT_SUPPORTED);
}
@@ -1115,6 +1131,7 @@ static uint64_t ffa_features_handler(uint32_t smc_fid,
case FFA_MSG_SEND_DIRECT_RESP_SMC64:
case FFA_MEM_RELINQUISH:
case FFA_MSG_WAIT:
+ case FFA_NOTIFICATION_SET:
if (!secure_origin) {
return spmc_ffa_error_return(handle,
@@ -1130,6 +1147,13 @@ static uint64_t ffa_features_handler(uint32_t smc_fid,
case FFA_MEM_LEND_SMC64:
case FFA_MEM_RECLAIM:
case FFA_MEM_FRAG_RX:
+ case FFA_NOTIFICATION_BITMAP_CREATE:
+ case FFA_NOTIFICATION_BITMAP_DESTROY:
+ case FFA_NOTIFICATION_BIND:
+ case FFA_NOTIFICATION_UNBIND:
+ /* case FFA_NOTIFICATION_INFO_GET_SMC32: */
+ case FFA_NOTIFICATION_INFO_GET_SMC64:
+ case FFA_NOTIFICATION_GET:
if (secure_origin) {
return spmc_ffa_error_return(handle,