diff options
author | Andrew Thoelke <andrew.thoelke@arm.com> | 2014-06-20 00:38:03 +0100 |
---|---|---|
committer | Andrew Thoelke <andrew.thoelke@arm.com> | 2014-06-23 14:56:12 +0100 |
commit | 13ac44a5c7336657ba7518ea31c66f7e7dd7eea8 (patch) | |
tree | b20935b3c3dee3ee537197504c45f40b5bef1e52 /services/std_svc/psci/psci_setup.c | |
parent | 167a935733a6e3e412b8ed6a60034d0d84895f2e (diff) |
Eliminate psci_suspend_context array
psci_suspend_context is an array of cache-line aligned structures
containing the single power_state integer per cpu. This array is
the only structure indexed by the aff_map_node.data integer.
This patch saves 2KB of BL3-1 memory by placing the CPU
power_state value directly in the aff_map_node structure. As a
result, this value is now never cached and the cache clean when
writing the value is no longer required.
Fixes ARM-software/tf-issues#195
Change-Id: Ib4c70c8f79eed295ea541e7827977a588a19ef9b
Diffstat (limited to 'services/std_svc/psci/psci_setup.c')
-rw-r--r-- | services/std_svc/psci/psci_setup.c | 14 |
1 files changed, 1 insertions, 13 deletions
diff --git a/services/std_svc/psci/psci_setup.c b/services/std_svc/psci/psci_setup.c index af821506..68f19a00 100644 --- a/services/std_svc/psci/psci_setup.c +++ b/services/std_svc/psci/psci_setup.c @@ -58,12 +58,6 @@ static cpu_context_t psci_ns_context[PLATFORM_CORE_COUNT]; static aff_limits_node_t psci_aff_limits[MPIDR_MAX_AFFLVL + 1]; /******************************************************************************* - * 'psci_ns_einfo_idx' keeps track of the next free index in the - * 'psci_suspend_context' arrays. - ******************************************************************************/ -static unsigned int psci_ns_einfo_idx; - -/******************************************************************************* * Routines for retrieving the node corresponding to an affinity level instance * in the mpidr. The first one uses binary search to find the node corresponding * to the mpidr (key) at a particular affinity level. The second routine decides @@ -195,13 +189,8 @@ static void psci_init_aff_map_node(unsigned long mpidr, if (state & PSCI_AFF_PRESENT) psci_set_state(&psci_aff_map[idx], PSCI_STATE_OFF); - /* Ensure that we have not overflowed the psci_ns_einfo array */ - assert(psci_ns_einfo_idx < PSCI_NUM_AFFS); - - psci_aff_map[idx].data = psci_ns_einfo_idx; /* Invalidate the suspend context for the node */ - psci_suspend_context[psci_ns_einfo_idx].power_state = PSCI_INVALID_DATA; - psci_ns_einfo_idx++; + psci_aff_map[idx].power_state = PSCI_INVALID_DATA; /* * Associate a non-secure context with this affinity @@ -301,7 +290,6 @@ int32_t psci_setup(void) int afflvl, affmap_idx, max_afflvl; aff_map_node_t *node; - psci_ns_einfo_idx = 0; psci_plat_pm_ops = NULL; /* Find out the maximum affinity level that the platform implements */ |