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: