1 /* 2 * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #include <arch.h> 8 9 #include <lib/cassert.h> 10 11 #include "plat_ls.h" 12 #include "platform_def.h" 13 14 unsigned char ls1043_power_domain_tree_desc[LS1043_CLUSTER_COUNT + 1]; 15 16 17 CASSERT(LS1043_CLUSTER_COUNT && LS1043_CLUSTER_COUNT <= 256, 18 assert_invalid_ls1043_cluster_count); 19 20 /******************************************************************************* 21 * This function dynamically constructs the topology according to 22 * LS1043_CLUSTER_COUNT and returns it. 23 ******************************************************************************/ plat_get_power_domain_tree_desc(void)24const unsigned char *plat_get_power_domain_tree_desc(void) 25 { 26 int i; 27 28 ls1043_power_domain_tree_desc[0] = LS1043_CLUSTER_COUNT; 29 30 for (i = 0; i < LS1043_CLUSTER_COUNT; i++) 31 ls1043_power_domain_tree_desc[i + 1] = 32 LS1043_MAX_CPUS_PER_CLUSTER; 33 34 return ls1043_power_domain_tree_desc; 35 } 36 37 /******************************************************************************* 38 * This function returns the core count within the cluster corresponding to 39 * `mpidr`. 40 ******************************************************************************/ plat_ls_get_cluster_core_count(u_register_t mpidr)41unsigned int plat_ls_get_cluster_core_count(u_register_t mpidr) 42 { 43 return LS1043_MAX_CPUS_PER_CLUSTER; 44 } 45 46 /******************************************************************************* 47 * This function implements a part of the critical interface between the psci 48 * generic layer and the platform that allows the former to query the platform 49 * to convert an MPIDR to a unique linear index. An error code (-1) is returned 50 * in case the MPIDR is invalid. 51 ******************************************************************************/ plat_core_pos_by_mpidr(u_register_t mpidr)52int plat_core_pos_by_mpidr(u_register_t mpidr) 53 { 54 if (ls_check_mpidr(mpidr) == -1) 55 return -1; 56 57 return plat_ls_calc_core_pos(mpidr); 58 } 59