FF-A: secondary EC cold boot

When the SPMC boots, all Secure Partitions are initialized
on their primary Execution Context. A Secure Partition calls
FFA_SECONDARY_EP_REGISTER at virtual FF-A instance from
its first EC passing the entry point address for secondary
ECs. A secondary EC is first resumed either upon invocation
of PSCI_CPU_ON from the NWd to which a SP is registered
(currently the first SP) or by ffa_run invocation.

Change-Id: Ic6050af16d4081ca31729744995fbb999b170e11
Signed-off-by: Max Shvetsov <maksims.svecovs@arm.com>
Signed-off-by: Olivier Deprez <olivier.deprez@arm.com>
diff --git a/src/load.c b/src/load.c
index 7accc65..d31b67a 100644
--- a/src/load.c
+++ b/src/load.c
@@ -365,6 +365,7 @@
 {
 	struct vm *vm;
 	struct vm_locked vm_locked;
+	struct vcpu_locked vcpu_locked;
 	struct vcpu *vcpu;
 	ipaddr_t secondary_entry;
 	bool ret;
@@ -561,8 +562,9 @@
 
 	vcpu = vm_get_vcpu(vm, 0);
 
+	vcpu_locked = vcpu_lock(vcpu);
 	if (has_fdt) {
-		vcpu_secondary_reset_and_start(vcpu, secondary_entry,
+		vcpu_secondary_reset_and_start(vcpu_locked, secondary_entry,
 					       pa_addr(fdt_addr));
 	} else {
 		/*
@@ -570,9 +572,12 @@
 		 * passed in register x0, which is what
 		 * vcpu_secondary_reset_and_start does in this case.
 		 */
-		vcpu_secondary_reset_and_start(vcpu, secondary_entry, mem_size);
+		vcpu_secondary_reset_and_start(vcpu_locked, secondary_entry,
+					       mem_size);
 	}
 
+	vcpu_unlock(&vcpu_locked);
+
 	ret = true;
 
 out: