diff options
author | Achin Gupta <achin.gupta@arm.com> | 2015-09-14 21:49:10 +0100 |
---|---|---|
committer | Achin Gupta <achin.gupta@arm.com> | 2015-09-14 21:49:10 +0100 |
commit | 7dc28e9c6e577c5151d0a6df7165f7d21f509f5f (patch) | |
tree | 7b8ca90411e2c16b3334cdb92beb7e72683d1707 /services | |
parent | 84e1903689764718d6c79300a3ce1f764a6f468c (diff) | |
parent | c3ec0b9ea4274120c6e82d86ccc427f13f65fa59 (diff) |
Merge pull request #390 from vikramkanigiri/at/unify_bakery_locks_v2
Re-design bakery lock allocation and algorithm
Diffstat (limited to 'services')
-rw-r--r-- | services/std_svc/psci/psci_common.c | 2 | ||||
-rw-r--r-- | services/std_svc/psci/psci_private.h | 25 | ||||
-rw-r--r-- | services/std_svc/psci/psci_setup.c | 6 |
3 files changed, 9 insertions, 24 deletions
diff --git a/services/std_svc/psci/psci_common.c b/services/std_svc/psci/psci_common.c index e12df04b..73326952 100644 --- a/services/std_svc/psci/psci_common.c +++ b/services/std_svc/psci/psci_common.c @@ -78,6 +78,8 @@ __attribute__ ((section("tzfw_coherent_mem"))) #endif ; +DEFINE_BAKERY_LOCK(psci_locks[PSCI_NUM_NON_CPU_PWR_DOMAINS]); + cpu_pd_node_t psci_cpu_pd_nodes[PLATFORM_CORE_COUNT]; /******************************************************************************* diff --git a/services/std_svc/psci/psci_private.h b/services/std_svc/psci/psci_private.h index 9b55d9f3..8c028a73 100644 --- a/services/std_svc/psci/psci_private.h +++ b/services/std_svc/psci/psci_private.h @@ -42,23 +42,12 @@ * The following helper macros abstract the interface to the Bakery * Lock API. */ -#if USE_COHERENT_MEM -#define psci_lock_init(non_cpu_pd_node, idx) \ - bakery_lock_init(&(non_cpu_pd_node)[(idx)].lock) -#define psci_lock_get(non_cpu_pd_node) \ - bakery_lock_get(&((non_cpu_pd_node)->lock)) -#define psci_lock_release(non_cpu_pd_node) \ - bakery_lock_release(&((non_cpu_pd_node)->lock)) -#else #define psci_lock_init(non_cpu_pd_node, idx) \ ((non_cpu_pd_node)[(idx)].lock_index = (idx)) #define psci_lock_get(non_cpu_pd_node) \ - bakery_lock_get((non_cpu_pd_node)->lock_index, \ - CPU_DATA_PSCI_LOCK_OFFSET) + bakery_lock_get(&psci_locks[(non_cpu_pd_node)->lock_index]) #define psci_lock_release(non_cpu_pd_node) \ - bakery_lock_release((non_cpu_pd_node)->lock_index, \ - CPU_DATA_PSCI_LOCK_OFFSET) -#endif + bakery_lock_release(&psci_locks[(non_cpu_pd_node)->lock_index]) /* * The PSCI capability which are provided by the generic code but does not @@ -140,12 +129,9 @@ typedef struct non_cpu_pwr_domain_node { plat_local_state_t local_state; unsigned char level; -#if USE_COHERENT_MEM - bakery_lock_t lock; -#else - /* For indexing the bakery_info array in per CPU data */ + + /* For indexing the psci_lock array*/ unsigned char lock_index; -#endif } non_cpu_pd_node_t; typedef struct cpu_pwr_domain_node { @@ -174,6 +160,9 @@ extern non_cpu_pd_node_t psci_non_cpu_pd_nodes[PSCI_NUM_NON_CPU_PWR_DOMAINS]; extern cpu_pd_node_t psci_cpu_pd_nodes[PLATFORM_CORE_COUNT]; extern unsigned int psci_caps; +/* One bakery lock is required for each non-cpu power domain */ +DECLARE_BAKERY_LOCK(psci_locks[PSCI_NUM_NON_CPU_PWR_DOMAINS]); + /******************************************************************************* * SPD's power management hooks registered with PSCI ******************************************************************************/ diff --git a/services/std_svc/psci/psci_setup.c b/services/std_svc/psci/psci_setup.c index 94fe630c..7a801873 100644 --- a/services/std_svc/psci/psci_setup.c +++ b/services/std_svc/psci/psci_setup.c @@ -181,12 +181,6 @@ static void populate_power_domain_tree(const unsigned char *topology) /* Validate the sanity of array exported by the platform */ assert(j == PLATFORM_CORE_COUNT); - -#if !USE_COHERENT_MEM - /* Flush the non CPU power domain data to memory */ - flush_dcache_range((uintptr_t) &psci_non_cpu_pd_nodes, - sizeof(psci_non_cpu_pd_nodes)); -#endif } /******************************************************************************* |