mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-05-08 18:41:22 +00:00
PSCI: fix limit of 256 CPUs caused by cast to unsigned char
In psci_setup.c psci_init_pwr_domain_node() takes an unsigned char as node_idx which limits it to initialising only the first 256 CPUs. As the calling function does not check for a limit of 256 I think this is a bug so change the unsigned char to uint16_t and change the cast from the calling site in populate_power_domain_tree(). Also update the non_cpu_pwr_domain_node structure lock_index to uint16_t and update the function signature for psci_lock_init() appropriately. Finally add a define PSCI_MAX_CPUS_INDEX to psci_private.h and add a CASSERT to psci_setup.c to make sure PLATFORM_CORE_COUNT cannot exceed the index value. Signed-off-by: Graeme Gregory <graeme@nuviainc.com> Change-Id: I9e26842277db7483fd698b46bbac62aa86e71b45
This commit is contained in:
parent
669ee776cc
commit
a86865ac42
2 changed files with 19 additions and 4 deletions
|
@ -42,6 +42,11 @@
|
|||
define_psci_cap(PSCI_SYSTEM_RESET2_AARCH64) | \
|
||||
define_psci_cap(PSCI_MEM_CHK_RANGE_AARCH64))
|
||||
|
||||
/* Internally PSCI uses a uint16_t for various cpu indexes so
|
||||
* define a limit to number of CPUs that can be initialised.
|
||||
*/
|
||||
#define PSCI_MAX_CPUS_INDEX 0xFFFFU
|
||||
|
||||
/*
|
||||
* Helper functions to get/set the fields of PSCI per-cpu data.
|
||||
*/
|
||||
|
@ -134,7 +139,7 @@ typedef struct non_cpu_pwr_domain_node {
|
|||
unsigned char level;
|
||||
|
||||
/* For indexing the psci_lock array*/
|
||||
unsigned char lock_index;
|
||||
uint16_t lock_index;
|
||||
} non_cpu_pd_node_t;
|
||||
|
||||
typedef struct cpu_pwr_domain_node {
|
||||
|
@ -239,7 +244,7 @@ static inline void psci_lock_release(non_cpu_pd_node_t *non_cpu_pd_node)
|
|||
#endif /* HW_ASSISTED_COHERENCY */
|
||||
|
||||
static inline void psci_lock_init(non_cpu_pd_node_t *non_cpu_pd_node,
|
||||
unsigned char idx)
|
||||
uint16_t idx)
|
||||
{
|
||||
non_cpu_pd_node[idx].lock_index = idx;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue