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