1*d8e919c7SMasahiro Yamada /* 2*d8e919c7SMasahiro Yamada * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. 3*d8e919c7SMasahiro Yamada * 4*d8e919c7SMasahiro Yamada * SPDX-License-Identifier: BSD-3-Clause 5*d8e919c7SMasahiro Yamada */ 6*d8e919c7SMasahiro Yamada 7*d8e919c7SMasahiro Yamada #include <arch.h> 8*d8e919c7SMasahiro Yamada #include <platform.h> 9*d8e919c7SMasahiro Yamada 10*d8e919c7SMasahiro Yamada #include "uniphier.h" 11*d8e919c7SMasahiro Yamada 12*d8e919c7SMasahiro Yamada static unsigned char uniphier_power_domain_tree_desc[UNIPHIER_CLUSTER_COUNT + 1]; 13*d8e919c7SMasahiro Yamada 14*d8e919c7SMasahiro Yamada const unsigned char *plat_get_power_domain_tree_desc(void) 15*d8e919c7SMasahiro Yamada { 16*d8e919c7SMasahiro Yamada int i; 17*d8e919c7SMasahiro Yamada 18*d8e919c7SMasahiro Yamada uniphier_power_domain_tree_desc[0] = UNIPHIER_CLUSTER_COUNT; 19*d8e919c7SMasahiro Yamada 20*d8e919c7SMasahiro Yamada for (i = 0; i < UNIPHIER_CLUSTER_COUNT; i++) 21*d8e919c7SMasahiro Yamada uniphier_power_domain_tree_desc[i + 1] = 22*d8e919c7SMasahiro Yamada UNIPHIER_MAX_CPUS_PER_CLUSTER; 23*d8e919c7SMasahiro Yamada 24*d8e919c7SMasahiro Yamada return uniphier_power_domain_tree_desc; 25*d8e919c7SMasahiro Yamada } 26*d8e919c7SMasahiro Yamada 27*d8e919c7SMasahiro Yamada int plat_core_pos_by_mpidr(u_register_t mpidr) 28*d8e919c7SMasahiro Yamada { 29*d8e919c7SMasahiro Yamada unsigned int cluster_id, cpu_id; 30*d8e919c7SMasahiro Yamada 31*d8e919c7SMasahiro Yamada cluster_id = (mpidr >> MPIDR_AFF1_SHIFT) & MPIDR_AFFLVL_MASK; 32*d8e919c7SMasahiro Yamada if (cluster_id >= UNIPHIER_CLUSTER_COUNT) 33*d8e919c7SMasahiro Yamada return -1; 34*d8e919c7SMasahiro Yamada 35*d8e919c7SMasahiro Yamada cpu_id = (mpidr >> MPIDR_AFF0_SHIFT) & MPIDR_AFFLVL_MASK; 36*d8e919c7SMasahiro Yamada if (cpu_id >= UNIPHIER_MAX_CPUS_PER_CLUSTER) 37*d8e919c7SMasahiro Yamada return -1; 38*d8e919c7SMasahiro Yamada 39*d8e919c7SMasahiro Yamada return uniphier_calc_core_pos(mpidr); 40*d8e919c7SMasahiro Yamada } 41