xref: /rk3399_ARM-atf/plat/socionext/uniphier/uniphier_topology.c (revision d8e919c7b81a2739300912d6edbd3f929a136dbf)
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