Introduce locking primitives using CAS instruction
authorJeenu Viswambharan <jeenu.viswambharan@arm.com>
Mon, 16 Jan 2017 16:52:35 +0000 (16:52 +0000)
committerJeenu Viswambharan <jeenu.viswambharan@arm.com>
Tue, 14 Feb 2017 09:26:11 +0000 (09:26 +0000)
commitc877b414870bb3e421518caf9c7652a9807419b5
treef7d2837cb46edd4f3578d39985c4d13fa97e419d
parent4d07e7821e19dc1ebc640f5264c2a769354c8b2d
Introduce locking primitives using CAS instruction

The ARMv8v.1 architecture extension has introduced support for far
atomics, which includes compare-and-swap. Compare and Swap instruction
is only available for AArch64.

Introduce build options to choose the architecture versions to target
ARM Trusted Firmware:

  - ARM_ARCH_MAJOR: selects the major version of target ARM
    Architecture. Default value is 8.

  - ARM_ARCH_MINOR: selects the minor version of target ARM
    Architecture. Default value is 0.

When:

  (ARM_ARCH_MAJOR > 8) || ((ARM_ARCH_MAJOR == 8) && (ARM_ARCH_MINOR >= 1)),

for AArch64, Compare and Swap instruction is used to implement spin
locks. Otherwise, the implementation falls back to using
load-/store-exclusive instructions.

Update user guide, and introduce a section in Firmware Design guide to
summarize support for features introduced in ARMv8 Architecture
Extensions.

Change-Id: I73096a0039502f7aef9ec6ab3ae36680da033f16
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
Makefile
docs/firmware-design.md
docs/user-guide.md
lib/locks/exclusive/aarch64/spinlock.S
make_helpers/build_macros.mk
make_helpers/defaults.mk