mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-05-09 02:51:21 +00:00
PSCI: Introduce cache and barrier wrappers
The PSCI implementation performs cache maintenance operations on its data structures to ensure their visibility to both cache-coherent and non-cache-coherent participants. These cache maintenance operations can be skipped if all PSCI participants are cache-coherent. When HW_ASSISTED_COHERENCY build option is enabled, we assume PSCI participants are cache-coherent. For usage abstraction, this patch introduces wrappers for PSCI cache maintenance and barrier operations used for state coordination: they are effectively NOPs when HW_ASSISTED_COHERENCY is enabled, but are applied otherwise. Also refactor local state usage and associated cache operations to make it clearer. Change-Id: I77f17a90cba41085b7188c1345fe5731c99fad87 Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
This commit is contained in:
parent
d4593e4713
commit
a10d3632ac
5 changed files with 85 additions and 39 deletions
|
@ -38,6 +38,29 @@
|
|||
#include <psci.h>
|
||||
#include <spinlock.h>
|
||||
|
||||
#if HW_ASSISTED_COHERENCY
|
||||
/*
|
||||
* On systems with hardware-assisted coherency, make PSCI cache operations NOP,
|
||||
* as PSCI participants are cache-coherent, and there's no need for explicit
|
||||
* cache maintenance operations or barriers to coordinate their state.
|
||||
*/
|
||||
#define psci_flush_dcache_range(addr, size)
|
||||
#define psci_flush_cpu_data(member)
|
||||
#define psci_inv_cpu_data(member)
|
||||
|
||||
#define psci_dsbish()
|
||||
#else
|
||||
/*
|
||||
* If not all PSCI participants are cache-coherent, perform cache maintenance
|
||||
* and issue barriers wherever required to coordinate state.
|
||||
*/
|
||||
#define psci_flush_dcache_range(addr, size) flush_dcache_range(addr, size)
|
||||
#define psci_flush_cpu_data(member) flush_cpu_data(member)
|
||||
#define psci_inv_cpu_data(member) inv_cpu_data(member)
|
||||
|
||||
#define psci_dsbish() dsbish()
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The following helper macros abstract the interface to the Bakery
|
||||
* Lock API.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue