fix: validate if FFA_SECONDARY_EP_REGISTER is supported
This patch validates that FFA_SECONDARY_EP_REGISTER interface is
supported for MP SP but not for UP SP. We rely on the fact that
Tertiary Cactus SP is a UP SP to test this feature.
Signed-off-by: Madhukar Pappireddy <madhukar.pappireddy@arm.com>
Change-Id: I1bf12e4756bd7dd315062fb5cbfb2edb35883f8b
diff --git a/spm/cactus/cactus_main.c b/spm/cactus/cactus_main.c
index 8ce132c..19a89f5 100644
--- a/spm/cactus/cactus_main.c
+++ b/spm/cactus/cactus_main.c
@@ -215,14 +215,14 @@
init_xlat_tables();
}
-static void register_secondary_entrypoint(void)
+static struct ffa_value register_secondary_entrypoint(void)
{
struct ffa_value args;
args.fid = FFA_SECONDARY_EP_REGISTER_SMC64;
args.arg1 = (u_register_t)&secondary_cold_entry;
- ffa_service_call(&args);
+ return ffa_service_call(&args);
}
void __dead2 cactus_main(bool primary_cold_boot,
@@ -315,7 +315,16 @@
cactus_print_memory_layout(ffa_id);
- register_secondary_entrypoint();
+ ret = register_secondary_entrypoint();
+
+ /* FFA_SECONDARY_EP_REGISTER interface is not supported for UP SP. */
+ if (ffa_id == (SPM_VM_ID_FIRST + 2)) {
+ expect(ffa_func_id(ret), FFA_ERROR);
+ expect(ffa_error_code(ret), FFA_ERROR_NOT_SUPPORTED);
+ } else {
+ expect(ffa_func_id(ret), FFA_SUCCESS_SMC32);
+ }
+
discover_managed_exit_interrupt_id();
register_maintenance_interrupt_handlers();