Browse Source
This change refactors the SPMD to setup SPMC CPU contexts once and early from spmd_spmc_init (single call to cm_setup_context rather than on each and every warm boot). Pass the core linear ID through a GP register as an implementation defined behavior helping FF-A adoption to legacy TOSes (essentially when secure virtualization is not used). A first version of this change was originally submitted by Lukas [1]. Pasting below the original justification: Our TEE, Kinibi, is used to receive the core linear ID in the x3 register of booting secondary cores. This patch is necessary to bring up secondary cores with Kinibi as an SPMC in SEL1. In Kinibi, the TEE is mostly platform-independent and all platform- specifics like topology is concentrated in TF-A of our customers. That is why we don't have the MPIDR - linear ID mapping in Kinibi. We need the correct linear ID to program the GICv2 target register, for example in power management case. It is not needed on GICv3/v4, because of using a fixed mapping from MPIDR to ICDIPTR/GICD_ITARGETSRn register. For debug and power management purpose, we also want a unified view to linear id between Linux and the TEE. E.g. to disable a core, to see what cores are printing a trace / an event. In the past, Kinibi had several other designs, but the complexity was getting out of control: * Platform-specific assembler macros in the kernel. * A per-core SMC from Linux to tell the linear ID after the boot. * With DynamiQ, it seems SIPs were playing with MPIDR register values, reusing them between cores and changing them during boot. [1] https://review.trustedfirmware.org/c/TF-A/trusted-firmware-a/+/10235 Signed-off-by: Olivier Deprez <olivier.deprez@arm.com> Signed-off-by: Lukas Hanel <lukas.hanel@trustonic.com> Change-Id: Ifa8fa208e9b8eb1642c80b5f7b54152dadafa75epull/1981/head
Olivier Deprez
3 years ago
3 changed files with 42 additions and 32 deletions
Loading…
Reference in new issue